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

tak*_*sIV 7 oracle constraints foreign-keys unique

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

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

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

prod_id, prod_name, prod_price, QOH
Run Code Online (Sandbox Code Playgroud)

我希望prod_name链接到发送表:

desp_id, prod_name, shelfLoc, quantity
Run Code Online (Sandbox Code Playgroud)

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

ALTER TABLE product
ADD CONSTRAINT prod_nameID_uc 
UNIQUE (prod_id,prod_name)
Run Code Online (Sandbox Code Playgroud)

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

APC*_*APC 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>
Run Code Online (Sandbox Code Playgroud)

然而,这是不好的做法.使用主键和唯一键的主要原因是提供用于外键的合成键.我是你,我会担心你的老师会给你一个充满不良习惯的作业.


cha*_*aos 3

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