3

我出现以下错误:

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。有人有想法么?我已经挠了好一阵子了。

4

3 回答 3

5

问题是

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上具有相同的值。Membersgroup_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));

然后在 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);

假设您有一个Groups包含所有组详细信息的表,primary key存储为number和 name group_id

永远记住,每张桌子都必须有一个primary key. 将此键设置为数字是一种很好的做法。

因此,通过将 member_id 设置为in Members,您可以在 in 中创建多对多关系。此外,在此表上放置一个唯一索引,这样您就没有重复项(同一个成员多次关联到同一个 id)。group_idGroupsGroupMembers

查看这个将用户链接到角色的示例。这是相同的情况: 在此处输入图像描述

于 2012-11-22T18:41:28.823 回答
0

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

Members(group_name)不包含Goldfrat。如果这不是真的,那么它就不存在于表中Artists

于 2012-11-22T18:27:50.850 回答
0

错误是您必须使用参考表中定义的相同列名

IE

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

group_name应该primary keyArtist表中定义。

于 2015-02-02T12:41:27.423 回答