2011-07-01 39 views
0

我有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会遇到问题。

关于如何建模的建议?

+0

只是让他们独一无需没有PK? – zerkms

+0

@zerkms - 如果我使两个列都是唯一的,那么这是否意味着它们作为一对是唯一的,还是仅意味着该列必须是唯一的? – StackOverflowNewbie

+0

如果您创建了涵盖两个字段的'UNIQUE'索引 - 那么这对应该是唯一的。 – zerkms

回答

1

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

0

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

您可以拥有唯一的密钥,而不必将它们作为主键。您也可以有复合唯一键或主键。您可以创建任意数量的索引,只要您希望除主数据库之外的任何数据。

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

如果我这样做,我如何将foo和bar关联起来?

看起来你已经拥有了foobar_id栏 - 你可以在foo中设置foobar_id的外键。

如果这不起作用,那么您可能需要在foo_id中保留foo_id这两个关系。这是ID的重要组成部分。仅供参考,如果ID是一个整数,它占用的空间非常小,几乎不用担心。