一尘不染

违反-未找到父键错误

sql

我出现以下错误:

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。有人有想法么?我已经抓挠了一段时间了。


阅读 109

收藏
2021-05-30

共1个答案

一尘不染

问题是

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

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

我认为这是不好的做法。首先,您应该在表GroupMembers上有一个主键字段。您不应将组成员的名称存储在表GroupMembers中,而应将其对应的ID存储在表Member中。

另外,表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。将此键设为数字是一种很好的做法。

因此,通过在具有member_id
Membersgroup_idGroups,你可以创建许多在许多关系GroupMembers。另外,在此表上放置一个唯一索引,这样您就不会重复(同一成员多次与同一id关联)。

2021-05-30