从上一个问题中,我对在 nm 关系中具有复合主键有了一些想法。我的情况非常相似,但又有些不同。
[Person]
PERSON_ID: int, primary key
CLIENT_ID: int, primary key
Name: nvarchar(xx)
primary_key( PERSON_ID, CLIENT_ID);
[Group]
GROUP_ID: int
CLIENT_ID: int
Name: nvarchar(xx)
primary_key( GROUP_ID, CLIENT_ID);
现在,当我使用 mysql-workbench 工具生成关系表时,它的作用是创建一个表:
选项1:
[PersonHasGroup]
PERSON_ID: int
CLIENT_ID: int
GROUP_ID: int
CLIENT1_ID: int
primary_key( PERSON_ID, CLIENT_ID, GROUP_ID, CLIENT1_ID);
在我的情况下,两个 client_id 通常具有相同的值,所以我将表格编辑为看起来像
选项2:
[PersonHasGroup]
PERSON_ID: int
CLIENT_ID: int
GROUP_ID: int
primary_key( PERSON_ID, CLIENT_ID, GROUP_ID);
这些是好的做法吗?我的其他同事喜欢的有点不同。他们使用:
选项 3:
[PersonHasGroup]
PERSON_HAS_GROUP_ID: int, auto-increment
CLIENT_ID: int
PERSON_ID: int, foreign key
GROUP_ID: int, foreign key
primary_key( PERSON_HAS_GROUP_ID, CLIENT_ID);
当我的关系是多对多的例子时,哪种做法是合适的:)