是否可以在另一个表中将唯一约束设置为外键? 如果是的话,你会如何宣布它呢?
你会如何分配候选人钥匙? 有可能吗?
实施例: 我有一个产品表,包括:
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 :(得分: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>
然而这是不好的做法。使用主键和唯一键的主要原因是提供用于外键的合成键。我是你我会担心你的老师给你assignment riddled with bad practice。
答案 1 :(得分:2)
这必然取决于DBMS。在我熟悉的DBMS中,唯一约束和外键约束是不同的考虑因素,您可以同时使用它们,并且它们在组合时都能正常运行。