データベースモデリング


スターバックスサービスモデリング

  • 必須実施事項:飲料、カテゴリ、栄養情報、アレルギー、飲料イメージ、飲料説明、認証
  • .
  • 実施除外:販促、飲料サイズ
  • チームのモデリング



  • 1対1の関係のデータを全てドリンクテーブルに含めると、一目で全てのデータを把握できるので入れました.(特に、頻繁にクエリーされるデータの場合は、テーブルに含めることが望ましい).

  • モデリング初期には,飲料画像を飲料の1対1関係のデータと見なし,飲料テーブルに含めたが,以降の拡張性を考慮して画像を個別のテーブルに生成した.(複数の画像がある場合はコントラスト)

  • アレルギーのある飲み物とほとんど関係があるので、真ん中のテーブルを作り、2つのテーブルをつなぎます.

  • 各テーブルを階層化し、より高いテーブルにPKを持たせ、サブテーブルにFKを含めて(サブテーブル→親テーブル)の方向を設定します.しかし、反対の方向でも大丈夫です.

  • 栄養情報は飲み物と一対一の関係にあるので、飲み物テーブルにはすべての栄養情報が含まれています.逆に、寸法を考慮すると、1対1の関係から1対1の関係に変更されるので、外部表に記入します.
  • モデリングコード

    Table drinks {
      id int [pk, increment]
      korean_name varchar
      english_name varchar
      drink_info text
      is_new tinyint
      category_id int
    }
    
    Table categories {
      id int [pk, increment]
      name varchar
    }
    
    Table images {
      id int [pk, increment]
      image_url varchar
      drink_id int
    }
    
    Ref: "drinks"."category_id" > "categories"."id"
    Ref: "images"."drink_id" > "drinks"."id"
    
    Table allergies {
      id int [pk, increment]
      name varchar
    }
    
    Table allergy_drink {
      id int [pk, increment]
      drink_id int
      allergy_id int
    }
    
    Ref: "drinks"."id" < "allergy_drink"."drink_id"
    Ref: "allergies"."id" < "allergy_drink"."allergy_id"
    
    Table nutritions {
      id int [pk, increment]
      kcal decimal
      sugar decimal
      protein decimal
      sodium decimal
      fat decimal
      caffeine decimal
      drink_id int
    }
    
    Ref: "drinks"."id" - "nutritions"."drink_id"