私は現在、記事とタグという2つのテーブルを持つデータベースを持っています。記事を複数のカテゴリに入れることを可能にするために、私は多対多の関係を持っています。パフォーマンスの面でそのようなデザインを持つのは間違いでしょうか?またはこれらの2つのテーブルの関係を削除し、ブリッジ(articlesTags)として3番目のテーブルを追加する必要がありますか?データベース設計の多対多の関係
答えて
多対多の関係が本質的に間違っていることはありません。その関係を容易にするために、Junction Table(これはarticlesTags
を参照しているようです)を作成するだけです。
relationnalモデルには多対多の関係が存在しますが、これは単なる心の抽象です。
fk_article(INTEGER) fk_tag(INTEGER)
多くを使用しても問題はありません:あなたはそれはあなたが持っているでしょうarticles_to_tagsテーブルがあるだろう実装します 多くの関係。それはしばしば必要です。
はい、3番目のテーブルを使用せずに多対多のリレーションを作成することはできません。
概念的なデータベース設計(N:N関係)と物理的な実現の違いがわかります。どのようにN:Nの関係をモデル化しても、前述のジャンクションテーブルが必要になります。
実際の世界の関係を一般的なステートメントのようにモデル化することには何も問題はありません。クラリティは王様です。
任意のシステムでパフォーマンスに関する質問が出るとき、答えは通常「それは依存している」ということになります。
パフォーマンスの問題がWRITESに関連する場合は、高度にNORMALIZED構造が最適です.Junctionテーブルが必要になります。データを大幅に少なくすることができます(ただし、インサートを作成する前にルックアップを行う必要があります)。個々の正規化されたテーブルからの読み取りも非常に高速になります。
問題が分析READSに関連する場合は、DENORMALISED構造が最適です。テーブルが大きく、インデックスが広がっている場合、ジョインは非常にパフォーマンスが高くなります。あなたは多くの時間を得るために多くのスペースを犠牲にします。
一般的に、ソリューションの決定前に、状況の詳細を見て、各アプローチの長所と短所を比較したいと考えています。個人的には、後で問題が発見された場合、初期段階ではClarity、パフォーマンスではリファクタリングに焦点を当てる方が良いということが常にわかっています。
- 1. 1対多関係データベース設計
- 2. User、UserRoleのデータベース設計 - 多対多の関係
- 3. サブ列または多対多関係のデータベース設計
- 4. 多対多の(疑わしい)関係のスキーマ設計
- 5. MySQLデータベースの設計:1対1、多対多、多対多、多すぎますか?
- 6. 多対多関係への関係の設定
- 7. 多対多関係を設定する
- 8. CoreData:多対多の関係
- 9. 多対多関係のデザインテーブル
- 10. RDBMSの多対多関係
- 11. 多対多関係のフィルタリング
- 12. Rails:多対多の関係
- 13. 多対多関係のCount()
- 14. は、多対多の関係
- 15. は、多対多の関係
- 16. 多対多の関係
- 17. ダッパーマルチマッピングの多対多関係
- 18. Cakephpの多対多関係
- 19. 多対多関係のコアデータ/
- 20. SQLの多対多関係
- 21. クエリ(多対多の関係)
- 22. mysql多対多の関係
- 23. 多対多関係のモデリング
- 24. Django多対多の関係
- 25. は、多対多の関係
- 26. ブリーズの多対多関係
- 27. 多対多関係のモデリングコアデータ
- 28. dddの多対多関係
- 29. symfony多対多の関係
- 30. Djangoの多対多関係を多対多関係に変更しますか?
articlesTagsテーブルを使用せずに多対多リレーションシップを作成しましたか? – flayto
多対多リレーションシップを使用する場合は、3番目の表を表す必要があります。これは賢明な選択肢ではありません。あなたのDBMSがそれをサポートしているならば、あなたの最も近いアプローチは各テーブルのSET構造であるかもしれません。しかし、通常、そのようなタイプのテーブル間チェックはあまりありません。別のテーブルが必要です。 –