许多人没有主键

时间:2009-10-16 08:58:33

标签: sql mysql

在此演示文稿中:http://docs.google.com/present/view?id=ddqht6x_1559tbtcgg 幻灯片6。 演示者的snippets_tags表有一个主键,为什么?是不是只是浪费空间? 我通常使用其他两个cols。而不是打扰主键。

6 个答案:

答案 0 :(得分:3)

是的,id列是不必要的,PK应该与其他两列相对。

但请,我们都要清楚。 ID列!=主键。

答案 1 :(得分:1)

如果您想将其他数据与该关系相关联。

例如,您可能希望添加一个logtable,其中包含创建关系时的链接或类似内容。

如果你需要添加这种元数据,你不需要在关系表中,因为它需要尽可能紧凑,以使连接高效,所以你添加一个主键并将其链接到另一个表包含所有元数据。

答案 2 :(得分:1)

我必须同意你的意见。我会使snippet_id和tag_id成为主键,这也可以保证没有不必要的重复。

答案 3 :(得分:1)

只是品味问题。这两种做法都很常见。

答案 4 :(得分:0)

在这种特殊情况下没用。但是,如果该表涉及一对多的关系(这表明设计是非常错误的),则需要它。

答案 5 :(得分:0)

这种模式很常见。 IMO,我会使用复合pk,在这种情况下snippet_idtag_id。我没有看到复合模型的“真正”优势,也许你可以节省磁盘空间。

复合模型的优点是可以避免执行joins并只查询外键。