我正在为社交网络项目规划数据库 偶然发现这个网址是facebook的(原始)逆向工程猜测 架构:
http://www.flickr.com/photos/ikhnaton2/533233247/
我感兴趣的是“附属”的概念,我正在努力 从技术上讲,完全理解它们的工作原理。我有点困惑的地方是 FacebookGroups“,”FacebookEvent“和”Affiliations“表格中的NetworkID列(Affiliations中的NID)。这些网络关系如何相互关联?
在我自己的项目中,我有一个简单的个人资料表:
CREATE TABLE [dbo].[Profiles](
[profileid] [int] IDENTITY(1,1) NOT NULL,
[userid] [uniqueidentifier] NOT NULL,
[username] [varchar](255) COLLATE Latin1_General_CI_AI NOT NULL,
[applicationname] [varchar](255) COLLATE Latin1_General_CI_AI NOT NULL,
[isanonymous] [bit] NULL,
[lastactivity] [datetime] NULL,
[lastupdated] [datetime] NULL,
CONSTRAINT [PK__Profiles__1DB06A4F] PRIMARY KEY CLUSTERED
(
[profileid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
CONSTRAINT [PKProfiles] UNIQUE NONCLUSTERED
(
[username] ASC,
[applicationname] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
一个档案可以有很多隶属关系。一个联盟可以有很多个人资料。我想以这样一种方式设计它,即从属关系之间的关系告诉我关于相关配置文件的一些信息。事实上,根据用户选择的从属关系,我想知道如何推断尽可能多的关于那个人的事情。
我的问题是,我应该如何设计我的网络联盟表以及如何设计 他们按照我的上述要求运作吗?粗略的SQL架构将被赞赏 你的回应。
提前致谢...
答案 0 :(得分:4)
首先,它是一个对象模式而不是数据库模式。其次,它并没有显示出一切,远非完整。看看Schools课程(不是表格)通知关系,高中1和2以及学校名单。您是否在Profile类中看到属性以保存这些“外键”。
您的问题无法准确回答
其次,为什么要关心facebook如何做到这一点?第三范式不是黑色艺术?没有遗失的Tome和永远不会知道的永远的知识。
您想要从属关系和个人资料之间建立多对多的关系吗?或不?您是否试图揭示从属关系之间的相互依赖关系?
为什么不向我们询问有关如何设计您想要做的具体问题?
一个档案可以有很多隶属关系。一个联盟可以有很多个人资料。
这是一种多对多的关系。
在物理数据库中,您需要许多映射表。
最简单的是它包含来自两个表的PK,这些列构成该表的PK。
现在只需将列添加到映射表中即可。
Start_date =>个人资料添加该联盟
的日期End_Date =>本质上是一个逻辑删除
关于这段关系你还想知道什么。
想想这些对象 1.视频 2.租客 3.存储
有许多可被描述为租赁的人。
VideoID,RenterID,StoreID,
您还想了解“租赁”