如何在数据库中实现这些实体关系?

时间:2017-02-13 13:06:38

标签: mysql sql database

我们有这些关系:

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 个答案:

答案 0 :(得分:1)

您只需要两张桌子:

包含ID和名称的表[People] 和表[Relationship]有两个id,每个ID都是FK到People id。

注意你可以考虑双向或单向的关系,这实际上取决于你的实现。当然,如果您的关系是单向的,则需要插入Smith&lt; =&gt;琼斯和琼斯&lt; =&gt;史密斯在你的关系表中。

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

加分:如果您确实需要对两个人之间的关系进行分类,您可以使用第三个表格[RelationshipType]进行分类,只需输入说明和ID,然后将此ID添加到关系表。