问题是
CONSTRAINT iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name); references the table Members on the group_name field.
这意味着该字段is_group
在桌子上GroupMembers
表中的值必须相同Members
and group_name
field.
在我看来,这是不好的做法。
首先,表上应该有一个主键字段GroupMembers
。您不应将组成员的姓名存储在表中GroupMembers
,而是他们对应的id来自表Members。
此外,Members 表应如下所示:
CREATE TABLE Members (
member_id NUMBER PRIMARY KEY
member_name VARCHAR2(40),
CONSTRAINT g_id_pk PRIMARY KEY(member_id),
CONSTRAINT m_group_name_fk FOREIGN KEY(group_name) REFERENCES Artist(artistic_name));
然后在桌子上GroupMembers
,我想您想将一些成员关联到他们的组集并返回,因此您应该执行以下操作:
CREATE TABLE GroupMembers (
member_id NUMBER,
group_id NUMBER
)
CONSTRAINT iam_is_member_fk FOREIGN KEY(member_id) REFERENCES Members(member_id);
CONSTRAINT iam_is_member_fk FOREIGN KEY(group_id) REFERENCES Groups(group_id);
假设你有一张桌子Groups
包含所有组详细信息,以及primary key
存储为number
,和名字group_id
.
永远记住,每张桌子都必须有一个primary key
。该键最好是数字。
所以通过有member_id
in Members
, group_id
in Groups
,您可以创建一个多对多关系 in GroupMembers
。另外,在此表上放置一个唯一索引,这样就不会出现重复项(同一成员多次与同一 ID 关联)。
Look at this example linking users to roles. It is the same case: