作成しているデータベースの外部キーを確立する際に問題があります。コードが実行されているようだが、テーブルにクエリを実行すると、私は外来キーだと思ったものを返さない。ここでMySQL - 制約と外部キーの追加
は、私が働いているものです:
これは私の「工芸」テーブルの小さな抜粋です:ここでは
idCrafting Crafting_Recipe Item1 ITEM1_ID
1 Copper_Bar Copper_Ore NULL
2 Gold_Bar Gold_Ore NULL
は、私が働いているアイテムテーブルです:
Item_id Item_Name
1 Battery_Pack
2 Clay
3 Coal
4 Copper_Ore
5 Copper_Bar
これは外部キーを作成する方法です。 Craftingテーブルには、Item1、Item2、Item3で表される3つのアイテムと、ITEM1_ID、ITEM2_ID、ITEM3_IDの各列があります。 Itemテーブルの適切なITEM_idsをITEM_ID列に移入する外部キーを作成したいとします。
ALTER TABLE StardewValley.Crafting
ADD CONSTRAINT Item1_fk_Crafting
FOREIGN KEY (ITEM1_ID) REFERENCES Items (Item_id);
これは私がオリジナルの工芸テーブルを作成する方法である:
CREATE TABLE IF NOT EXISTS StardewValley.Crafting (
idCrafting INT NOT NULL AUTO_INCREMENT,
Crafting_Recipe VARCHAR(45) NOT NULL,
Item1 VARCHAR(45) NULL,
Item2 VARCHAR(45) NULL,
Item3 VARCHAR(45) NULL,
PRIMARY KEY (`idCrafting`));
私はいくつかのテーブルから主キーを使用して、いくつかの他のテーブルを持っていると私はそれが正常に動作させることはできません。私はこの1つを他のテーブルだけを参照するように動作させるために苦労しています。
ありがとうございます!
編集:
私は、同様工芸テーブルにアイテムIDを追加しようとしたことを追加するのを忘れ:
ALTER TABLE StardewValley.Crafting ADD ITEM1_ID INT;
ALTER TABLE StardewValley.Crafting ADD ITEM2_ID INT;
ALTER TABLE StardewValley.Crafting ADD ITEM3_ID INT;
ALTER TABLE StardewValley.Crafting ADD Item_id INT;
を何もしていないようでしたどの。
「Crafting」テーブルで「Item_id」が「4」のときに、「Item1」の列に「Copper_Ore」が表示されます。それは本当に良い考えではありません。 2つのテーブルにまたがって 'Item_Name'の定義を広げてはいけません。参照として 'Item_id'だけを含めるだけで十分です。また、他の目的のために 'Item_Name'を取得する場合は、' SELECT'クエリで 'JOIN'を使用してください。 –
私はCraftingレシピにある名前とIDを持つアイテムを含む関係を表すテーブルを作成しようとしていました。クラウニングとアイテムテーブルの間でJOINを使用してクエリを実行しようとしましたが、動作しませんでした。私はそれが動作するかどうかを確認するためにもう一度試すことができます、それはより良いだろう。 – Babeeshka
まあ、データベースが正規化されていれば、それを維持しスケーリングするほうがはるかに簡単になります。多対多の関係が議論されているこの[Q&A](http://stackoverflow.com/q/2923809/2298301)を見てください( 'Product' /' Company'関係はあなたにいくつかの類似点を描くのに役立ちますあなたのシナリオで)。また、この[post](http://stackoverflow.com/q/3486644/2298301)は多対多の関係のために 'SELECT'クエリがどのように記述されるかを示しています。 –