Ruby on rails 如何管理动态关系?
我需要帮助创建一个适当的数据库结构,使我能够动态创建“字段”和“值”。我计划使用以下5个表Ruby on rails 如何管理动态关系?,ruby-on-rails,ruby-on-rails-3,database-design,activerecord,Ruby On Rails,Ruby On Rails 3,Database Design,Activerecord,我需要帮助创建一个适当的数据库结构,使我能够动态创建“字段”和“值”。我计划使用以下5个表 列车分类 团体 追踪组 人 跟踪值 TraitCategories表仅包含特征的类别(即“字段”),即头发颜色、身高等,并且可以根据需要添加/删除这些类别 组表包含特殊/动态组标签,即亚洲、南美等 TraitGroupings是TraitCategories和组的联接表 People表将通过外键链接到Groups表,从而通过利用Groups和TraitCategories表之间的关系来分配不同类别(字段)
TraitCategories
表仅包含特征的类别(即“字段”),即头发颜色、身高等,并且可以根据需要添加/删除这些类别
组
表包含特殊/动态组标签,即亚洲、南美等
TraitGroupings
是TraitCategories
和组的联接表
People
表将通过外键链接到Groups
表,从而通过利用Groups
和TraitCategories
表之间的关系来分配不同类别(字段)的特征
但问题是,我如何将人均值分配给特质类别/字段
我想让
TraitValues
表中的每一行都包含person\u id
和trait\u category\u id
,这样TraitValues
表和People
和TraitCategories
表之间就会有一个关系。这种方法有意义吗?这种方法是否允许我通过人员
表获取特质类别和值?您正在描述的是一种类型
我不确定这对于用Ruby表示有多实际,但在您的例子中,数据库模型看起来类似于:
(为了简洁起见,省略了大多数非关键字段。)
请注意我们如何充分使用标识关系。这就是让我们在“菱形”依赖项的两侧传播GroupId
,并将其合并到底部TraitValue
中的单个字段中
这就是确保一个人不能有某个特质的原因,除非该特质也被列在该人的群体中。例如,如果一个人的组也有“头发颜色”,那么他只能有“头发颜色”
顺便说一句 People表将通过外键链接到TraitGroup,因此将被分配不同类别(字段)的特征
如果
People
有一个直接引用TraitGroupings
的FK,那么一个人最多只能有一个特征分组,因此最多只能有一个特征类别。从你问题的措辞来看,这似乎不是你想要的。谢谢你的明确而详细的回答;这很有帮助。你的BTW
部分是正确的,我的意思是写组
而不是跟踪组
。在进一步思考你的图表后,我不清楚你为什么要引用跟踪值
表中的跟踪组
表(通过FK),而不是直接从TraitValue
表中引用TraitCategory
表。您能进一步解释/详细说明吗?@Ari,因为TraitValue
特定于TraitGroup
,而不是TraitCategory
。换句话说,你需要在小组中“注册”一个特质类别,然后才能给它赋值。当然,假设我对你要求的理解是正确的。。。