我目前在一张桌子上有这样的东西:
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
)
但显然这是错误的,因为它缺少第二个键引用,我不知道如何在第二个表中实现它。那么你们能帮助我吗?
答案 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
)