料理のための関係データベースの設計


私がプログラミングでないとき、私は料理しています.私は料理の本を見て、新しいと興味深いレシピを見つけるが大好きです.本の私の公正な共有を介してブラウズしたレシピの種類の種類のパターンが表示されます.私は、それが料理のレシピに基づいて関係データベースを設計するのに良い運動であるかもしれないと思いました.

背景


それで、何が関係データベースを構成するか?関係!リレーショナルデータベースではすべてが接続されます.接続されているすべてのもので、我々はちょうど何百もの属性タイプで一つの大きなテーブルをつくることができました、しかし、我々はそうしません.データ完全性!データ完全性は、我々のデータの全体的な完全性、正確さと一貫性です.我々のデータベースがデータ完全性を持つために、それはこれらの3つの特徴を持つ必要があります.
  • なしの値
  • 不正確な値
  • テーブル
  • 間の壊れない関係
    では、どのように我々はそれを達成することができますか?我々は、複数の管理可能な、ユニークなテーブルにデータを分割することによって行う.そして、これらのテーブルをリレーションシップで接続します.それが関係になるとき、我々が使うことができる3つのタイプだけです(本当に2つ、しかし、我々はそれに乗ります).以下の種類があります:
    1から1へ-(1人は、1つのパスポートと1つのパスポートが1人を持っています)多くの(1つの人は多くのクレジットカードを持つことができます、しかし、多くのクレジットカードは1人だけを持つことができます)多くの(多くのクラスが多くの学生が多くの学生が多くのクラスを持っている間、多くのクラスがあります)その最後の1つは、読んで、正しく理解するのが難しいようでした?それは.プラスそれは動作しません.それが働かない理由は親子関係と呼ばれる概念と関係があります.“1 to多く”の例を見て、誰が親であり、子供であるかを理解しようとします.相手なしでは存在できないクレジットカードとクレジットカードのどちらか?クレジットカード!魔法の無限のクレジットカードは、誰かに割り当てられていない周りに浮かんでいる.したがって、このシナリオでは、親は人であり、カードは子です.今、“多くの多くの”関係を見てみましょう.そこの親と子供?つのケースでは、学生はクラスに出席せずに学生になることはできません.他のケースではクラスは本当に学生なしのクラスですか?ここで多くの多くの関係が動作しない理由があります.私たちには明確な親がいない.
    私たちは、多くの「多くの」関係を2つの「1対多」関係に分割することによって、この問題を解決します.このように我々は明確な親と子を持っている.ですから、私たちが学生やクラスのテーブルをモデル化するなら、私たちはこのようなものを持っているでしょう.

    「学生クラス」テーブルが学生表とクラス表の両方の子供であるところ.

    DBデザイン


    さて、この知識で武装して料理のレシピのデータベースを構築しよう!レシピを見て、関連情報を引き出しましょう.
    Recipe Title: Simple Cheese Pizza
    Recipe Description: A great pizza that's really easy to make. 
    Recipe Ingredients:
    2.5 cups All Purpose Flour
    1 Packet Yeast 
    1.5 teaspoons Sugar
    0.75 teaspoons salt
    2 tablespoons Olive Oil
    0.75 cups warm water
    1.25 cups cheese
    1 cup tomato sauce
    
    これは私たちが始めるのに十分な情報のようです.どのようなデータは本当に単一のレシピに依存して上記のレシピを見て?私は“レシピのタイトル”と“レシピの説明”を主張するので、テーブルにそれを置きましょう.

    それでは今、食材セクションを見てみましょう.まず、レシピには多くの成分があることを知っていますが、成分には多くのレシピがあります.私は別のレシピで2.5カップの小麦粉を使用することができますので、再度私のデータベースでその値を繰り返す必要はありません.私達は私のデータベースに2.5カップの他の成分を使うことができると主張することができる.それで、データベースに2.5カップを連続的に繰り返す必要がありますか?そうではない.
    個々の成分で働きましょう、そして、レシピのためにすべての成分にそれを広げてください.成分を見て、我々はいくつかの重要な機能に注目して、我々は:測定量、測定単位、および成分.以下は「1カップトマトソース」で表示します.
    1 = measurement qty
    cup = measurement unit
    tomato sauce = ingredient
    
    これらの3つの特徴に基づいて3つのテーブルを作成できました.

    さて、私たちはすべての私たちの情報が表示されますが、どのように我々は、3つの成分表とそのレシピのテーブルを接続します.私たちは結合テーブルを使用する!

    このデータベースは何をするのですか?さて、2つのピザのレシピを見てみましょう.
    Recipe Title: Simple Cheese Pizza
    Recipe Description: A great pizza that's really easy to make. 
    Recipe Ingredients:
    2.5 cups All Purpose Flour
    1 Packet Walmart Yeast 
    1.5 teaspoons Sugar
    0.75 teaspoons salt
    2 tablespoons Olive Oil
    0.75 cups warm water
    1.25 cups cheese
    1 cup tomato sauce
    
    
    Recipe Title: Simple Cheese Pizza with Pepperoni
    Recipe Description: A great pizza with pepperoni that really easy to make. 
    Recipe Ingredients:
    2.5 cups All Purpose Flour
    1 Packet Walmart Yeast 
    1.5 teaspoons Sugar
    0.75 teaspoons salt
    2 tablespoons Olive Oil
    0.75 cups warm water
    1.25 cups cheese
    1 cup tomato sauce
    1 bag pepperoni
    
    
    我々は、レシピのタイトルとレシピの説明が異なるので、両方の値を格納する必要がありますが、成分を見て知っている.最後に「1袋ペパーローニ」以外は本当に変わらない.本当にこれらの値を複製する必要がありますか?さて、我々がやったならば、何が起こりますか?「1パケットウォルマート酵母」を見てみましょう.ウォルマートがビジネスオッズから出たならば、ウォルマートイーストは存在しなくなります.それで、我々はその酵母の代用品を見つけなければならないでしょう.それは難しいようではありませんが、今ではウォルマート酵母を使用して10000レシピを持って想像してください.それは大いに変化している.上記のデータベースを使用すると、10000の代わりに1つのテーブル値を変更する必要があります!関係ありがとう!

    結論


    データベース設計には単一の正しい答えはありませんが、間違った答えがたくさんあります.データベース設計は、等しい部品芸術と科学です.これは、接続しようとしているすべてのデータの間の関係を深く理解する必要があります.私は適切なデータベース設計に十分な時間を集中しないときに私のアプリは柔軟性と非効率になることを発見した.初めに、コンセプトは、私は多くの多くの関係をモデリング、特に把握するためにトリッキーだった.私は、データベース設計に関するあなたの考えに興味があります、そして、その価値が大量の時間を費やすならば.私に知らせて!