相关项目 - 在记录之间建立双向关联

时间:2013-04-28 17:17:13

标签: mysql database-design data-modeling

我正在使用MySql数据库,我有一个名为books的表。

我想实现一个系统,用户可以通过该系统关联两个项目,这样当查看一个项目时,它会显示一个指向另一个项目的链接。

我的问题是我希望以book1id==1)与book2id==2)相关联的方式执行此操作,{{1 }}链接到book2,反之亦然。

我想要这样做的方法是制作一个名为book1的新表,并至少有两个col relationscol1,其中我保存了ids所有相关项目。 例如,col2book1的行如下所示:

book2

因此,在查看 ————————————————— | COL1 | COL2 | ————————————————— 1| 1 | 2 | ————————————————— 时,我会book1

我想通过这种方式它应该可行,但我想知道是否有更好/更有效的方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

“或” - 子句是索引使用的杀手。我会说如果你的关系是对称的,只需将两个对添加到表中 - 所以1-2和2-1。

它将所需空间增加一倍,但是 - 这就是SQL。 ; - )

编辑 澄清“杀死索引”:当您在col1上有索引时,请求

select col2 from correlation_table where col1 = 12

非常快,而声明

select col1, col2 from correlation_table where col1 = 12 or col2 = 12

很慢,一旦你有很多关系,你需要col1上的索引和col2上的一个索引,你必须将查询分解为

    select col1, col2 from correlation_table where col1 = 12
  union
    select col1, col2 from correlation_table where col2 = 12