oracle 违反-未找到父关键字错误

qyuhtwio  于 2022-11-03  发布在  Oracle
关注(0)|答案(3)|浏览(280)

出现以下错误:

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表。有人有什么想法吗?我已经琢磨了很长时间了。

iqjalb3h

iqjalb3h1#

问题在于
is_group
这意味着表GroupMembers中的字段is_group在表Membersgroup_name字段中必须具有相同的值。
在我看来,这是一种不好的做法。首先,您应该在表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。最好将此键设置为数字。
因此,通过在Members中包含member_id,在Groups中包含group_id,可以在GroupMembers中创建多对多关系。此外,在此表中放置唯一索引,这样就不会有重复项(同一成员多次与同一id关联)。
请看这个将用户链接到角色的示例。情况是一样的:

wlwcrazw

wlwcrazw2#

错误是您必须使用与引用表中定义相同列名
也就是
group_name
group_name应定义为Artist表中的primary key

icnyk63a

icnyk63a3#

插入的顺序是错误的原因。
Members(group_name)不包含Goldfrat。如果这不是真的,则它不在表Artists中。

相关问题