带复合键的外键

J86*_*J86 5 foreign-key database-design relational-theory composite-types

想象一下,我有一个具有以下依赖项的表:

(名称, BoughtFrom, TimeBought ) --> 成本

其中粗体的三个属性形成表的复合主键。现在,我想从另一个表链接(形成关系)到这个表。我怎么做?如果我有一个 ID 列,我会知道该怎么做,但我从未遇到过这样的场景。

我是否必须将所有三列都添加(Name, BoughtFrom, TimeBought)到另一个表中?或者还有其他方法吗?

Mik*_*ll' 11

是的,您需要添加所有三列。假设它们在两个表中具有相同的名称,您将使用类似

foreign key (Name, BoughtFrom, TimeBought) 
  references the_other_table_name (Name, BoughtFrom, TimeBought)
Run Code Online (Sandbox Code Playgroud)

如果您决定使用代理 ID 号,您仍然需要对 {Name, BoughtFrom, TimeBought} 进行唯一约束。你可以用这些方法来做到这一点。

create table your_table (
  your_id_number integer primary key,
  Name ... ,
  BoughtFrom ... ,
  TimeBought ... ,
  unique (Name, BoughtFrom, TimeBought)
);
Run Code Online (Sandbox Code Playgroud)

代孕键不具备成为一个ID号。它不必是任何类型的数字。但自动递增的 ID 号是最常见的。

代理手段代替。代理键(如 ID 号)取代了自然键。有点像代孕妈妈取代了亲生妈妈。