出现以下错误:
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
表之前,所有表都创建得很好。有人有主意吗?我已经挠了好一阵子了。
最佳答案
问题是
CONSTRAINT iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name); references the table Members on the group_name field.
这意味着字段is_group
在 table 上GroupMembers
表中必须有相同的值 Members
和 group_name
字段。
在我看来,这是不好的做法。
首先,你的表上应该有一个主键字段GroupMembers
.您不应将组成员的姓名存储在表 GroupMembers
中, 但它们对应的 ID 来自表 Members。
另外,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));
然后在 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
, 和名字 group_id
.
永远记住每个表必须有一个primary key
.最好将该键设为数字。
所以通过 member_id
在 Members
, group_id
在 Groups
,您可以在 GroupMembers
中创建多对多关系 .此外,在此表上放置一个唯一索引,这样就不会出现重复项(同一个成员多次与同一个 ID 相关联)。
看看这个将用户链接到角色的例子。这是相同的情况:
关于sql - 违反 - 找不到父键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518246/