我总是卡在外键上,所以我有一个关于外键应该驻留在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
答案 0 :(得分:3)
是的,你的假设是正确的。只要每个Bug只有一个状态,您就可以只包含该表的外键。
答案 1 :(得分:1)
你的假设是正确的,更重要的是关系(One-Many / One-One / Many-Many)决定哪个表是主键表,哪个表是外键表?
在这种情况下,Status表清楚地包含FK关系的主键。如果是相反的方式,则每个状态必须存在于Bug表中,然后才能存在于Status表中,这显然不是预期的。
答案 2 :(得分:0)
是的,这是正确的。想到这一点的方法是你的bug有一个状态;任何给定状态都有很多错误。