2016-10-06 15 views
0

imはゲーム用のデータベースを作成しています...問題はデータベースに関することをあまり知らないことです。MySQL - 1つのテーブルの多くの外部キー

CREATE TABLE items(
name VARCHAR(30) PRIMARY KEY, 
type VARCHAR(20) NOT NULL, 
atk INT, 
def INT, 
arm INT, 
price_buy SMALLINT UNSIGNED, 
price_sell SMALLINT UNSIGNED); 

CREATE TABLE equipment (
id_eq INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
head_s VARCHAR(30), 
body_s VARCHAR(30), 
right_s VARCHAR(30), 
left_s VARCHAR(30), 
feet_s VARCHAR(30), 
slot1 VARCHAR(30), 
slot2 VARCHAR(30), 
slot3 VARCHAR(30), 
slot4 VARCHAR(30), 
slot5 VARCHAR(30), 
slot6 VARCHAR(30), 
slot7 VARCHAR(30), 
slot8 VARCHAR(30), 
slot9 VARCHAR(30), 
slot10 VARCHAR(30). 
FOREIGN KEY (head_s) REFERENCES items(name), 
FOREIGN KEY (body_s) REFERENCES items(name), 
FOREIGN KEY (right_s) REFERENCES items(name), 
FOREIGN KEY (left_s) REFERENCES items(name), 
FOREIGN KEY (feet_s) REFERENCES items(name), 
FOREIGN KEY (slot1) REFERENCES items(name), 
FOREIGN KEY (slot2) REFERENCES items(name), 
FOREIGN KEY (slot3) REFERENCES items(name), 
FOREIGN KEY (slot4) REFERENCES items(name), 
FOREIGN KEY (slot5) REFERENCES items(name), 
FOREIGN KEY (slot6) REFERENCES items(name), 
FOREIGN KEY (slot7) REFERENCES items(name), 
FOREIGN KEY (slot8) REFERENCES items(name), 
FOREIGN KEY (slot9) REFERENCES items(name), 
FOREIGN KEY (slot10) REFERENCES items(name)); 

私はこのソリューションについての疑問を持って、誰もが、これは正しい方法である私に言うことができる:ここに私のテーブルには、私が問題にしているしていますか?

+0

まず、あなたの疑問 –

+0

ポストあなたのエラー –

+0

'slot10はVARCHAR(30)は.'これは、' slot10 VARCHAR(30)である必要があり ' –

答えて

1

通常、これは正しい方法ではありませんが、1から7のラベルが付いた7つのスロットがあり、それらの一部またはすべてにアイテムを入れている場合を除きます。

より多くの典型的な方法は、接合テーブルです:あなたは慎重にこれを見た場合

create table EquipmentItems (
    EquipmentItemId int primary key auto_increment, 
    EquipmentId int, 
    ItemId int, 
    constraint fk_equipmentitems_equipment foreign key (EquipementId) references Equipement(id_eq), 
    constraint fk_equipmentitems_item foreign key (ItemId) references items(ItemId) 
); 

、あなたは私がItemsに合成キーを追加したことに注意しましょう。整数は一般に文字列よりもコンパクトであるため、これは外部キー参照のための良い考えです。

関連する問題