0

Post、Attachment、Media の 3 つのテーブルがあります。

投稿には添付ファイルがあり、添付ファイルにはメディアがあります。

現在、Post テーブルと Attachment テーブルは外部キーによってリンクされており、Attachment テーブルと Media テーブルも同様です。私の質問は、適切なデータベース設計と正規化のために、Post と Media の間に外部キー関係を設定する必要があるかどうかです。これらのテーブルをどの程度深くリンクすればよいかわかりません。

ありがとう

4

6 に答える 6

3

適切なデータベース設計と正規化のために、Post と Media の間に外部キー関係を設定する必要がありますか?

「適切な正規化」のためには、「更新異常」がないことを保証する必要があります。

誰かが投稿を更新すると、添付ファイルとメディアはどうなりますか? 投稿の名前を変更すると、添付ファイルやメディアが切断されますか? もしそうなら、あなたのFKは間違っています。[ヒント、FK を機能させるには、投稿の名前ではなく代理キーを使用する必要があります。]

ある投稿から別の投稿に添付ファイルを「移動」したい場合 (つまり、添付ファイルの FK 参照を更新する場合)、メディアはどうなりますか? アタッチメントにとどまり、新しいポストに移動しますか?

添付ファイルとメディアを含む投稿と、メディアを含む添付ファイルを作成できますか? 添付ファイルは「移動」されたが、投稿も更新されていないため、投稿と添付ファイルがメディアについて一致しない可能性はありますか?

矛盾ができる場合は、第 2 正規形を破っており、繰り返すべきではない重要な関係を繰り返しています。

適切な正規化は簡単です。

データはキーに依存し、キーだけに依存します。

依存関係をどこにもコピーしたり繰り返したりしないでください。あなたが「ディープリンク」と呼んでいるものは、依存関係の繰り返しのようです。

于 2010-03-08T15:38:50.090 に答える
2

いいえ、通常の正規化レベルである3NFと同じくらい深い正規化については、構造は問題ありません。

レコードの正規化には、コストとメリットがあります。特に、データの挿入と削除については、正確にどのように、何を挿入できるかについての主要なレベルの制御に対してです。

自分の責任で正規化および非正規化する人:)

于 2010-03-08T15:38:20.980 に答える
1

大丈夫だと思います。

POST には複数の ATTACHMENT を含めることができ、ATTACHMENT には複数の POST を含めることができるようです。その場合、第 3 正規形のリンク エンティティが必要になります。

  Post

    |
    |
  -----
  | | |

Post_Attachment

  | | |
  -----
    | 
    |

Attachment

    |
    |
  -----
  | | |

  Media

しかし、あなたの説明から、POST と MEDIA の間に重要な関係はないようです。

于 2010-03-08T15:35:57.007 に答える
1

Media から Post に FK を追加する唯一の理由は、添付ファイルに関係なく、特定の投稿のメディアをフィルターまたは選択する必要がある場合です。メディア (おそらくタイプ別) とそれが属する投稿を表示する必要がある場合でも、直接の関連付けは追加しません。(添付テーブルを介して) 2 番目の結合を追加するためのオーバーヘッドは最小限になる可能性が高いため、大幅な改善が見られる可能性は低いです。

于 2010-03-08T16:23:12.027 に答える
0

まず、代理キーを使用する必要はありません。適切なデータベースは、必要に応じて更新をカスケードします。データベースを正規化するときは、通常、第 3 正規形または BCNF を達成しようとします。第 2 正規形は、更新の異常から常にデータを保護するとは限りません。ER ダイアグラムを作成し、どのデータがエンティティ (投稿、添付ファイル、メディア) の一部であるか、どのデータが関係の一部であるかを決定すると、スキーマ内の機能依存関係の決定は簡単になります。リレーションのカーディナリティに応じて、結合テーブルが必要な場合と不要な場合があります。最善の方法は、データをダイアグラムでモデル化してから、実装の問題に対処することです。

于 2010-03-08T16:45:51.377 に答える
0

テーブルをできるだけ深くリンクします。レポート用およびパフォーマンスの問題を確認した後に非正規化します。

于 2010-03-08T15:31:33.583 に答える