是否可以将唯一约束设置为另一个表中的外键?
问题描述:
是否可以将唯一约束设置为另一个表中的外键? 如果是的话,你会如何去宣布它?是否可以将唯一约束设置为另一个表中的外键?
你将如何去分配候选键? 这可能吗?
例子: 我有一个包含的产品表:
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。
答
这必然依赖于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
你能举一个你的意思吗?你在'tableB'中有一个列,它必须是'UNIQUE'并且是'tableA'的'FOREIGN KEY'?另外,你使用的是什么数据库引擎? – VoteyDisciple 2009-08-24 01:29:23