数据库设计:需要复合键+外键

时间:2011-07-01 00:25:51

标签: mysql database database-design

我有2个表有1-M关系的表:

TABLE foo
 - foo_id (PK)
 - foobar_id
 - value

TABLE bar
 - bar_id (PK)
 - foo_id (FK to foo.foo_id)
 - foobar_id
 - value

我想确保foo.foobar_idfoo.value是唯一的,因此希望将它们作为复合键。如果我这样做,那么我可能会摆脱foo.foo_id。如果我这样做,我如何关联foobar

我还希望bar.foo_idbar.foobar_id是唯一的,但如果我删除foo.foo_id则会遇到问题。

关于如何建模的建议?

2 个答案:

答案 0 :(得分:1)

只需创建一个涵盖这两个字段的唯一索引。在这种情况下,只允许唯一的对。

答案 1 :(得分:0)

  

我也希望bar.foo_id和bar.foobar_id是唯一的,但如果删除foo.foo_id会遇到问题。

您可以使用唯一键,而不必将它们作为主键。您还可以使用复合唯一键或主键。除了primary之外,您可以创建任意数量的索引。

就SQL而言,您不会遇到问题,但您可能会使用已经使用这些表的人/代码。

  

如果我这样做,我如何联系foo和bar?

看起来你已经在吧中拥有了foobar_id - 你可以在foo中将它变成foobar_id的外键。

如果这不起作用,你可能需要保持foo_id只是为了关系。这是ids的重要组成部分。仅供参考,如果id是一个int,它占用的空间非常小,几乎不用担心。