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

材料とサブレシピを含める必要があるレシピデータベースの設計

    次のようなデータベースモデルが必要なようです:

    このモデルには次のプロパティがあります。

    • 基本的に、各レシピは一連のステップです。
    • 各ステップには、同じレシピの他のステップ(STEP_NO)、単位(質量、体積、カウントなど)、その単位の数量などとの相対的な順序があります。
    • 特定のステップは、材料(INGREDIENT_IDがNULL以外の場合)または別のレシピ(SUBRECIPE_IDがNULL以外の場合)のいずれかに接続されます。
    • それ以外は、STEPは多対多の関係を実装するかなり標準的なジャンクションテーブルです。つまり、同じ材料を複数のレシピ(または同じレシピの複数のステップ)で使用でき、レシピは次のようになります。他の複数のレシピの「サブレシピ」。
    • これは本質的に有向グラフです。データモデル自体はサイクルを防ぐことはできません。サイクルはクライアントコードレベルで回避する必要があり、トリガーによって検出される可能性があります。

    MySQLがCHECK制約をサポートしている場合(サポートしていません )、次のように、そのうちの1つ(両方ではない)がNULL以外であることを確認できます:

    CHECK (
        (INGREDIENT_ID IS NULL AND SUBRECIPE_ID IS NOT NULL)
        OR (INGREDIENT_ID IS NOT NULL AND SUBRECIPE_ID IS NULL)
    )
    

    現状では、そのためのトリガーが必要です。



    1. RDSデータベースのローカルレプリカ

    2. SQLiteクエリ結果を列ヘッダー付きの列としてフォーマットする

    3. MySQLでゼロ日付'0000-00-0000:00:00'またはNULLを使用する方が良いですか?

    4. MySQLで当月の1日と当日のどちらかを選択するにはどうすればよいですか?