sql >> データベース >  >> RDS >> Mysql

製品、色、サイズ、在庫を保存するMySQLデータベース

    これがあなたのテーブルです。

    Shirt
    
      id    product       color    size   stock
    ---------------------------------------------
       1    Nike Shirt    black     M       5
       2    Nike Shirt    white     L       10
       3    Nike Shirt    blue      M       2
       4    Nike Shirt    blue      XL      3
      ....
    

    商品名「ナイキシャツ」と色「ブルー」をどのように複製したかがわかります。正規化されたリレーショナルデータベースでは、情報を複製したくありません。 4列目で誰かが誤って「ナイキシャツ」を「ナイキスカート」に変更した場合はどうなると思いますか?

    それでは、正規化 しましょう。 あなたのテーブル。

    まず、Productテーブルから始めます。

    Product
    
      id    product    
    ------ ------------
       0    Nike Shirt
    

    通常、データベースID番号は1ではなく0から始まります。

    次に、カラーテーブルを作成しましょう。

    Color
    
      id    color   
    ------  -------
       0    black    
       1    white    
       2    blue 
    

    次に、サイズテーブルを作成しましょう。

    Size
    
      id   size 
    ------ -----
       0    XS
       1    S
       2    M
       3    L
       4    XL
       5    XXL 
    

    これで、3つの個別のオブジェクトテーブルができました。在庫があるかどうかを確認できるように、どのようにそれらを組み合わせるのですか?

    元のテーブルで正しい考えがありました。

    Stock
    
      id    product       color    size   stock
    ---------------------------------------------
       0        0           0        2       5
       1        0           1        3      10
       2        0           2        2       2
       3        0           2        4       3
    

    製品、色、およびサイズの番号は、製品、色、およびサイズのテーブルに戻る外部キーです。これを行う理由は、情報の重複を排除するためです。すべての情報が1か所と1か所にのみ保存されていることがわかります。

    StockテーブルではIDは必要ありません。製品、色、サイズは一意である必要があります。これにより、これら3つのフィールドが在庫テーブルの複合キーになる可能性があります。

    実際の小売店では、製品はさまざまな属性を持つ可能性があります。属性は、おそらくキー/値テーブル に格納されます。 。単純なテーブルの場合、テーブルを正規化されたリレーショナルテーブルに分割できます。



    1. 他の子から参照されていない場合は、親を削除します

    2. Where句でAliasを使用する方法は?

    3. 階層データ全体でのMySQLクエリの最適化

    4. グループごとに最初の行を選択する