我可以有一个 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_Table
和 Admin_Table
.
中使用 groupId
作为外键
但是这里有一些潜在的问题:Admin_Table
有它自己的 roleId
。如果您的代码必须保持一致,这要么是一种不需要的冗余,要么是一种可能不明确的设计,因为给定的 adminId
可以直接与一个 groupId
相关联,并通过角色 table 到另一个 groupId
。 Thera 在某些情况下是故意需要这种三角关系的,但您确定在您的情况下吗?
可能存在更大的问题:在 Group_Table
中,groupId
(主键)关联到 roleId
(外键)。这意味着给定组只能扮演一个角色。同时,在 Role_Table
中,一个 roleId
(主键)关联到一个 groupId
(外键)。这意味着要么在组和角色之间存在 one-to-one 关系(需要保持同步),要么角色和组形成复杂的交错层次结构。
我想在我的 Flutter 应用程序中为群组功能创建一个数据库,并且我希望该群组由具有不同角色(如版主、秘书等)的管理员组成...
Group Table | |
---|---|
groupId | int not null primary key |
roleId | int foreign key |
firstName | string (50) |
lastName | string (50) |
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_Table
和 Admin_Table
.
groupId
作为外键
但是这里有一些潜在的问题:Admin_Table
有它自己的 roleId
。如果您的代码必须保持一致,这要么是一种不需要的冗余,要么是一种可能不明确的设计,因为给定的 adminId
可以直接与一个 groupId
相关联,并通过角色 table 到另一个 groupId
。 Thera 在某些情况下是故意需要这种三角关系的,但您确定在您的情况下吗?
可能存在更大的问题:在 Group_Table
中,groupId
(主键)关联到 roleId
(外键)。这意味着给定组只能扮演一个角色。同时,在 Role_Table
中,一个 roleId
(主键)关联到一个 groupId
(外键)。这意味着要么在组和角色之间存在 one-to-one 关系(需要保持同步),要么角色和组形成复杂的交错层次结构。