首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户设置/隐私数据库设计

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

Stack Overflow用户
提问于 2011-08-28 23:37:21
回答 1查看 2.5K关注 0票数 1

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

email

  • hide/display Facebook/Twitter链接

接收通知

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

我想知道我将如何设计这张表,使之健壮,以及我应该考虑什么。仅仅出于好奇,Facebook如何管理每个用户的隐私设置和选项?

到目前为止,我的解决办法是这样做:

id -主键

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-29 01:19:39

首先,如果idmember_id都是主要的,那么它们可能不需要同时使用。实际上,您需要member_id,所以您可以直接放弃另一个id

要保持健壮,您想要的是将设置驱动到行中,而不是列中。从数据库的角度来看,添加行要比修改表以添加列容易得多。

您需要的是一个包含隐私规则类型列表的表,然后是成员表和隐私规则类型表之间的交集表。模式如下所示:

代码语言:javascript
复制
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表上添加一个附加的"rule type“属性来控制这些值的解释。我不想在这个话题上走得太远,所以如果你想了解这个方面的更多细节,请告诉我。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7224746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档