5

私は DB 設計に不慣れで、「多対 1」の関係を定義する方法に関する情報を見つけるのに苦労しています。「1対多」と「多対多」に関するあらゆる種類の情報を見つけることができますが、「多対1」に関する情報はありません。私のハングアップは、データを保存する方法です。私が持っているのは「カテゴリ」と呼ばれる1つのテーブルで、「在庫」と呼ばれる別のテーブルがあり、各「在庫」アイテムは複数の「カテゴリ」に属することができます。

複数の「カテゴリー」を単一の「在庫」行に保管するにはどうすればよいですか? 「カテゴリ」ID と対応する「在庫」ID を格納する中間テーブルが必要ですか? または、「在庫」行に「カテゴリ」ID を持つ JSON 文字列のようなものを追加するのが正しい方法でしょうか? または、「在庫」行に「カテゴリ」ID の配列を格納する方法はありますか?

助けてくれてありがとう!

4

3 に答える 3

7

の正しい用語はMany to OneですOne to Many。このようなテーブルを作成するだけです。

CREATE TABLE Categories
(
    CategoryID INT Primary KEY,
    CategoryName
);

CREATE TABLE InventoryList
(
    ProductID INT Primary KEY,
    CategoryID INT,
    ProductName VARCHAR(50),
    CONSTRAINT tb_fk FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);
于 2012-11-22T16:42:03.803 に答える
5

最初に、mysql ワークベンチをダウンロードすることをお勧めします。これにより、見栄えの良いデータベース設計モードが提供されるため、物事がどのように連携しているかを確認できます (外部キーの関係などを作成します)。

この場合、これは実際には多対多の関係です。そのため、カテゴリ テーブル、在庫テーブル、category_has_inventory テーブル (セマンティクスによっては inventory_has_category) が必要になります。各タプルに在庫とカテゴリの ID を格納します。 -多くの関係ツール。

さらにサポートが必要な場合は、ここに戻ってください。

カテゴリに在庫アイテムを 1 つしか含めることができない場合は、inventory_id をカテゴリ テーブルに追加することで 1 対多の関係を作成できますが、それは私には間違っているように思えます。

于 2012-11-22T16:40:35.990 に答える
4

「多対一」は「一対多」を逆から見たものです。

テーブルに列inventory_idを追加するだけです。Categories

各「Inventory」アイテムが複数の「Categories」に属するだけでなく、各「Categories」アイテムも複数の「Inventory」アイテムに属することができる場合、中間テーブルが必要な多対多の関係がありcategory_idinventory_id.

于 2012-11-22T16:40:16.833 に答える