Aks*_*hah 3 sql database oracle
我出现以下错误:
INSERT INTO GroupMembers VALUES ('Goldfrat', 'Simon Palm')
*
ERROR at line 1:
ORA-02291: integrity constraint (SHAHA1.IAM_IS_GROUP_FK) violated - parent key
not found
Run Code Online (Sandbox Code Playgroud)
GroupMembers表中的约束为:
CONSTRAINT iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name)
Run Code Online (Sandbox Code Playgroud)
成员表如下所示:
CREATE TABLE Members (
group_name VARCHAR2(40),
CONSTRAINT g_id_pk PRIMARY KEY(group_name),
CONSTRAINT m_group_name_fk FOREIGN KEY(group_name) REFERENCES Artist(artistic_name));
Run Code Online (Sandbox Code Playgroud)
在创建表之前,所有表都创建得很好GroupMembers。谁有想法?我已经刮了一段时间了。
问题是
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和group_name字段上必须具有相同的值。
在我看来,这是不好的做法。首先,您应该在 GroupMembers 表上有一个主键字段。您不应将组成员的名称存储在表 GroupMembers 中,而应将其对应的 id 存储在表成员中。
还有表成员,应该是这样的:
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));
Run Code Online (Sandbox Code Playgroud)
然后在 table 上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);
Run Code Online (Sandbox Code Playgroud)
假设您有一个Groups包含所有组详细信息的表,其中primary key存储为number和名称group_id。
永远记住,每张桌子都必须有一个primary key. 将此键设为数字是一种很好的做法。
因此,通过将 member_id in Members, group_idin Groups,您可以在 中创建多对多关系GroupMembers。此外,在该表上放置一个唯一索引,这样您就不会出现重复项(同一个成员多次关联到同一个 id)。
看看这个将用户链接到角色的例子。这是同样的情况:
