我可以有一个 Table 主键是多个 Table 中的外键吗

Can I have a Table with primary Key which is a Foreign Key in more than one Table

我想在我的 Flutter 应用程序中为群组功能创建一个数据库,并且我希望该群组由具有不同角色(如版主、秘书等)的管理员组成...

Group Table
groupId int not null primary key
roleId int foreign key
firstName string (50)
lastName string (50)
email string (80)
address string (100)
Role Table
roleId int not null primary key
roleType string (20)
groupId int foreign key
Admin Table
adminId int not null primary key
roleId int foreing key
groupId int foreign key

我可以将 groupId 作为 Role_Table 中的外键,同时将 groupId 作为 Admin_Table 中的外键吗?

我不太清楚你想通过小组实现什么。但要回答你的问题:可以在不同的 table 中引用相同的 table 作为外键。所以是的,您可以在 Role_TableAdmin_Table.

中使用 groupId 作为外键

但是这里有一些潜在的问题:Admin_Table 有它自己的 roleId。如果您的代码必须保持一致,这要么是一种不需要的冗余,要么是一种可能不明确的设计,因为给定的 adminId 可以直接与一个 groupId 相关联,并通过角色 table 到另一个 groupId。 Thera 在某些情况下是故意需要这种三角关系的,但您确定在您的情况下吗?

可能存在更大的问题:在 Group_Table 中,groupId(主键)关联到 roleId(外键)。这意味着给定组只能扮演一个角色。同时,在 Role_Table 中,一个 roleId(主键)关联到一个 groupId(外键)。这意味着要么在组和角色之间存在 one-to-one 关系(需要保持同步),要么角色和组形成复杂的交错层次结构。