Database 在bug/bug状态模型中,外键将驻留在哪里?
我总是卡在外键上,因此我有一个问题:外键应该位于错误跟踪系统的何处,在该系统中,错误在任何给定时间都只有一个状态,而只有少量状态存在(打开、正在调查、已解决、待批准)。因此,每个状态都有许多与之相关的bug。我的假设是外键应该作为status\u id列驻留在Bug表中,该列引用status表中的id列。这是一个安全的假设吗Database 在bug/bug状态模型中,外键将驻留在哪里?,database,database-design,foreign-key-relationship,Database,Database Design,Foreign Key Relationship,我总是卡在外键上,因此我有一个问题:外键应该位于错误跟踪系统的何处,在该系统中,错误在任何给定时间都只有一个状态,而只有少量状态存在(打开、正在调查、已解决、待批准)。因此,每个状态都有许多与之相关的bug。我的假设是外键应该作为status\u id列驻留在Bug表中,该列引用status表中的id列。这是一个安全的假设吗 TABLE: Bug id integer desc string status_id integer fk Status
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
是的,你的假设是正确的。只要每个Bug只有一个状态,您就可以将外键包含到该表中。是的,您的假设是正确的。只要每个Bug只有一个状态,您就可以将外键包含到该表中。是的,这是正确的。考虑到这一点,你的bug有一个状态;任何给定状态都有许多错误。是的,这是正确的。考虑到这一点,你的bug有一个状态;任何给定状态都有许多错误。您的假设是正确的,更重要的是,关系(一个多/一个一个多/多个)决定了哪个表是主键表,哪个表是外键表
在这种情况下,状态表在此处明确包含FK关系的主键。如果是另一种情况,那么每个状态都必须先存在于Bug表中,然后才能存在于状态表中,这显然不是有意的。您的假设是正确的,更重要的是关系(一个多/一个一/多个)决定哪个表是主键表,哪个表是外键表
在这种情况下,状态表在此处明确包含FK关系的主键。如果情况正好相反,那么每个状态都必须先存在于Bug表中,然后才能存在于status表中,这显然不是有意的。“FK关系的主键”。(抓着我的头)。这就是我不喜欢外键的原因。对不起,编辑它以增加清晰度。MSDN也有助于更清楚地解释:谢谢。MSDN链接很棒,“FK关系的主键”。(抓着我的头)。这就是我不喜欢外键的原因。对不起,编辑它以增加清晰度。MSDN也有助于更清楚地解释:谢谢。MSDN链接很棒。