我正在开发一个使用php和mysql的网站,用户可以选择:
通过电子邮件接收通知
隐藏/显示Facebook/Twitter链接
它还允许用户从可供朋友/非朋友查看的信息以及哪些朋友可以查看某些照片/相册来控制其个人资料的隐私。
我想知道我该如何设计这张桌子,使其更坚固,我应该考虑哪些因素。仅仅出于好奇,Facebook如何管理每个用户的隐私设置和选项?
到目前为止,我的解决方案大致如下:
ID-主键
member_id-主键和外键(成员表'id')
Facebook可查看-int(1)-0表示否,1表示是
电子邮件通知-int(1)-0表示否,1表示是
最佳答案
首先,如果它们都是主要的,您可能不需要同时拥有id
和member_id
。你真的需要member_id
这样你就可以放下另一个id
。
为了更健壮,您需要的是将设置驱动成行而不是列。从数据库的角度来看,附加行比更改表以添加列要容易得多。
您需要的是包含隐私规则类型列表的表,然后是成员表和隐私规则类型表之间的交集表。架构如下:
MEMBER
id int not null PRIMARY KEY
, name nvarchar(50)...
, (and so forth)
PRIVACY_RULE
id int not null PRIMARY KEY
, rule_description nvarchar(50)
MEMBER_PRIVACY
member_id int not null
, privacy_rule_id int not null
, rule_value tinyint
, PRIMARY KEY (member_id, privacy_rule_id)
这样,隐私规则id就成为应用程序代码中的一个常量,用于以编程方式强制执行实际规则,并且可以很容易地将值添加到交集表中。当你发明一个新的隐私规则时,你只需要在隐私规则中插入一条记录,然后修改你的应用程序代码。不需要更改数据库架构。
请注意,同样的基本结构可以被详细阐述,以使其更加灵活。例如,除了二进制标志之外,您可以有许多不同类型的值,并且可以使用
rule type
表上的附加“PRIVACY_RULE
”属性来控制这些值的解释。我不想在这个话题上走得太远,所以如果你想进一步了解这方面的细节,请告诉我。关于php - 用户设置/隐私数据库设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7224746/