我有两张桌子:
表1:
id(int) | stuff(text)
-------------------------
1 | foobarfoobarfoo
2 | blahfooblah
3 | foo
表2:
id(int) | otherstuff(text)
--------------------------
1 | foo
2 | bar
3 | blah
table1中的一行可以有多个foo,bar等。而且,table2中的每一行都可以出现在table1的多行中。
这是保持这种直线的更好方法。我应该创建这样的第三个表:
表3:
id_from2(int) | id_from1(int)
-----------------------------
1 | 1
1 | 2
1 | 3
2 | 1
3 | 2
或者,我是否应该在table1和table2中添加一个类型数组列来跟踪相同的信息?
答案 0 :(得分:5)
是的,使用联结表是在RDBMS中实现多对多关系的正确方法。
如有必要,您可以向联结表添加更多属性(即table3
)。例如,如果关系是 ordered ,则可以添加第三个字段,指定(table1, table2)
组合的排序。这是关于Stack Overflow的答案的link,它给出了一个多对多表的详细示例。
答案 1 :(得分:2)
这是一个标准的Many-To-Many设计,最灵活的解决方案是第三个具有id关联的表格。
答案 2 :(得分:1)
不能同意。您添加第三个表的设计是正确的。
答案 3 :(得分:0)
关系表是关联多对多关系的最佳方式。你做得很好。
答案 4 :(得分:0)
所以你想要多对多的关系?表1中的一个可以与2中的更多对象相关,反之亦然?是的,像你说的那样使用第三张桌子,这是最好的做法。另外附上主键自动增量列,只是为了安全