用户设置/隐私数据库设计
我使用PHP和MySQL,用户有多种选择,如开发一个网站:用户设置/隐私数据库设计
- 通过电子邮件收到通知
- 隐藏/显示的Facebook/Twitter的链接
它还将允许用户从朋友/非朋友可查看的信息中控制其个人资料的隐私,以及哪些朋友能够查看某些照片/相册。
我不知道我会怎么设计这个表是稳健的,我应该放什么东西考虑进去。 Facebook如何仅仅因为好奇而管理每个用户的隐私设置和选项?
我的解决方法到目前为止是沿此线:
ID - 主键
member_id - 主键和外键(会员表 'ID')
facebook_viewable - int(1) - 0代表否,1代表是
email_notifications - 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成为您的应用程序代码中的常量,它是用来编程执行实际规则和值可以很容易地添加到路口表。当您制定新的隐私规则时,您只需将一条记录插入PRIVACY_RULE,然后进行应用程序代码更改。不需要更改数据库模式。
注意,这个相同的基本结构上加以阐述,使之更加灵活。例如,除了二进制标志之外,您可以拥有多种不同类型的值,并且您可以使用PRIVACY_RULE
表中额外的“rule type
”属性来控制这些值的解释。我不想过于偏离主题,所以让我知道你是否想要这方面的更多细节。
很酷的东西,你将如何处理“谁能看到我的照片:每个人|朋友|定制”? –
正如我在我的回答中暗示的那样,如果你愿意,可以很容易地将“rule_value”从一个位标记扩展到一个枚举中。这可以处理像任何人|朋友|朋友等朋友的多值设置。您可以通过将规则应用于成员拥有的对象来进行自定义。这将需要另一个表,看起来像'MEMBER_PRIVACY',但其中包括对象的FK(照片/页面/ ...) –
有的可以写一个与facebook的twitter无关的网站。 – 2011-08-28 23:39:46
Google Plus ...? – unleashed
无关,但你想要tinyint,而不是int。 (1)最后不会影响数据的大小,所以这些零和那些将仍然占用整数空间。这是一种常见的误解。 – Aaron