社交网络&网络联盟

时间:2010-05-04 16:19:36

标签: sql database

我正在为社交网络项目规划数据库 偶然发现这个网址是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架构将被赞赏 你的回应。

提前致谢...

1 个答案:

答案 0 :(得分:4)

首先,它是一个对象模式而不是数据库模式。其次,它并没有显示出一切,远非完整。看看Schools课程(不是表格)通知关系,高中1和2以及学校名单。您是否在Profile类中看到属性以保存这些“外键”。

您的问题无法准确回答

其次,为什么要关心facebook如何做到这一点?第三范式不是黑色艺术?没有遗失的Tome和永远不会知道的永远的知识。

您想要从属关系和个人资料之间建立多对多的关系吗?或不?您是否试图揭示从属关系之间的相互依赖关系?

为什么不向我们询问有关如何设计您想要做的具体问题?

修改

  

一个档案可以有很多隶属关系。一个联盟可以有很多个人资料。

这是一种多对多的关系。

在物理数据库中,您需要许多映射表。

最简单的是它包含来自两个表的PK,这些列构成该表的PK。

现在只需将列添加到映射表中即可。

Start_date =>个人资料添加该联盟

的日期

End_Date =>本质上是一个逻辑删除

关于这段关系你还想知道什么。

想想这些对象 1.视频 2.租客 3.存储

有许多可被描述为租赁的人。

VideoID,RenterID,StoreID,

您还想了解“租赁”

  1. 日期(签出)
  2. 退回日期
  3. 截止日期
  4. 折扣(说它租3送1,这是第四个或者什么)