我有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_id
和foo.value
是唯一的,因此希望将它们作为复合键。如果我这样做,那么我可能会摆脱foo.foo_id
。如果我这样做,我如何关联foo
和bar
?
我还希望bar.foo_id
和bar.foobar_id
是唯一的,但如果我删除foo.foo_id
则会遇到问题。
关于如何建模的建议?
答案 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,它占用的空间非常小,几乎不用担心。