2

次の DB テーブル設計に名前はありますか。

基本的に、キーと値のペアを表す一般的な列があります。

ID | k1 | v1 | k2 | v2 | k3 | v3 | ....

1 | 名前 | サム | last_name| スミス | ヌル | ヌル | ...

私のアプリケーションでは、行が 1 つしかない多くのテーブルがあり、それらを X 個の列を持ち、各行が特異なテーブル行を表す汎用テーブルにマージしたいと考えています。

前もって感謝します。

4

2 に答える 2

11

エンティティ属性値。 「名前値テーブル」または「オープン スキーマ」とも呼ばれます。

これはSQL アンチパターンです。リレーショナル データベース設計の多くの規則に違反しており、維持するのが非常に困難です。私はそれに対してお勧めします。

EAV についての私の考えの詳細については、「製品テーブル、多くの種類の製品、各製品には多くのパラメータがあります」という質問に対する私の回答を参照してください。

于 2009-05-13T04:33:25.380 に答える
3

悪いアイデア。基本的に、リレーショナル データベースをリレーショナル データベースとして使用する必要があります。

通常、キーと値のペアは推奨される格納方法ではありませんが、少なくとも 1 つのキーと 1 つの値を持つ 1 つの行は "正しい" ものです。

複数のペアを 1 つの行に配置すると、いくつかの問題が発生します。

  1. 特定のキーをどのように見つけますか?
  2. そのキーは k1、k2、または k3 にありますか? それとも、常に特定の列にありますか?
  3. それをどのように実施しますか?
  4. どのようにパフォーマンスを向上させますか?

既知の属性を持つエンティティとしてエンティティをモデル化します。それがデータベースの目的です。

于 2009-05-13T04:35:47.950 に答える