2

行モデリングとEAV(Entity-Atribute-Value)の主な違いは何ですか?
EAVは行モデリングのサブセットだと思いますが、主な違いを述べることはできません。
可能であれば、回答に参考文献を使用してください。

4

1 に答える 1

2

良い質問。

ウィキペディアの記事によると、

行モデリングとEAVの違いは次のとおりです。

  • 行モデル化されたテーブルは、それが説明するという事実において同質です。ラインアイテムテーブルは、販売された製品のみを説明します。対照的に、EAVテーブルにはほとんどすべてのタイプのファクトが含まれています。
  • 行モデル化されたテーブルの値列のデータ型は、記録するファクトの性質によって事前に決定されています。対照的に、EAVテーブルでは、特定の行の値の概念的なデータ型は、その行の属性によって異なります。

それで、これが私の見解です:

  • 行モデリング

    create table line_items (
      id int primary key,
      sale_id int,
      foreign key sale_id references sale(id),
      product_name varchar(50), -- this could also be a foreign key 
      price decimal(10, 2)
    );
    
    • これにはいくつかの型安全性があります: priceジャンク文字列にすることはできません

    • この表に入れるのはラインアイテムだけです

    • 私には、これは通常の1:多くの関係のように聞こえます(しかし、私にはわかりませんので、それについて私を引用しないでください)

  • エンティティ属性値

    create table my_eav (
      entity_id int,
      foreign key (entity_id) references entity(id),
      attribute varchar(50),
      value varchar(50),
      primary key (entity_id, attribute)
    );
    
    • 値はsとして格納されますがvarchar、数値、文字列、時間などの場合があります。

    • 靴のサイズ、飛行機の重量、1926年にベーブ・ルースがヒットした本塁打の数など、あらゆる種類のデータを保存できます。


記事は続けて言う:

標準の行モデリングを超えてEAVに移行する必要がある状況を以下に示します。

  • 個々の属性のデータ型はさまざまです(臨床所見で見られるように)。
  • データのカテゴリは多数あり、増加または変動していますが、各カテゴリ内のインスタンス(レコード/行)の数は非常に少ないです。ここで、従来のモデリングでは、データベースの実体関連図に数百のテーブルが含まれる場合があります。数千/数百万の行/インスタンスを含むテーブルは、行が非常に少ないテーブルと同じ程度に視覚的に強調されます。後者は、EAV表現への変換の候補です。

したがって、これらの1:many関係が多数ある場合、行モデリングで必要となるように、それぞれに1つのテーブルが必要ですか?一方、EAVでは、これらのテーブル(の一部またはすべて)を1つに組み合わせることができます。

于 2012-10-09T17:42:51.757 に答える