2017-02-17 10 views
1

私は自宅で持っている食料品の量を保存し、それをベースにして料理することができます。行の任意の数の列を持つテーブル

私は可能な限り正確でありたいと思っています。そのため私は、凍結したものと新鮮なものとの間、または低脂肪と通常のミルクとの間。しかし、私はこれをモデリングするのに問題があります。私は、次の表を持っている:

Products   Type    Amounts 
id | name   id | name  id | Products.id | Type.id | amount 
---|---------- ---|------  ---|-------------|---------|------- 
1 | milk   1 | frozen  1 | 1   | 2  | 1l 
2 | strawberry 2 | low fat  2 | 1   | 3  | 0.5l 
        3 | organic  3 | 2   | 1  | 500g 
        4 | fresh  4 | 2   | 4  | 250g 

は、これまでのところ私は問題をしましませんが、どのように私は2つの以上のタイプ(例えば、低脂肪、有機牛乳)を持つ製品を保管しますか?私は何ができる

もの:

  • Type.id外部キーを削除し、新しいにJSONとして、あるいはCSVなどの製品のすべての種類を置く独立した製品としてorganic milklow fat organic milkを作成し、Typeテーブル
  • をドロップtypes製品ごとn種類にAmounts
  • リミットの列とAmountsnType{1..n}.id列を追加する - 製品は以下を持っている場合は、NULLに列を設定しますnタイプより

しかし、これを行う前に、より良い解決法があるかどうかを知りたいと思います。

+0

私は別の製品として有機ミルクと低脂肪有機ミルクを作成してタイプテーブルを落とすというオプションもあります – TheGameiswar

答えて

1

一般的な「製品」と在庫の製品の特定のインスタンスである「アイテム」を区別します。

「タグ」の項目には、のプロパティがあります。これは本質的にエンティティ属性値の関係です。行は次のようになります。

item product id   tag 
A  1 [milk]   organic 
A  1     low-fat 
B  1     organic 

アイデアは、追加のタグを持っている可能性のある特定のインスタンスである一般的なもので、「製品」の概念、および「アイテム」を分離することです。その後

「量」の表:

item  Amount Unit 
A  1   liter 

タグはもちろん、製品内および全体の一貫性を確保するために、別のテーブルである可能性があります。例えば、私が手にしている有機製品(製品)で何ができますか?

+0

私はジェネリック製品と私の頭の中の特定のアイテムを使ってアイデアを持っていましたが、これを一緒に持っていく - ありがとう! – Alex

-1

製品< - >タイプは多対多関係です。すべての製品には多くの種類があり、特定の種類の製品が多数存在する可能性があります。これをリレーショナルデータベースでモデル化するには、というマッピングテーブルが必要です。そのテーブルには、2つの列、product_idtype_idがあります。次に、製品とタイプの間のすべての関係について行を挿入します。

例はthis postです。

+0

説明しているのはマッピングテーブルです。ピボットテーブルは全く異なるものです。 – JohnHC

+0

あなたは正しいです。ありがとう。 – LorenzSchaef

関連する問題