2015-12-14 70 views
2

我的教授给我一个问题,并且必须创建数据库以符合他的规格。这里是我的代码:错误代码:1022.无法写入;表中的重复密钥

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) 
); 

ItemNamelaundrydryСlean是其表的主键也是外键回到Item表。我不知道如何创建这些realtionships没有重复的键。你有什么建议吗?我不想要答案,因为这是一项任务,但一些建议如何解决这个问题。感谢

+2

鉴于你正在使laundry.itemname和dryclean.itemname字段变成表中的PK,你会执行1:1关系,这意味着这些字段也可以在主项目表中。 –

+0

是的,他们是1:1,我同意他们可以在项目表中,但教授希望他们都在3个单独的表。我有没有办法让这三张桌子符合他的期望? – user5679275

回答

0

在这种情况下,你可以在bill-和其他使用复合主键,一个订单ID般的标识符订单项目-pants的示例 -

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) 
); 

而且有很多其他选项,如果你可以自由选择表结构...像主(订单)/细节(订购商品)