sql >> データベース >  >> RDS >> Mysql

エンティティ-属性-値テーブルの設計

    私はこの質問に対するほとんどのコメントに反対の意見を述べるつもりです。 EAVは悪です SOやDBA.SEなどで何度も徹底的に説明されているすべての理由から、EAVで間違っていることのほとんどがほとんど無関係であり、(いくつかの)利点がある本当に一般的なアプリケーションが1つあります。 EAVは非常に密接な関係があります。そのアプリケーションはオンライン製品カタログです。

    EAVの主な問題は、データベースが実際に得意なことを実行できないことです。これは、スキーマ> 。スキーマを持つことで、データへのアクセス、解釈、整合性の強化に関して多くの利点がもたらされます。

    商品カタログに関する事実は、商品の属性がカタログシステムとほとんど完全に無関係であるということです。 自体。製品カタログシステムは、(多くても)製品属性で3つのことを行います。

    1. エンドユーザーに次の形式で製品属性をリストに表示します:{属性名}:{属性値}。

    2. 異なる商品の属性が互いに並んでいる比較グリッドに複数の商品の属性を表示します(商品は通常列、属性は通常行です)

    3. 特定の属性/値の組み合わせに基づいて、何か(価格設定など)のルールを推進します。

    システムが(システムに)意味的に無関係な情報を逆流させるだけの場合、この情報のスキーマは基本的に役に立ちません。実際、スキーマは邪魔になります オンライン商品カタログでは、特にカタログにさまざまな種類の商品が含まれている場合は、常にスキーマに戻って、新しい商品カテゴリや属性タイプを許可するためにそれをいじくり回す必要があるためです。

    使用方法が原因で、製品カタログの属性値のデータ型でさえ、必ずしも(非常に)重要であるとは限りません。一部の属性では、「数字である必要があります」や「このリストから取得する必要があります{...}」などの制約を課すことができます。これは、カタログにとって属性の一貫性がどれほど重要であるか、および実装をどの程度複雑にするかによって異なります。いくつかのオンライン小売業者の製品カタログを見ると、ほとんどの場合、単純さと一貫性をトレードオフする準備ができていると思います。

    はい、そうでない場合を除いて、EAVは悪です。



    1. TSQL:現地時間をUTCに変換する方法は? (SQL Server 2008)

    2. SQLでの一時テーブルの作成

    3. ユーザーがアクセスできないSQLデータベースを非表示にする方法

    4. トラブルシューティング:MySQL / MariaDBエラー#1044および#1045ユーザーのアクセスが拒否されました