7

現在、 Articles と Tags という 2 つのテーブルを持つデータベースがあります。記事を複数のカテゴリに含めることができるようにするために、多対多の関係があります。性能的にそういう設計にするのは間違いでしょうか?または、これら 2 つのテーブル間の関係を削除し、3 つ目のテーブルをブリッジ (記事タグ) として追加する必要がありますか?

4

5 に答える 5

7

概念的なデータベース設計(N:Nの関係)と物理的な実現の違いがわかります。N:N関係をどのようにモデル化しても、それを機能させるには前述のジャンクションテーブルが必要です。

一般的なステートメントとして、現実世界にできるだけ近い現実世界の関係をモデル化することに何の問題もありません。明晰さが王様です。

どのシステムでもパフォーマンスの質問になると、答えは通常「状況によって異なります」に要約されます。

パフォーマンスの問題がWRITESに関連している場合は、高度に正規化された構造が最適であり、そのジャンクションテーブルが必要になります。書き込むデータが大幅に少なくなり、処理速度が大幅に向上します(ただし、挿入を作成する前にルックアップを実行する必要があるため、その利点が失われる可能性があります)。個々の正規化されたテーブルからの読み取りも非常に高速です。

問題が分析READSに関連している場合は、DENORMALISED構造が最適です。テーブルが大きく、インデックスが分散している場合、結合は非常にパフォーマンスが高くなる可能性があります。あなたは多くの時間を稼ぐために多くのスペースを犠牲にするでしょう。

一般に、解決策を決定する前に、状況の詳細を確認し、各アプローチの長所と短所を比較検討する必要があります。個人的には、初期段階ではクラリティに焦点を当て、後で問題を発見した場合はパフォーマンスをリファクタリングする方が常に良いと感じています。

于 2009-08-13T18:53:01.807 に答える