sql - 违反 - 找不到父键错误

标签 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) 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表中必须有相同的值 Membersgroup_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_idMembers , group_idGroups ,您可以在 GroupMembers 中创建多对多关系 .此外,在此表上放置一个唯一索引,这样就不会出现重复项(同一个成员多次与同一个 ID 相关联)。

看看这个将用户链接到角色的例子。这是相同的情况: enter image description here

关于sql - 违反 - 找不到父键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518246/

相关文章:

php - 如何将当前日期传递给 PHP 函数并在 SQL 查询的 where 条件中使用它?

mySQL 数据库创建/设计 - 不确定如何组织这样的数据

SQL - 组合不完整

xml - 连接 XMLType 的变量的好方法是什么

sql - 删除 .ldf 文件后恢复数据库

sql - 查看oracle关于主/外键约束的元数据

sql - SQL中如何制作评论表

sql - 如何从数据库中获取带有父记录的最后一个子记录

javascript - 更好地从 Node 或每个请求的连接到 memcached/mongo 的单一全局连接?

c# - OdbcConnection返回汉字为“?”