Sql 违反-未找到父项错误

Sql 违反-未找到父项错误,sql,database,oracle,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) RE

出现以下错误:

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));
    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));
    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);

在创建
GroupMembers
表之前,所有的表都可以很好地创建。有人有什么想法吗?我已经抓挠了很长时间。

插入顺序是错误的原因

成员(组名)
不包含
Goldfrat
。如果这不是真的,那么它不在表中
Artists

问题在于

约束iam_is_group_fk外键(is_group)引用成员(组名称);
引用“组名称”字段中的表成员。

这意味着该字段是表
GroupMembers
上的组,必须在表
Members
groupname
字段上具有相同的值

在我看来,这是一种不好的做法。 首先,表GroupMembers上应该有一个主键字段。不应在表GroupMembers中存储组成员的名称,而应存储表成员中相应的id

此外,表成员应如下所示:

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));
    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));
    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);
然后在表
GroupMembers
中,我假设您希望将一些成员与其组集相关联并返回,因此您应该执行以下操作:

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));
    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));
    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
,其中
主键
存储为
number
,名称
group\u id

请始终记住,每个表必须有一个
主键
。将此键设置为数字是一种很好的做法

因此,通过在
成员
中设置成员id,在
中设置
组id
,您可以在
组成员
中创建多对多关系。另外,在此表上放置一个唯一索引,这样就不会有重复的索引(同一成员多次关联到同一id)

请看这个将用户链接到角色的示例。情况也是如此: 错误是 必须使用引用表中定义的相同列名

i、 e

CONSTRAINT m\u group\u name\u fk外键(group\u name)引用艺术家(group\u name)


Artist
表中,
group\u name
应定义为
primary key

我在插入所有内容后插入了该行,我也在为错误而纠结。我已禁用外部约束,并执行了一些插入和删除操作。更新后,我无法启用此外部约束。它说ORA-02298:无法验证(PRODUSR.SYS_C0037867)-未找到父密钥。但我检查了很多次,仍然找不到任何不在父表中的记录。不,您没有,请查看已接受的答案。此外,请在回答中使用代码块。