我正在使用PHP和MySQL开发一个网站,用户可以选择以下选项:
它还允许用户从可以查看朋友/非朋友的信息以及朋友能够查看某些照片/相册的信息中控制他们个人资料的隐私。
我想知道如何设计这个表格是否健壮以及我应该考虑哪些事情。 Facebook出于好奇心如何管理每个用户的隐私设置和选项?
到目前为止,我的解决方案是:
id - 主键
member_id - 主键和外键(会员表'id')
facebook_viewable - int(1) - 0表示否,1表示是
email_notifications - int(1) - 0表示否,1表示是
答案 0 :(得分:7)
首先,如果它们都是主要版本,您可能不需要同时拥有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在应用程序代码中成为常量,用于以编程方式强制实施规则,并且可以将值轻松添加到交集表中。当您发明新的隐私规则时,您需要做的就是将一条记录插入PRIVACY_RULE,然后更改应用程序代码。无需更改数据库架构。
请注意,可以详细说明相同的基本结构,使其更加灵活。例如,除了二进制标志之外,您可以使用许多不同类型的值,并且可以使用rule type
表上的附加“PRIVACY_RULE
”属性来控制这些值的解释。我不想偏离这个话题,所以如果你想进一步了解这方面的话,请告诉我。