1. ホーム
  2. sql

[解決済み] エンティティ・アトリビュート・バリュー データベース vs. 厳密なリレーショナルモデル Ecommerce

2022-05-28 01:30:19

質問

というのが無難でしょう。 EAV/CR データベースモデルは悪いものです。 とはいえ

質問です。 実行時に変更可能な電子商取引製品を記述する属性のクラス(quot;class")を扱うには、どのようなデータベースモデル、テクニック、パターンを使用すべきでしょうか?

優れた E コマース データベースでは、オプションのクラスを保存します (テレビの解像度のように、各テレビの解像度を持っていますが、次の製品はテレビではなく、" TV resolution" を持っていないかもしれません)。 どのようにそれらを保存し、効率的に検索し、ユーザーが製品を説明する可変フィールドを持つ製品タイプを設定できるようにするのでしょうか? 検索エンジンが、顧客が通常コンソールの深さに基づいてテレビを検索することを発見した場合、コンソールの深さをフィールドに追加し、実行時に各テレビ製品タイプに単一の深さを追加することができます。

優れた E コマース アプリケーションの間で、製品のセットを表示し、ヘッダーとして「TV Resolution」と、見つかったセットで最も一般的な上位 5 つの TV 解像度を表示するサイド メニューを持つ、素晴らしい共通の機能があります。 クリックすると、その解像度のテレビだけが表示され、サイドメニューで他のカテゴリーを選択して、さらにドリルダウンすることができます。 これらのオプションは、実行時に追加される動的な製品属性になります。

さらに議論します。

というわけで、長くなりましたが は、インターネット上のリンクやモデルの説明で、次の設定を修正することができる "学問的に" がありますか?

Noel Kennedy がカテゴリ テーブルを提案してくれたことに感謝しますが、必要性はそれよりも大きいかもしれません。 私は以下にそれを別の方法で説明し、意義を強調しようとしています。 問題を解決するために視点の修正が必要かもしれませんし、EAV/CRに深く入り込む必要があるかもしれません。

EAV/CRモデルへの肯定的な反応が大好きです。 私の仲間の開発者は皆、Jeffrey Kemp が以下で触れていることを言います。新しいエンティティは、専門家によってモデル化および設計されなければなりません。 問題は

  • エンティティは毎週属性を追加および削除します。

    (検索キーワードが将来の属性を決定する)
  • 毎週新しいエンティティが到着

    (製品は部品から組み立てられる)
  • 旧エンティティは毎週消えていく

    (アーカイブ, 低人気, 季節限定)

顧客は2つの理由で製品に属性を追加したいと考えています。

  • 部門 / キーワード検索 / 類似製品間の比較表
  • チェックアウト前のコンシューマー向け製品設定

属性は、単なるキーワード検索ではなく、重要性を持たなければなりません。 たとえば、「生クリームを使ったケーキ」をすべて比較したい場合、「ケーキ」をクリックし、「誕生日のテーマ」をクリックし、「生クリームを使ったケーキ」をクリックし、「生クリームを使ったケーキ」をすべてチェックすることが可能です。 これはケーキに限ったことではなく、単なる一例です。

どのように解決するのですか?

一般的な長所と短所がいくつか考えられますが、どちらか一方が優れている状況もありますね。

オプション 1、EAV モデル。

  • 長所:シンプルなアプリケーションの設計と開発にかかる時間が短い
  • 長所: 新しいエンティティを簡単に追加できる (ユーザーによって追加される可能性もある?) されるかもしれない?)
  • 長所: 汎用的なインターフェイス コンポーネント。
  • 短所: 単純なデータ型を検証するために複雑なコードを必要とする。
  • 短所: 単純なレポートのために、より複雑な SQL レポート
  • 欠点:複雑なレポートは、ほとんど 不可能になる
  • 短所: 大規模なデータ セットに対するパフォーマンスが低い

選択肢2、各エンティティを個別にモデル化する。

  • 短所: 要件の収集と設計に時間がかかる と設計に時間がかかる。
  • 短所: 新しいエンティティは、専門家によるモデリングと設計が必要 設計する必要がある。
  • 利点: 各エンティティのカスタム インターフェイス コンポーネント エンティティ
  • Pro: データ型制約と検証の実装が簡単
  • 長所: SQLは書きやすく、理解しやすく、デバッグしやすい。 理解し、デバッグしやすい。
  • 長所:複雑なレポートも比較的シンプルに作成可能
  • 長所:大規模なデータセットに対して最高のパフォーマンスを発揮

オプション3、コンビネーション(エンティティを適切にモデル化し、一部またはすべてのエンティティにカスタム属性のための拡張機能を追加する)。

  • 賛成/反対: オプション 1 よりも要件の収集と設計に時間がかかりますが、おそらくオプション 2 ほどはかからないでしょう *。
  • 短所: 新しいエンティティは、専門家がモデリングと設計を行う必要がある。
  • プロ:新しい属性は、後で簡単に追加することができます。
  • 短所:単純なデータ型(カスタム属性用)を検証するために複雑なコードが必要。
  • Con: カスタム インターフェイス コンポーネントはまだ必要ですが、カスタム属性については汎用インターフェイス コンポーネントが可能な場合があります。
  • 利点: レポートにカスタム属性が含まれるとすぐに SQL が複雑になる。
  • 利点: カスタム属性による検索やレポートが必要でない限り、一般的に良好なパフォーマンス。

* オプション 3 が必ずしも設計段階の時間を節約できるかどうかはわかりません。

個人的には、私はオプション 2 を支持し、可能な限り EAV を回避します。しかし、いくつかのシナリオでは、ユーザーは EAV に付随する柔軟性を必要とします。