可以说我有2个表:更改外键含义。如何处理?
种
- SpeciesId
- SpeciesName
动物
- 动物编号
- SpeciesId - 外键
如果你给改变SpeciesName最终用户的能力,这意味着他们可能会影响引用更改的记录(至少从用户的角度来看)所有动物的物种。这可能是一个极端的例子,但这种情况通常如何处理?把最终用户的责任告诉他们在做什么?如果之前使用过名称更改,请禁止?
我们正在讨论这种情况,我想从其他人那里获得输入。提出的解决方案之一是删除外键(例如,为动物表中的物种放置文本字段)。这对我来说看起来并不正确,因为你在什么时候绘制了使用外键的界限?对我来说,似乎更像是一个培训问题,以确保管理员了解他们所做的更改的影响。我知道这是一个开放式的问题,根据情况可能会有所不同,但我只是想得到一些一般性意见。
嗯,其中之一,Species.SpeciesName应该是唯一的,所以你不应该能够使用已经在使用的名称。否则,你的问题不是真正的答案 - 因为你的真实使用案例不是科学已经定义的例子,所以我们很难说出这些名称变化将会发生什么样的频率,它们会对其余的架构,或者为什么有一个文本列会更好,如果名称确实发生了变化。 – 2013-05-02 22:19:21
为了减轻参考表中更改值所带来的一些痛苦,您可以实施更改跟踪,以便能够告诉谁,何时以及如何更改它们并在必要时恢复这些更改。 – peterm 2013-05-02 22:28:02
您使用这种查找表的原因之一是,名称更改并不痛苦。在您的替代设计中,如果您拥有属于一个物种的5000只动物,并且您更改了物种的名称,则必须更新5000行(并且根据索引可能会更多)。当你有外键时,反复重复的代理(SpeciesId)不会改变;只有FK表中名称的* 1 *副本发生变化。此外,由于大多数名称可能会超过4个字符,因此您还可以使用SpeciesId在Animal表中节省大量空间。 – 2013-05-02 22:28:03