Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何管理动态关系?_Ruby On Rails_Ruby On Rails 3_Database Design_Activerecord - Fatal编程技术网

Ruby on rails 如何管理动态关系?

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表之间的关系来分配不同类别(字段)

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

  • 列车分类
  • 团体
  • 追踪组
  • 跟踪值
  • 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
    。换句话说,你需要在小组中“注册”一个特质类别,然后才能给它赋值。当然,假设我对你要求的理解是正确的。。。