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

テーブルをさらに正規化する必要がありますか?

    正規化には、機能依存性(FD)と結合依存性(FD)を知る必要があります。あなたはそれらを与えませんでした。

    アプリケーション FDとJDは、各テーブルの「表現したい関係」(つまり述語)が正確にわかっている場合にのみわかります(つまり、状況を調べて、考えられるすべての行について知ることができるようになるまで)。述語から真の命題を作成するため、テーブルに属します)、発生する可能性のある状況を正確に示します(データベースの状態の制約に相当する、アプリケーションの状況に関する「ビジネスルール」を介して)。

    あなたの「鍵」 あなたはFDを与えませんでした。 1つの候補キー(CK)と「一意のキー」を指定しました。ただし、FDについて特定のことを知らなければ、一部またはすべてのCKを判別することはできません。したがって、CKを与える場合、それは特定のFDがあると言うのと同じです。 PKまたは「一意キー」というラベルの付いた列セットを指定するときに、指定した内容を指定する必要があります。「一意キー」はCK(小さい一意のサブセットを含まない)ですか、それとも単にスーパーキー(一意)ですか?すべてのCKを提供しましたか、それとも他のCKを提供できましたか?与えられたもののスーパーセット以外のスーパーキーがあるでしょうか?保持していることがわかっているFD(最小限のカバーを介して)と保持していないことがわかっているFDを正確に教えておくと最も役立ちます。

    推測
    is_calculatedが何であるかわかりません
    たぶん特定のdate およびmeal ペアには1つのcontentがあります ?

    TL; DR 考えられる各列のセットをチェックして、他の列が機能的に決定されるかどうかを確認する必要があります。つまり、データベースの状態ごとに、列のセットの値のサブ行が、列の1つの値とともにのみ表示されるかどうか。述語とアプリケーションを明確に理解していなければ、推測することはできません。次の方法で作業を減らすことができます。列のセットが一意である場合、そのスーパーセットが他のすべての列を決定します。列のセットが最小限に一意である(CKである)場合、その小さいサブセットは他のすべての列を決定しません。推定FDの反例を探すことができます。ここで、2つの行は、推定行列式の値の同じサブ行を持つことができますが、推定決定属性の値は異なります。アームストロングの公理は、与えられたFDによって暗示されるすべてのFDを生成します。

    JD 4NFおよび5NFへの正規化では、テーブルを複数のテーブルに分割して、CKによって暗示されていないJDを排除します。テーブルの述語は、述語の列セットに対応するJDが保持されている場合、他の述語のANDとして正確に表すことができます。すべてのJDのすべての結合が、少なくともCKで他の結合とオーバーラップする場合、関係は5NFにあります。 (Faginのメンバーシップアルゴリズム。)

    PS 制約を気にする場合、1つのテーブルから2つのテーブルに移動したときに1つを失いましたか?



    1. SQLで月の最初の日を選択するにはどうすればよいですか?

    2. PHPを介したMySQLデータからJSONへ

    3. Laravel5の雄弁なCONCATカラム

    4. マイニングプラン:プランキャッシュだけではありません