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)-未找到父密钥。但我检查了很多次,仍然找不到任何不在父表中的记录。不,您没有,请查看已接受的答案。此外,请在回答中使用代码块。