违反 - 未找到父键错误

时间:2012-11-22 18:23:35

标签: 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 

GroupMembers表中的约束是:

CONSTRAINT  iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name)

会员表如下:

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 个答案:

答案 0 :(得分:2)

问题在于

CONSTRAINT iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name); references the table Members on the group_name field.

这意味着表GroupMembers上的字段is_group在表Membersgroup_name字段中必须具有相同的值。

在我看来,这是不好的做法。 首先,你应该在表GroupMembers上有一个主键字段。您不应将组成员的名称存储在表GroupMembers中,而应将其对应的ID存储在表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);

假设您有一个包含所有组详细信息的表Groupsprimary key存储为number,名称为group_id

始终记住每个表必须有primary key。这个密钥是一个很好的做法。

因此,通过Members group_id中的{1}}中的member_id,您可以在Groups中创建多对多关系。此外,在此表上放置一个唯一索引,这样您就不会有重复项(相同的成员多次与同一个ID关联)。

查看将用户链接到角色的示例。情况是这样的: enter image description here

答案 1 :(得分:0)

您插入的顺序是错误的原因。

Members(group_name)不包含Goldfrat。如果不是这样,则表Artists中不存在。

答案 2 :(得分:0)

错误是 您必须使用在参考表

中定义的相同列名

CONSTRAINT m_group_name_fk FOREIGN KEY(group_name) REFERENCES Artist(group_name)

group_name primary key应该在Artist表中定义为{{1}}。