出现以下错误:
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
GroupMembers
表中的约束条件为:
CONSTRAINT iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name)
“成员”(Members)表格如下所示:
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));
所有的表都创建得很好,直到创建了GroupMembers
表。有人有什么想法吗?我已经琢磨了很长时间了。
3条答案
按热度按时间iqjalb3h1#
问题在于
is_group
这意味着表
GroupMembers
中的字段is_group
在表Members
和group_name
字段中必须具有相同的值。在我看来,这是一种不好的做法。首先,您应该在表
GroupMembers
上有一个主键字段。您不应该将组成员的名称存储在表GroupMembers
中,而是将其对应的id存储在表Members中。此外,表Members应如下所示:
然后在表
GroupMembers
上,我想您希望将一些成员关联到它们的组集,然后再将其关联回来,因此您应该执行以下操作:假设您有一个包含所有组详细信息的表
Groups
,其中primary key
存储为number
,名称为group_id
。请始终记住,每个表都必须有一个
primary key
。最好将此键设置为数字。因此,通过在
Members
中包含member_id
,在Groups
中包含group_id
,可以在GroupMembers
中创建多对多关系。此外,在此表中放置唯一索引,这样就不会有重复项(同一成员多次与同一id关联)。请看这个将用户链接到角色的示例。情况是一样的:
wlwcrazw2#
错误是您必须使用与引用表中定义相同列名
也就是
group_name
group_name
应定义为Artist
表中的primary key
。icnyk63a3#
插入的顺序是错误的原因。
Members(group_name)
不包含Goldfrat
。如果这不是真的,则它不在表Artists
中。