2

ほぼ3次元の要件のように見えるテーブルを設計する必要があります。

例えば、

  1. 恐竜には「無限の」種類があります。
  2. すべての恐竜には、いくつかの共通の機能セット(名前、地球上に存在してからの年数、体重、家系の名前など)があります。
  3. それぞれの品種とは関係のない特定の機能がいくつかあります。このような各機能は、「name」="value"ペアで識別されます。「名前」は機能の名前のようなもの(頭の角、音声周波数など)であり、「値」は機能の値(頭の3つの角、10Hzの音声周波数など)のようなものです。 。、)。

要件に従って、cid、名前、存在からの年数、重みなどを参照する列などの一般的な機能を備えたテーブルXを作成できます。また、列(uid、name、value)のみを持つ別のテーブルYが存在する可能性があり、ここでcidをバインドしてuidに使用できます。

しかし、Xの行数は膨大になるという事実(1兆以上、恐竜の家族はそれほど多くないかもしれませんが、それは単なる例です)。同様に、name = valueは、テーブルXのエントリごとに数百になります。これにより、テーブルYの行数が増加します。

フィーチャの「名前」も「無限」であるため、動的な列のようになるため、残念ながら、フィーチャごとの列のように、列の数が固定されたテーブルを作成することはできません。

1つのアイデアは、テーブルXにさらに2つの列を含めることです。ここで、1つの列はコンマ区切りのすべての機能(「名前」)で構成でき、もう1つの列はコンマ区切りのすべての「値」で構成できます。しかし、これは非常に悪い設計であることを私は知っています。

この要件に対してより良い解決策はありますか?

4

1 に答える 1

1

以下の例を見てください。で恐竜の種を指定しdinosaur_type、個々の恐竜がテーブルdinosaurに入り、種/タイプにリンクされdinosaur_featureます。次に、個々の恐竜ごとに行を追加して、恐竜に可能なあらゆる種類の (無限の) 機能を追加できます。

Table `dinosaur`:
id 
dinosaur_type_id (fk)
name
years since existence on earth
weight
family name

Table `dinosaur_type`:
id
name

Table `dinosaur_feature`:
dinosaur_id (fk)
feature_name
feature_value
于 2011-12-13T09:45:55.910 に答える