0

「フィールド」と「値」を動的に作成できる適切なデータベース構造を作成するための支援が必要です。次の 5 つのテーブルを使用する予定です。

  1. 特性カテゴリ
  2. グループ
  3. 特性グループ
  4. 人々
  5. 特性値

TraitCategoriesテーブルには、特徴のカテゴリ (つまり、「フィールド」)のみが保持されます。つまり、髪の色、身長などです。カテゴリは、必要に応じて追加/削除できます。

Groupsテーブルには、アドホック/動的グループ ラベル (アジア、南米など) が保持されます。

TraitGroupingsTraitCategoriesはとの結合テーブルですGroups

テーブルは外部キーを介しPeopleてテーブルにリンクされるため、とテーブルGroupsの間の関係を利用して、特性のさまざまなカテゴリ (フィールド) が割り当てられます。GroupsTraitCategories

しかし問題は、特性カテゴリ/フィールドに1 人あたりの値をどのように割り当てるかということです。

テーブルの各行にandをTraitValues含めることを考えていたので、テーブルと テーブルとテーブルの両方の間に関係があります。このアプローチは理にかなっていますか?このアプローチにより、テーブルを介して特性のカテゴリと値を取得できますか?person_idtrait_category_idTraitValuesPeopleTraitCategoriesPeople

4

1 に答える 1

0

あなたはEAVの形式を説明しています。

これがRubyで表現するのにどれほど実用的かはわかりませんが、あなたの場合、データベースモデルは次のようになります。

ここに画像の説明を入力してください

(簡潔にするために、ほとんどの非キーフィールドは省略されています。)

識別関係を豊富に使用していることに注意してください。これGroupIdにより、「ひし形」の依存関係の両側に伝播し、それを下部の単一のフィールドにマージできTraitValueます。

これは、その人のグループにもリストされていない限り、その人が特性を持つことができないことを保証するものです。たとえば、人のグループにも「髪の色」がある場合にのみ、人は「髪の色」を持つことができます。


ところで...

Peopleテーブルは、外部キーを介してTraitGroupingsにリンクされるため、特性のさまざまなカテゴリ(フィールド)が割り当てられます。

Peopleを直接参照するFKがある場合TraitGroupings、人は最大で1つの特性グループ、したがって最大で1つの特性カテゴリを持つことができます。あなたの質問の言い回しから、それはあなたが望むものではないようです。

于 2012-09-24T19:08:42.333 に答える