是否可以将唯一约束设置为另一个表中的外键?

时间:2009-08-24 01:26:33

标签: oracle foreign-keys constraints unique

是否可以在另一个表中将唯一约束设置为外键? 如果是的话,你会如何宣布它呢?

你会如何分配候选人钥匙? 有可能吗?

实施例: 我有一个产品表,包括:

prod_id, prod_name, prod_price, QOH

我希望prod_name链接到发货表:

desp_id, prod_name, shelfLoc, quantity

我在想的是我可能需要创建一个如下所示的唯一约束:

ALTER TABLE product
ADD CONSTRAINT prod_nameID_uc 
UNIQUE (prod_id,prod_name)

我想知道的是,是否可以在发货表中将唯一密钥称为外键。我必须在发货表中使用prod_name而不是prod_id,这样信息在阅读时对用户更有意义,而不是看到ID号。 我在oracle上使用iSQL plus。

2 个答案:

答案 0 :(得分:6)

完全可以在Oracle FOREIGN KEY中引用UNIQUE约束:

SQL> create table products (
  2      prod_id number not null
  3      , prod_name varchar2 (30) not null
  4      , constraint prod_pk primary key ( prod_id )
  5      , constraint prod_uk unique ( prod_name )
  6      )
  7  /

Table created.

SQL> create table despatch (
  2      desp_id number not null
  3      , prod_name
  4      , constraint desp_pk primary key ( desp_id )
  5      , constraint desp_prod_pk foreign key ( prod_name )
  6          references products ( prod_name )
  7      )
  8  /

Table created.

SQL>

然而这是不好的做法。使用主键和唯一键的主要原因是提供用于外键的合成键。我是你我会担心你的老师给你assignment riddled with bad practice

答案 1 :(得分:2)

这必然取决于DBMS。在我熟悉的DBMS中,唯一约束和外键约束是不同的考虑因素,您可以同时使用它们,并且它们在组合时都能正常运行。