我正在为社交网络项目规划数据库,并且 偶然发现这个网址,这是对 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 模式将不胜感激 你的回应。
提前致谢...
最佳答案
首先,它是一个对象模式而不是数据库模式。其次,它并没有展示一切,远未完成。查看 Schools 类(不是表),注意关系、高中 1 和 2 以及学校列表。您是否在 Profile 类中看到保存这些“外键”的属性。
无法准确回答您的问题
第二,为什么要关心 Facebook 是如何做到的?第三范式不是黑魔法吗?没有任何关于《失落与永远》的知识是你不知道的。
您希望从属关系和个人资料之间存在多对多关系吗?或不?您是否试图揭示隶属关系之间的相互依赖性?
为什么不直接向我们询问有关如何设计您想要做的事情的具体问题?
编辑
One profile can have many affiliations. And one affiliation can have many profiles.
这是多对多关系。
在物理数据库中,您需要一个多对多映射表。
最简单的是,它包含两个表中的 PK,并且这些列形成该表的 PK。
现在只需将列添加到映射表即可。
Start_date => 个人资料添加该隶属关系的日期
End_Date => 本质上是逻辑删除
关于这段关系,您还想了解什么。
想想这些物体 1. 视频 2. 承租人 3.存储
可以将多对多对多描述为租赁。
VideoID、RenterID、StoreID、
关于“租赁”您还想了解什么
- 日期( checkout )
- 返回日期
- 截止日期
- 折扣(假设是租 3 送 1,这是第四个或其他)
关于sql - 社交网络和网络关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2767034/