web-dev-qa-db-ja.com

ファントラップとキャズムトラップ-データベース

キャズムトラップとは誰か教えてもらえますか?はっきりしないので、おそらくファンの罠も。また、わかりやすい例を(陳記法で)提供してください。

これまでの私の理解:ファントラップがM:1:1:Mであることを理解しています。これは、エンティティ間のパスがあいまいであることを示しています。
という事は承知しています。たとえば、Mが学生を表し、他のMが学校を表す場合、どの学生がどの学校で勉強しているかわからないため、あいまいになります(これは私がこれまでに理解したことです

しかし、キャズムトラップとは何かがわかりません。

また、トラップを特定して修正するにはどうすればよいですか?

9
Dembele

単純なWordでは、どちらの場合(FANとCHASM)でも、実際よりも多くの行(結果セット)が生成されます。識別する方法

  • FAN-> 1-N-N 1からのテーブル関係を意味します->多数->多数
  • CHASM-> N-1-Nは、1つの行テーブルから2つ以上のテーブルへの多くの関係を意味します
  • LOOP-> joinすべてのテーブルと円のようなループを作成する場合(この場合、いくつかの行が完全に失われます)

識別できるものはありませんが、ユニバースを作成するときは、目を開いておく必要があります。ユニバースの開発中にこれらの状況から目を離すと、常に問題が発生します。したがって、エイリアス、コンテキストを適用して修正します。

すべての問題が宇宙レベルで解決されたら、報告に取り掛かることができます。練習することにより、あなたは優れた知識を持つことになります。

7
Raj Patel

Conolly&Beggに基づく:

ファントラップは、モデルがエンティティタイプ間の関係を表すが、特定のエンティティオカレンス間のパスがあいまいな状況で発生します

例:(スタッフ)-1:N-has-1:1 Division)-1:1-operates-1:N-(Branch)---(Fan Trap このモデルでは、スタッフが複数のブランチを持つ部門に属している状況では、スタッフが属するブランチを判別できない場合があります。

モデルを再構築すると、トラップが解決されます(分割)-1:1-操作-1:N ブランチ)-1:1-持っている-1:N-(スタッフ)---(Not Fan Trap

Chasm trapは、モデルがエンティティタイプ間の関係を示唆しているが、特定のオカレンス間のパスが存在しない場合に発生します

例:(ブランチ)-1:1-has-1:N スタッフ)-0:1-監督-0:N-(PropertyForRent)---(Chasm Trap

PropertyForRentへのスタッフの関係はスタッフのオプションの参加(0:1)であるため、PropertyForRentへのブランチのパスが存在しない可能性があります。これに対する解決策は、必須の参加を伴うBranchとPropertyForRent間の直接的な関係です。

26
Vladimir Fadeev

ファントラップは、3つのテーブルが互いに1対多の方法で結合するときに発生します。テーブルABとCが結合していることを意味します。テーブルAはテーブルBに1対多でリンクし、テーブルBはテーブルCに再び1つをメインウェイA-> B-> Cに関連付けます。

2
BO fantrap