【问题标题】:Is it possible to set a unique constraint as a foreign key in another table?是否可以将唯一约束设置为另一个表中的外键?
【发布时间】:2012-12-06 21:27:01
【问题描述】:

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

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

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

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。

【问题讨论】:

  • 你能举例说明你的意思吗?您在tableB 中有一个列,它必须既是UNIQUE 又是FOREIGN KEYtableA?另外,您使用的是什么数据库引擎?

标签: oracle foreign-keys constraints unique


【解决方案1】:

完全可以在 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

【讨论】:

  • 哦,相信我,我完全同意。他们甚至没有教我们一半他们期望我们在任务中执行的东西。松弛。
【解决方案2】:

这必然取决于 DBMS。在我熟悉的 DBMS 中,唯一约束和外键约束是分开考虑的,你可以两者兼得,并且它们在组合时都可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-29
    • 2014-08-27
    • 1970-01-01
    • 2015-01-06
    • 2011-05-12
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多