0

我需要帮助创建一个合适的数据库结构,让我能够动态地创建“字段”和“值”。我计划使用以下 5 个表。

  1. 特质类别
  2. 团体
  3. 特征分组
  4. 人们
  5. 特质价值观

TraitCategories包含特征的类别(即“字段”)——即头发颜色、身高等——并且可以根据需要添加/删除类别。

Groups表包含临时/动态组标签——即亚洲、南美等。

TraitGroupings是和的连接TraitCategoriesGroups

People表将Groups通过外键链接到该表,因此将通过利用GroupsTraitCategories表之间的关系为特征分配各种类别(字段)。

但问题是,如何将每个人的值分配给特征类别/字段?

我正在考虑让表中的每一行都TraitValues包含person_id,以便表与表和表trait_category_id之间存在关系。这种方法有意义吗?这种方法是否允许我通过表格获取特征类别和值?TraitValuesPeopleTraitCategoriesPeople

4

1 回答 1

0

您正在描述一种EAV形式。

我不确定这在 Ruby 中表示有多实用,但在你的情况下,数据库模型看起来类似于:

在此处输入图像描述

(为简洁起见,省略了大多数非关键字段。)

请注意我们如何大量使用识别关系。这就是让我们GroupId在“菱形”依赖项的两侧传播的原因,并将其合并到底部的单个字段中,在TraitValue.

这是确保一个人不能具有特征的原因,除非它也被列在该人的组中。例如,只有当该人的组也具有“头发颜色”时,该人才能具有“头发颜色”。


顺便提一句...

People 表将通过外键链接到 TraitGroupings——因此将被分配各种类别(字段)的特征。

如果People有一个直接引用的 FK TraitGroupings,那么一个人最多可以有一个特征分组,因此最多可以有一个特征类别。从你的问题的措辞来看,这似乎不是你想要的。

于 2012-09-24T19:08:42.333 回答