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

问题描述:

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

你将如何去分配候选键? 这可能吗?

例子: 我有一个包含的产品表:

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。

+0

你能举一个你的意思吗?你在'tableB'中有一个列,它必须是'UNIQUE'并且是'tableA'的'FOREIGN KEY'?另外,你使用的是什么数据库引擎? – VoteyDisciple 2009-08-24 01:29:23

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

完全有可能在Oracle外键引用唯一约束:

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

+0

哦,相信我,我完全同意。他们甚至没有向我们传授他们期望我们在任务内执行的一半内容。松弛。 – taksIV 2009-08-24 03:40:26