我出现以下错误:
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表中的约束是:
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在GroupMembers表Members和group_name字段上必须具有相同的值。
Members
group_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。
Groups
primary key
number
group_id
始终记住,每个表都必须有一个primary key。将此键设为数字是一种很好的做法。
因此,通过在具有member_id Members,group_id在Groups,你可以创建许多在许多关系GroupMembers。另外,在此表上放置一个唯一索引,这样您就不会重复(同一成员多次与同一id关联)。