【发布时间】:2014-01-02 17:58:46
【问题描述】:
我的数据库中有很多表,例如 fs_user 表,以下是表列的摘录(处理隐私设置):
4 列来自表 fs_user:
show_email_to
show_address_to
show_gender_to
show_interested_in_to
与许多社交网络一样,我不仅需要指定哪些数据是私有的,哪些是公开的,还需要指定哪些数据可供选定的用户使用,哪些不可用。
由于我有大约 30 个数据,如上面的 4 个数据,我认为为每个数据创建一个表并与表 fs_user 建立多对多关系会很糟糕。
这就是为什么,我想到了将这些数据保存在 Json 表单中的每一列(其 type=TEXT)的想法,例如
show_email_to => {1:'ALL',2:'BUT',3:'3'}
此数据意味着,向所有用户显示电子邮件,除了 id=3 的用户。
另一个例子:
show_email_to => {1:'NONE',2:'BUT',3:'3',4:'80',5:'10'}
这意味着,除了用户 id=3、id=80 和 id=10 之外,没有其他用户会看到该电子邮件。
当然,MySql查询会选择这个数据,PHP/Js会从Json中提取我需要的数据。
另外一点,有时.. 用户只想向他的朋友显示数据,除了 3 个朋友。
这样就可以了:
show_email_to => {1:'FRIENDS',2:'BUT',3:'3'}
这意味着电子邮件将显示给他的所有朋友,除了 id=3 的用户。
我的问题是:与“多对多”解决方案(需要在许多表中包含许多数据)相比,该系统的性能、灵活性(用于其他用途)有多少??
注意:我已经知道在一个列中保存许多元素是一种不好的做法,但是在这里:我认为这是一个 json 元素,可以被视为一个一个对象
【问题讨论】:
-
这使得查询特定值变得非常困难。
-
如果你要做这样的事情,它的结构应该像
{"allow": "ALL", "exclude": [3, 4, 80, 10]} -
这就是为什么我已经计划与此并行使用 Memcache 的原因,再加上 php 与 json 一起表现出色的事实。
-
或者更好:列出所有不允许向用户名XXX发送电子邮件的用户。
-
您的格式也使检查参照完整性变得困难。对于普通关系,您可以使用外键约束。