代码之家  ›  专栏  ›  技术社区  ›  Valentin Rocher

复合外钥理论

  •  4
  • Valentin Rocher  · 技术社区  · 15 年前

    我真的不确定我用的是好的术语,所以我会先解释一下我的问题。

    我有一个对照表, CompetenceCollab 包含人与其能力之间的关联。这张表有两个主键:人员ID和能力ID。到目前为止,一切正常。

    但是,我必须添加的新功能是:人员必须能够为其他人员的能力添加评分。基本上,这意味着我必须添加一个新表,其中将包含注释、给出注释的人以及指向 能力分类 表。一位同事告诉我,我可以使用他所说的“备用键”,定义两个外键,每个主键列对应一个 能力分类 告诉数据库每个等级都与一个能力和一个人有关。

    所以我的问题是:

    • 首先,这个设计看起来完全疯了吗?如果是这样,我该怎么做?
    • 我必须在西蒙尼使用ORM教义。这种东西可以用吗?如果是,有人能给我提供一种在yaml文件中定义它的方法吗?

    谢谢你的帮助,请随意在评论中提问,我不知道我是否真的那么清楚。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Hossein Shahdoost    7 年前

    我知道这是一个老问题,但复合外键自docrine 2.1以来就得到了支持。见: http://readthedocs.org/docs/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

        2
  •  1
  •   Mark M    15 年前

    这是两个问题,但我只回答第一个问题,因为我对这个问题中的ORM工具一无所知。

    我不确定“备用钥匙”是什么意思,但我会考虑的选择是(按优先顺序):

    1)在competencycollab上定义一个代理主键,并使用它从新表创建一个外键。

    2)在新表中同时具有人员ID和能力ID字段,并创建能力collab的复合外键

    如果条令ORM有一个合适的特性集,它至少应该处理(1),因为这是一个非常常见的场景。