如何创建引用由多个外键组成的另一个主键的外键?

时间:2015-12-26 21:58:24

标签: sql sql-server

我目前在一张桌子上有这样的东西:

create table NetWorth (
    id int,
    id_movie int foreign key references Movie(id),
    primary key (id, id_movie)
    )    

并且想要引用它的主键,它由2个属性组成,它自己的ID和Movie表的ID。目前,我在想这样的事情:

create table Merchandising (
    id_networth int foreign key references NetWorth(id) primary key,
    value float
    )

但显然这是错误的,因为它缺少第二个键引用,我不知道如何在第二个表中实现它。那么你们能帮助我吗?

2 个答案:

答案 0 :(得分:3)

如果要引用的主键由多个列组成,则引用它的所有外键也必须具有并使用所有这些列。你不能只引用一半主键 - 它全部或全部。

由于FK在您的案例中引用了两列,因此您无法将FOREIGN KEY约束语法应用于单个列 - 请改用:

create table Merchandising 
(
    id_networth int 
       constraint PK_Merchandising primary key,
    id_movie int,
    value float,

    constraint FK_Merchandising_Networth
       foreign key(id, id_movie) references NetWorth(id, id_movie) 
)

我还建议始终为您的约束指定显式名称 - 主键约束以及外键约束(以及所有其他约束)你可能有)。

答案 1 :(得分:0)

正如您在评论中提到的那样,NetWorth.Id是唯一的,因此可能是您应该定义为主键的唯一列,而不是id, id_movie

进行更改后,您将不再有问题从Merchandising表创建外键引用。

修改

您的表创建语句可能如下所示(尽管我同意marc_s您应该明确命名约束):

create table NetWorth (
  id int primary key,
  id_movie int foreign key references Movie(id)
)

create table Merchandising (
  id_networth int foreign key references NetWorth(id) primary key,
  value float
)