替代使用可为空的列设置复合主键

时间:2012-02-17 16:47:23

标签: database oracle database-design

我有一张表ITEM,其中应包含:

ID_SERVICE , // foreign key to table SERVICE
ID_FILE , // foreign key to table FILE
ID_FUNCTION  // foreign key to table FUNCTION

并且它必须由那3列(复合主键)标识,但是我的问题是有时我可能有一个没有函数的项(ID_FUNCTION可能为null)。

如何重新设计此表以便它可以处理这些约束?

感谢。

2 个答案:

答案 0 :(得分:3)

您创建唯一索引而不是主键约束。唯一索引允许任何键为空,但仍然强制每列的唯一性。语法与索引相同,但您在前面添加了唯一:

create unique index i_table_name
    on table_name ( column_names )
       tablespace
       storage ( ... )
       < etc >

唯一索引将自动创建一个独特的约束。如果你不想要索引,你可以自己创建约束:

alter table table_name
add constraint constraint_name unique (column_names)

Here是关于不同类型约束的更多信息。

答案 1 :(得分:0)

是否将ID_FUNCTION声明为NOT NULL?如果它不可为空,这可能是解决方案。更改表,以便ID_FUNCTION列允许空值。