当引用表中的主键是两个字段时,如何添加外键。 在讲师给出的ERD图中,它表明表产品中的两个字段(制造商和模型)都充当主键。 另一方面,在DSD图中,它显示表“PC”中的字段模型是该表的主键,也是从表产品引用字段模型的外键。
当尝试在SQL Server中执行以下代码时,会出现错误:
消息1774,级别16,状态0,行10列中的列数 引用外键'FK__PC__model__66603565'的列列表 与引用的表'Product'中的主键不匹配。 消息1750,级别16,状态1,行10无法创建约束或 指数。查看以前的错误。
create table Product(
maker nvarchar(50) not null ,
model int not null ,
type nvarchar(50) not null,
CONSTRAINT PK_MAKER_MODEL PRIMARY KEY (maker,model),
CONSTRAINT CH_TYPE check(type in ('PC','LAPTOP','PRINTER'))
)
-------------------------------------------------------------
create table PC(
model int not null ,
speed nvarchar(50),
ram nvarchar(50),
hd nvarchar(50),
price dec(12,2),
FOREIGN KEY ( model) REFERENCES Product
ON DELETE NO ACTION
)
答案 0 :(得分:1)
你不明白外键是如何工作的。他们需要引用整个主键。出于这个原因,我更喜欢单列外键。更像是这样:
create table Products (
productId int identity(1, 1) primary key,
maker nvarchar(50) not null,
model int not null,
type nvarchar(50) not null,
constraint unq_products_maker_model unique (maker, model),
constraint chk_products_typecheck (type in ('PC', 'LAPTOP', 'PRINTER'))
);
create table PC (
pcId int identity(1, 1) primary key,
productId int not null,
speed nvarchar(50),
ram nvarchar(50),
hd nvarchar(50),
price dec(12,2),
foreign key (productId) references Products(productId) on delete no action
);