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

Php 用户设置/隐私数据库设计,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我正在使用PHP和MySQL开发一个网站,用户可以选择以下选项: 通过电子邮件接收通知 隐藏/显示Facebook/Twitter链接 它还允许用户控制其个人资料的隐私,包括朋友/非朋友可以查看的信息,以及哪些朋友可以查看某些照片/相册 我想知道我将如何设计这张桌子,使其坚固耐用,以及我应该考虑哪些因素。仅仅出于好奇,Facebook如何管理每个用户的隐私设置和选项 到目前为止,我的解决方案是: id-主键 成员id-主键和外键成员表“id” facebook_可视-int1-0表示否,1表示是

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

通过电子邮件接收通知 隐藏/显示Facebook/Twitter链接 它还允许用户控制其个人资料的隐私,包括朋友/非朋友可以查看的信息,以及哪些朋友可以查看某些照片/相册

我想知道我将如何设计这张桌子,使其坚固耐用,以及我应该考虑哪些因素。仅仅出于好奇,Facebook如何管理每个用户的隐私设置和选项

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

id-主键

成员id-主键和外键成员表“id”

facebook_可视-int1-0表示否,1表示是


电子邮件通知-int1-0表示否,1表示是首先,如果id和成员id都是主要的,您可能不需要同时拥有它们。你真的需要会员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表上的附加规则类型属性来控制这些值的解释。我不想离题太远,所以如果您想了解这方面的更多细节,请告诉我。

首先,如果您的id和会员id都是主要的,您可能不需要同时拥有它们。你真的需要会员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表上的附加规则类型属性来控制这些值的解释。我不想离题太远,所以如果你想了解这方面的更多细节,请告诉我。

请写一个与facebook的twitter无关的网站。不相关,但你想要的是tinyint,而不是int。最后的1不会影响数据的大小,所以那些0和1仍然会占据和int一样多的空间。这是一个常见的误解。一些人可以写一个与facebook的twitter无关的网站吗,所以那些0和1仍然会占据和int一样多的空间。这是一个常见的误解。酷的东西,你会如何处理谁能看到我的照片:每个人|朋友|自定义?正如我在回答中开始提到的,如果你愿意,可以很容易地将rule|u值从一个位标志扩展到一个枚举。这可以处理多值设置,如任何人的朋友、朋友的朋友等等。您还可以通过将规则应用于成员所拥有的对象来进行自定义。这将需要另一个看起来像MEMBER|u PRIVACY的表,但其中包含一个对象照片/页面的FK/…很酷的东西,您将如何处理可以查看我照片的人:Everyone | friends | custom?正如我在回答中开始提到的,如果您愿意,可以很容易地将规则|u值从位标志扩展到枚举中。这可以处理多值设置,如任何人的朋友、朋友的朋友等等。您还可以通过将规则应用于成员所拥有的对象来进行自定义。那个 需要另一个看起来像MEMBER_PRIVACY的表,但其中包含指向对象photo/page/…的FK。。。