Facebook"喜欢"数据结构

Osk*_*lin 27 database-design facebook facebook-like

我一直想知道facebook如何管理你可以"喜欢"的所有不同事物的数据库设计.如果只有一件事需要,这很简单,只是你喜欢的外键和你是谁的外键.

但是必须有数以百计的不同表格,你可以在Facebook上"喜欢".他们如何存储喜欢的东西?

Ada*_*son 25

如果要在关系数据库中表示此类结构,则需要使用通常称为表继承的层次结构.在表继承中,您有一个表定义类型的表,然后是表,其主键也是返回父类的外键.

使用Facebook示例,您可能会遇到以下情况:

User
------------
UserId (PK)

Item
-------------
ItemId (PK)
ItemType (discriminator column)
OwnerId (FK to User)

Status
------------
ItemId (PK, FK to Item)
StatusText 

RelationshipUpdate
------------------
ItemId (PK, FK to Item)
RelationshipStatus
RelationTo (FK to User)

Like
------------
OwnerId (FK to User)
ItemId (FK to Item)
Compound PK of OwnerId, ItemId
Run Code Online (Sandbox Code Playgroud)

在兴趣完整性方面,值得注意的是Facebook并没有将RDBMS用于此类事情.他们为这种存储选择了NoSQL解决方案.但是,这是在RDBMS中存储这种松散耦合信息的一种方法.