【发布时间】:2013-09-04 00:06:05
【问题描述】:
我是 SQL 的新手,我首先要尝试尽可能多地学习,因为我正在编写代码,这很困难,因为我正在设计我必须使用的数据库虽然所以我想确保我做对了。我学习了多对多桥接表的基础知识,但是如果这两个字段是相同的类型怎么办?假设一个拥有数千名用户的社交网络,您将如何创建一个表格来跟踪谁是谁的朋友?如果有关于每个关系的附加数据怎么办,比如......“约会朋友”。知道会有诸如“显示在 dateY 和 dateZ 之间的 userX 的所有朋友”之类的查询。我的数据库会有这样的几种情况,我想不出一种有效的方法来做到这一点。由于对我来说很多,我认为其他人已经找到了设计表格的最佳方法,对吧?
【问题讨论】:
-
我不明白你的意思,“如果两个字段是相同的类型怎么办?”您仍然可以拥有一个连接表并向其添加其他属性。
-
我的意思是,当我在用户和乐队的上下文中学习多对多时,用户可以“喜欢”乐队。所以我被告知要制作一个用户-乐队桥接表,其中一列是用户,另一列是“最喜欢的乐队”。两种不同类型的数据。在这种“相同类型”的方法中,两个列都是相同的类型(“用户”)......所以......我必须将每个关系包含两次,并将关系的所有元数据包含两次。这有意义吗?
-
在考虑多对多关系时,对象(或行)的“类型”并不是一个重要的考虑因素。这是考虑它的最佳方式:您有两个表,用户和组。一个用户可能属于许多组(一对多)......但一个组也可能由许多用户组成(也是一对多)。因此,多对多关系可以被认为是双向的一对多关系。桥接表是为您调解这种关系的结构。用户不是组,但即使类型不同,它们仍然可能具有这种关系。
-
基本上他是在问你应该如何为对称的多对多关系建模。
-
查看 dba stackexchange 中的此线程:dba.stackexchange.com/questions/10199/… 还可以查看 9Lessons 中的示例课程以获得更多想法:9lessons.info/2010/04/database-design-create-tables-and.html
标签: sql