如何在数据库表中的两列组合上强制实现唯一性?

时间:2018-01-26 15:23:45

标签: sql database oracle constraints

我有一个包含两个表的简单数据库:

Catalog ( id_catalog , name )

Product ( id_product , name, quantity, id_catalog# )

这些字段都不能为空,因此我在任何地方都设置了NOT NULL约束。

但是如果它们在同一个目录中,我需要两个产品不能具有相同的名称。我怎么能这样做?

我的意思是

1, chocolat, 5, 1
2, chocolat, 7, 2

这些都没关系,因为它们位于两个不同的目录中,但是:

1, chocolat, 5, 1
2, chocolat, 7, 1

不应该被允许,因为我不应该在同一目录中两次接受巧克力。

1 个答案:

答案 0 :(得分:4)

您可以创建unique index以避免使用同一对(99 99.9 99.01 )插入多行。

创建表格:

name, id_catalog#

添加索引:

SQL> create table Product(id_product number, name varchar2(10), quantity number, id_catalog# number);

Table created.

这将有效:

SQL> create unique index idx1 on Product (name, id_catalog#);

Index created.

这不起作用:

SQL> insert into Product (id_product, name, quantity, id_catalog#) values (1, 'chocolat', 5, 1);

1 row created.

但由于SQL> insert into Product (id_product, name, quantity, id_catalog#) values (2, 'chocolat', 7, 1); insert into Product (id_product, name, quantity, id_catalog#) values (2, 'chocolat', 7, 1) * ERROR at line 1: ORA-00001: unique constraint (ALEK.IDX1) violated

不同,这将会出现
id_catalog#