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