在bug / bug-status模型中,外键驻留在哪里?

时间:2009-05-22 22:13:30

标签: database database-design foreign-key-relationship

我总是卡在外键上,所以我有一个关于外键应该驻留在bug跟踪系统中的位置的问题,其中bug在任何给定时间都具有单一状态,而只存在少量状态(Open,正在调查中,已解决,待批准)。因此每个状态都有许多与之相关的错误。我的假设是外键应该作为Status_id列驻留在Bug表中,该列引用Status表中的id列。这是一个安全的假设吗?

TABLE:
    Bug
    id integer
    desc string
    status_id integer fk

    Status
    id integer
    desc string

RAILS MODEL:
    Bug
    has_one :status

    Status
    has_and_belongs_to_many :bugs

3 个答案:

答案 0 :(得分:3)

是的,你的假设是正确的。只要每个Bug只有一个状态,您就可以只包含该表的外键。

答案 1 :(得分:1)

你的假设是正确的,更重要的是关系(One-Many / One-One / Many-Many)决定哪个表是主键表,哪个表是外键表?

在这种情况下,Status表清楚地包含FK关系的主键。如果是相反的方式,则每个状态必须存在于Bug表中,然后才能存在于Status表中,这显然不是预期的。

答案 2 :(得分:0)

是的,这是正确的。想到这一点的方法是你的bug有一个状态;任何给定状态都有很多错误。