【问题标题】:Table in Derby with complex primary keyDerby 中具有复杂主键的表
【发布时间】:2014-03-10 01:56:12
【问题描述】:

是否可以有一个由外键fk1fk2fk3组成的主键

地点:

  • fk1 永远不应为空

  • fk2fk3 可以为空

我有以下 SQL:

CREATE TABLE role_mappings (
       ROLE_NAME            VARCHAR(64)       NOT NULL,
       NESTED_ROLE_NAME     VARCHAR(64)       DEFAULT NULL,
       PRIVILEGE_NAME       VARCHAR(64)       DEFAULT NULL,
       PRIMARY KEY (ROLE_NAME, NESTED_ROLE_NAME, PRIVILEGE_NAME),
       CONSTRAINT fk_access_roles_rm_1 FOREIGN KEY (ROLE_NAME) REFERENCES access_roles (ROLE_NAME),
       CONSTRAINT fk_access_privileges FOREIGN KEY (PRIVILEGE_NAME) REFERENCES access_privileges(PRIVILEGE_NAME),
       CONSTRAINT fk_access_roles_rm_2 FOREIGN KEY (NESTED_ROLE_NAME) REFERENCES access_roles(ROLE_NAME)
);

当我将NULL 插入NESTED_ROLE_NAMEPRIVILEGE_NAME 时,我得到:

Column 'NESTED_ROLE_NAME'  cannot accept a NULL value.

这样做的正确方法是什么?

【问题讨论】:

    标签: sql derby


    【解决方案1】:

    主键值必须是唯一的。如果您允许空值进入构成主键的这些字段,您将很快遇到非唯一性问题。我的建议是避免使用空值。

    【讨论】:

    • 是的,我最终只是添加了一个 MAPPING_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (start with 1, increment by 1) 作为行键,并将其作为主键。
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 2012-06-10
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多