2012-04-04 14 views
3

私は私の最初のeコマースデータベースを快くしようとしています。私はほとんどのEコマースのウェブサイトで見つける持っているものデータベース設計(私はEAVアプローチを使用する必要があります)

は、これらのサイトは、その後[カテゴリ、サブカテゴリなど再びサブカテゴリとを有することです。およびサブカテゴリの深さが固定されていない他のいくつかの今すぐすべての製品は、それに関連付けられた属性を持つ異なる

を持っていながら、一つのカテゴリーは、6つのネストされたサブカテゴリーがあることを意味します。

今、私の質問は、これらのウェブサイトは、彼らが「EAV」モデルと呼ばれるものを適用するネストされたサブカテゴリーのためにテーブルを追加し続けると、データベースに属性の列を追加するに

OR

を維持していますさ(私が正しい場合)この問題を解決するか、列やテーブルを追加し続け、多くのサイトでWebPagesを最新の状態に保ちます。

これはあなたのいくつかの貴重なアドバイスを提供してください、私の最初のeコマース事業であるので、(彼らは、ウェブサイトのパフォーマンスがイマイチ影響を受けます。.. EAVモデルを使用している場合)。

ありがとう、

ご協力いただきましてありがとうございます。あなたが必要なもの

+0

読む[この優れた記事(「悪いCARMA」)](http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/)と5つのトップのミスのこのリストに[参照EAVである理由データベース設計(ポイント#3)](http://www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/)で恐ろしく悪いアイデア..... –

答えて

6

は、製品の機能および製品カテゴリためネストされたセットのための組み合わせのEAVです。

EAVがほとんど常に悪い選択であることは確かですが、EAVがの1つのアプリケーションでは、という完璧な選択肢は、オンラインカタログの製品属性を処理するためです。 |「属性」:

は、ウェブサイトは、製品、製品の属性は常に2つの列を持つ垂直リストとして表示されます...属性を示して方法を考えます"値"。これらのリストは、複数の製品を並べて比較する場合があります。 EAVはこの種のことを行うのに完璧に働きます。ほとんどのアプリケーションでEAVを無意味で非効率的にするのは、まさにEAVをオンラインカタログの製品属性にとって有意義かつ効率的にするものです。誰もが常に言う理由の

一つは「EAVは悪であります!」列名(すなわち、属性の意味)がテーブル駆動型であり、したがってスキーマによって定義されていない限り、EAVの属性は「無意味」であるということである。スキーマの全体的なポイントは、この点がよく取られるようにモデルの意味を与えることです。オンライン製品カタログ、製品の意味属​​性の場合しかし自体、システムに本当に重要ではありません。カタログシステムが製品属性を気にする唯一の理由は、それらをリストに、またはおそらく製品比較マトリックスにダンプすることです。したがってEAVはこの特定の場合にはであることはありません

製品カテゴリについては、回答に記載されているように、入れ子セットモデルが必要です。this questionネストされたセットは、編集時に事前計算の労力を犠牲にして、不均衡な階層の複数のレベルをトラバースする機能とともに、非常に迅速な検索を提供します。

関連する問題