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

问题描述:

我使用PHP和MySQL,用户有多种选择,如开发一个网站:用户设置/隐私数据库设计

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

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

我不知道我会怎么设计这个表是稳健的,我应该放什么东西考虑进去。 Facebook如何仅仅因为好奇而管理每个用户的隐私设置和选项?

我的解决方法到目前为止是沿此线:

ID - 主键

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

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

email_notifications - INT(1) - 0表示没有发生; 1是

+4

有的可以写一个与facebook的twitter无关的网站。 – 2011-08-28 23:39:46

+1

Google Plus ...? – unleashed

+2

无关,但你想要tinyint,而不是int。 (1)最后不会影响数据的大小,所以这些零和那些将仍然占用整数空间。这是一种常见的误解。 – Aaron

首先,你可能不需要同时拥有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,然后进行应用程序代码更改。不需要更改数据库模式。

注意,这个相同的基本结构上加以阐述,使之更加灵活。例如,除了二进制标志之外,您可以拥有多种不同类型的值,并且您可以使用PRIVACY_RULE表中额外的“rule type”属性来控制这些值的解释。我不想过于偏离主题,所以让我知道你是否想要这方面的更多细节。

+0

很酷的东西,你将如何处理“谁能看到我的照片:每个人|朋友|定制”? –

+3

正如我在我的回答中暗示的那样,如果你愿意,可以很容易地将“rule_value”从一个位标记扩展到一个枚举中。这可以处理像任何人|朋友|朋友等朋友的多值设置。您可以通过将规则应用于成员拥有的对象来进行自定义。这将需要另一个表,看起来像'MEMBER_PRIVACY',但其中包括对象的FK(照片/页面/ ...) –