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

unl*_*hed 1 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表示是

Joe*_*own 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)
Run Code Online (Sandbox Code Playgroud)

这样,隐私规则ID在应用程序代码中成为常量,用于以编程方式强制实施规则,并且可以将值轻松添加到交集表中.当您发明新的隐私规则时,您需要做的就是将一条记录插入PRIVACY_RULE,然后更改应用程序代码.无需更改数据库架构.

请注意,可以详细说明这种相同的基本结构,使其更加灵活.例如,除了二进制标志之外,您可以有许多不同类型的值,您可以使用表中的附加" rule type"属性来控制这些值的解释PRIVACY_RULE.我不想偏离这个主题,所以如果你想进一步了解这个方面,请告诉我.

  • 当我开始在我的回答中暗示,如果你愿意,将"rule_value"从一个标志扩展到一个枚举就很容易了.这可以像任何人|朋友|朋友的朋友一样处理多值设置等等.您也可以通过将规则应用于成员拥有的对象来进行自定义.这将需要另一个看起来像`MEMBER_PRIVACY`的表,但它包含一个FK到对象(照片/页面/ ...) (3认同)