l******0 发帖数: 244 | 1 如果想存储所有学生以及学生与学生之间的朋友关系,一个表存学生, 另一个表存朋友
关系。
Student(id, name)
Friend (id_from, id_to)
由于关系是双向的,对每个关系,Friend 里面需要存两次,这样才方便查询。
a->b
b->a
但查询语句需要用到两个 Join.
这种多对多关系的存储和检索,关系数据库里面这是常见的方法吗?
Test here:
http://sqlfiddle.com/#!9/5ec63/1 |
s********r 发帖数: 394 | 2 双向存储在逻辑上是必须的,比如我加你为好友,你还没有接受时就需要一条纪录,互
加后再加一条反向纪录
★ 发自iPhone App: ChineseWeb 8.7
【在 l******0 的大作中提到】 : 如果想存储所有学生以及学生与学生之间的朋友关系,一个表存学生, 另一个表存朋友 : 关系。 : Student(id, name) : Friend (id_from, id_to) : 由于关系是双向的,对每个关系,Friend 里面需要存两次,这样才方便查询。 : a->b : b->a : 但查询语句需要用到两个 Join. : 这种多对多关系的存储和检索,关系数据库里面这是常见的方法吗? : Test here:
|
n******7 发帖数: 12463 | |
n*w 发帖数: 3393 | 4 很常见
【在 l******0 的大作中提到】 : 如果想存储所有学生以及学生与学生之间的朋友关系,一个表存学生, 另一个表存朋友 : 关系。 : Student(id, name) : Friend (id_from, id_to) : 由于关系是双向的,对每个关系,Friend 里面需要存两次,这样才方便查询。 : a->b : b->a : 但查询语句需要用到两个 Join. : 这种多对多关系的存储和检索,关系数据库里面这是常见的方法吗? : Test here:
|
p**2 发帖数: 613 | 5 #1 常见
#2 尽量不用Join,用select嵌套
#3 这种典型的key-value,为啥不用NO-SQL?
【在 l******0 的大作中提到】 : 如果想存储所有学生以及学生与学生之间的朋友关系,一个表存学生, 另一个表存朋友 : 关系。 : Student(id, name) : Friend (id_from, id_to) : 由于关系是双向的,对每个关系,Friend 里面需要存两次,这样才方便查询。 : a->b : b->a : 但查询语句需要用到两个 Join. : 这种多对多关系的存储和检索,关系数据库里面这是常见的方法吗? : Test here:
|
l******0 发帖数: 244 | 6 NO-SQL 更简单吗?
关系数据库里面典型的多对多关系,这里用 SQL 也很好吧?
【在 p**2 的大作中提到】 : #1 常见 : #2 尽量不用Join,用select嵌套 : #3 这种典型的key-value,为啥不用NO-SQL?
|
w********m 发帖数: 1137 | 7 SQL的复杂度不好分析
理想的状态是一个hash表,表里套个set。 |
d******k 发帖数: 4295 | 8 如果朋友都是双向的,存一遍就行了吧。
Friend (id_1, id_2)
【在 l******0 的大作中提到】 : 如果想存储所有学生以及学生与学生之间的朋友关系,一个表存学生, 另一个表存朋友 : 关系。 : Student(id, name) : Friend (id_from, id_to) : 由于关系是双向的,对每个关系,Friend 里面需要存两次,这样才方便查询。 : a->b : b->a : 但查询语句需要用到两个 Join. : 这种多对多关系的存储和检索,关系数据库里面这是常见的方法吗? : Test here:
|