7

是否可以将唯一约束设置为另一个表中的外键?如果是,您将如何声明它?

您将如何分配候选键?可能吗?

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

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。

4

2 回答 2

7

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

然而,这是不好的做法。将主键与唯一键一起使用的主要原因是为外键提供合成键。我是你,我会担心你的老师会给你一个充满不良做法的作业。

于 2009-08-24T03:37:18.160 回答
2

这必然取决于 DBMS。在我熟悉的 DBMS 中,唯一约束和外键约束是单独的考虑因素,您可以同时拥有两者,并且它们在组合时都会正常运行。

于 2009-08-24T01:35:33.833 回答