2015-12-14 153 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) 
); 

而且有很多其他選項,如果你可以自由選擇表結構...像主(訂單)/細節(訂購商品)