2017-02-13 141 views
2

我们对这些关系:如何在数据库中实现这些实体关系?

Smith <=> Williams 
Williams <=> Thomas 
Smith <=> Thomas 
Smith <=> Jones 

这意味着威廉姆斯史密斯的朋友,反之亦然。
如果你想找到像威廉姆斯每个人的朋友,需要搜索双方。
我在数据库中应用这种关系是这样的:

id name1  name2 
1 Smith  Williams 
2 Williams Thomas 
3 Smith  Thomas 
4 Smith  Jones 

或者这样:

id name1  name2 
1 Smith  Williams 
2 Williams Smith 
3 Williams Thomas 
4 Thomas Williams 
5 Smith  Thomas 
6 Thomas Smith 
7 Smith  Jones 
8 Jones  Smith 

有没有更好的解决办法?

+1

你应该有一个id-name表和另一个代表关系的表,使用他们的id。 – Sebastianb

+2

它被称为多对多关系。谷歌它 – perissf

+0

我会去与第一个解决方案 – user489872

回答

1

你只需要两个表:

[People]与标识和名称 和表[Relationship]有两个ID,每个FK以人ID。

请注意,您可以考虑双向或单向关系,这实际上取决于您的实施。当然,如果你的关系是单向的,你需要在你的关系表中插入史密斯=> Jones和Jones < => Smith。

这是一个Many-to-Many关系,但注意不是关系在两个不同的表之间(与维基百科示例中的作者和书籍不同),您正在执行同一个表中两个不同实体之间的关系。

奖励:如果您确实需要分类的那种关系的两个人之间,你可以做到这一点与第三个表[RelationshipType]只是一个说明和标识和这个ID添加到关系表。