在另一张表中,是否可以将唯一约束设置为外键?

9

在另一张表中设置唯一约束作为外键,是否可行?如果是的话,如何声明?

如何分配候选键?是否可行?

示例: 我有一个产品表,其中包括:

prod_id, prod_name, prod_price, QOH

我希望在这里把prod_name链接到despatch表:

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。

你能给一个例子来说明你的意思吗?你在 tableB 中有一列既必须是 UNIQUE ,又必须是指向 tableAFOREIGN KEY 吗?另外,你使用的数据库引擎是什么? - VoteyDisciple
2个回答

10

在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>

然而,这是一种不良的实践。使用主键和唯一键的主要原因是为外键提供合成键。如果我是你,我会担心你的教师正在给你一个充满不良实践的任务

哦相信我,我完全同意。他们甚至没有教我们一半的东西,而他们却期望我们在任务中执行。太懒了。 - taksIV

3

这取决于数据库管理系统。在我熟悉的数据库管理系统中,唯一约束和外键约束是不同的考虑因素,您可以同时拥有它们,并且当它们结合时它们都会正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接