错误代码:1022。不能写;表中的重复键

时间:2015-12-14 19:14:19

标签: mysql

我的教授给我一个问题,必须根据他的规格创建数据库。这是我的代码:

create table item
(ItemName varchar (30) not null,
BaseCost float,
constraint pk_item primary key(ItemName)
);

create table laundry
(ItemName varchar (30) not null,
WashCost float,
constraint pk_laundry primary key (ItemName),
constraint fk_item foreign key (ItemName) references 
item(ItemName)
);

create table dryClean
(ItemName varchar (30) not null,
DryCost float,
constraint pk_dryClean primary key (ItemName),
constraint fk_item foreign key (ItemName) references 
item(ItemName)
);

ItemName的{​​{1}}和laundry是其表的主键,也是返回dryСlean表的外键。我不知道如何在不制作重复键的情况下创建这些版权。你有什么建议吗?我不想要答案,因为这是一项任务,但有些建议如何解决问题。感谢

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用复合主键,一个用于订单ID,例如票据中的标识符,而另一个用于订单项 - 例如 -

create table laundry
(orderid int AUTO_INCREMENT,
ItemName varchar (30) not null,
WashCost float,
constraint pk_laundry primary key (orderid,ItemName),
constraint fk_item foreign key (ItemName) references 
item(ItemName)
);

create table dryClean
(orderid int AUTO_INCREMENT,
ItemName varchar (30) not null,
DryCost float,
constraint pk_dryClean primary key (orderid,ItemName),
constraint fk_item foreign key (ItemName) references 
item(ItemName)
);

如果您可以自由选择表格结构,还有许多其他选项...如主(订单)/明细(订单商品)