1

レシピとその材料のリストを含むデータベースを設計しており、現在、個々の材料をそれぞれのレシピにリンクする処理を行っています。しかし、連想エンティティ テーブルを作成する方法について、最善の方法を決定するのに苦労しています。

私は3つのテーブルを持っています、

CREATE TABLE Ingredient
(
ingredientID int PRIMARY KEY AUTO_INCREMENT,
ING VARCHAR(100)
);

CREATE TABLE Recipe
(
recipeID int PRIMARY KEY AUTO_INCREMENT,
recipeTitle VARCHAR(200),
prepText VARCHAR(10000),
cuisineType VARCHAR(100)
);

CREATE TABLE recipeIng
(
recipeID int,
ingredientID int,
PRIMARY KEY (recipeID, ingredientID)
);

Ingredient テーブルは、200 以上の個々の成分を含む XML ファイルから入力され、各成分には 1 から始まる異なる ID が自動的に割り当てられます。

Recipe テーブルには、レシピのタイトル、調理方法、料理の種類を含む別の XML ファイルが入力されます。

レシピテーブルは私が問題を抱えているものです。手動で入力する必要があると思います。つまり、すべての材料を手動でレシピに合わせます。このような:

INSERT INTO recipeIng
VALUES(1, 1);
INSERT INTO recipeIng
VALUES(1, 2);
INSERT INTO recipeIng
VALUES(1,3);
INSERT INTO recipeIng
VALUES(1, 4);

「1」は最初のレシピの ID で、「1」、「2」などは個々の材料 ID です。

ただし、これがテーブルを作成するための最良のアプローチであるかどうかはわかりません。アドバイスがあれば役立ちます。

注:このクエリを入力する使用中の方法と組み合わせると、正常に機能します。

SELECT r.recipeTitle
FROM Recipe r
INNER JOIN recipeIng e ON e.recipeID=r.recipeID
INNER JOIN Ingredient i ON i.ingredientID = e.ingredientID
WHERE 'brown sugar' IN (i.ING);
4

2 に答える 2

1

最後の質問を見ると、このアプローチは、テーブルの 1 つにコンマ区切りの ID リストを配置するよりも少なくとも優れていると思います。コンマ区切りの値のリストを使用すると、値のリストを格納するフィールドの構成によっては、接続数が制限される可能性があります。

ここで示した方法は、私がリレーショナル データベースで mn 関係を設計する方法でもあります。これは、MySQL Designer などのツールを使用して得られるものでもあるため、多対多の関係を格納する最良の方法だと思います。

この記事を除いて、これに関するドキュメントはあまり見つかりませんでした。この記事は、多対多の関係について Wikipedia のページにリンクされています。 php

于 2013-01-30T12:51:03.450 に答える
0

私は自分のウェブサイトでまさにこの状況を経験していますが、レシピではなくお客様の声を扱っています. これまでのところ、あなたを助けるかもしれない唯一のことは、一度に大量の挿入を行うことです. たとえば、ほとんどのレシピで小麦粉が必要な場合、select insert ステートメントを使用して、複数のレシピ ID のレシピイングに「小麦粉」を挿入できます。

幸運を!

于 2015-06-11T23:54:59.117 に答える