用户设置/隐私数据库设计

时间:2011-08-28 23:37:22

标签: php mysql database database-design

我正在使用PHP和MySQL开发一个网站,用户可以选择以下选项:

  • 通过电子邮件接收通知
  • 隐藏/显示Facebook / Twitter链接

它还允许用户从可以查看朋友/非朋友的信息以及朋友能够查看某些照片/相册的信息中控制他们个人资料的隐私。

我想知道如何设计这个表格是否健壮以及我应该考虑哪些事情。 Facebook出于好奇心如何管理每个用户的隐私设置和选项?

到目前为止,我的解决方案是:

id - 主键

member_id - 主键和外键(会员表'id')

facebook_viewable - int(1) - 0表示否,1表示是

email_notifications - int(1) - 0表示否,1表示是

1 个答案:

答案 0 :(得分:7)

首先,如果它们都是主要版本,您可能不需要同时拥有idmember_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”属性来控制这些值的解释。我不想偏离这个话题,所以如果你想进一步了解这方面的话,请告诉我。