我有一个Postgres数据库,它有一个Foo
表和CCD_ 2表。它还有一个Bar
表,所有这些表都有一个简单的id
主键列。
我想在这三者之间创建一个多对多的关系,这样Bar
可以有0+Foo
和0+Foo_Group
。我可以很容易地创建一个Foo_and_Foo_Groups_Bar
JOIN表,其中包含Foo
、Foo_Group
和Bar
的外键。但是,我在JOIN表上创建主键时遇到了问题。
问题是,在Foo_and_Foo_Groups_Bar
中,foo_id
或foo_group_id
将始终是NULL
。。。但是主键列不能有NULL
s。我能找到的唯一解决方案是在Foo_and_Foo_Groups_Bar
上放一个id
列。。。但我认为JOIN表不应该有自己的ID,应该使用它们的JOIN ID列作为主键。
那么什么是";正确的";在这里我是在JOIN表中添加一列(除了让约束愉快之外,似乎没有必要(,还是有更好的方法?
我是合成主键的爱好者。可以为主键添加serial
/Foo_Group
0列。然后为id的三元组添加一个唯一的约束。
从你的例子来看,我不能100%确定你说的是一段单一的关系。听起来你有两种关系,一种是在bar
和foo
之间,另一种是bar
和foo_groups
之间。如果是这种情况,那么您可以有两个桥接表,并且不必担心NULL
值。