【问题标题】:Why are nullable ForeignKeys "evil"?为什么可为空的 ForeignKeys “邪恶”?
【发布时间】:2015-12-18 17:07:36
【问题描述】:

前段时间有人告诉我,可为空的 ForeignKeys 是“邪恶”的数据库设计?

换句话说,它是一种“反模式”,应该避免。

为什么?

【问题讨论】:

  • @BrankoDimitrijevic 请详细说明为什么他们不是“邪恶的”?
  • 因为它们模拟了一个常见且有用的案例(可选参考)。我不知道有更好的方法来模拟这种情况。你是吗?
  • @BrankoDimitrijevic 对于我们过去使用可为空的 ForeignKeys 的地方,我们现在使用默认值。示例:用户---国家:我们插入一个名为“未知”的国家。如果用户所在国家/地区未知,则将其用作 FK。
  • 你怎么知道“未知”行是特殊的?在业务逻辑中硬编码?您对“未知”行的其他字段使用什么值?例如,什么是合理的国家代码,或“未知”国家的电话号码?您描述的是a 解决方案,但我不会称其为更好 解决方案。
  • @BrankoDimitrijevic 我们的模型中没有我们国家的电话号码。但是你就在这里,如果我们有的话。 “未知”值现在在电话号码中。我说它“更好”了吗?然后我很抱歉(“在做错和做对的想法之外,有一个领域。我会在那里见到你。”)。我将我的解决方案称为“另一种策略”。

标签: database-design


【解决方案1】:

您需要一个“if”来处理具有可为空 ForeignKey 的数据结构。

您可以在此处阅读有关“如果”为何是邪恶的更多信息:Why is the 'if' statement considered evil?

【讨论】:

  • SQL 中没有if,您当然不需要一个来选择具有可为空外键的行。
  • @a_horse_with_no_name 当然你是对的:SQL 中没有“如果”。但是在任何编程语言中,您都需要决定:“这个变量是包含数据还是 NULL”。
  • 这对外键有什么特殊意义?其他列也可以为空。
  • @a_horse_with_no_name 是的,其他列也可以为空。 .... 我认为同样的规则也适用。在编程语言中处理可为空的列很烦人。
猜你喜欢
  • 2010-09-16
  • 2010-10-01
  • 1970-01-01
  • 2012-10-10
  • 2010-11-22
  • 2011-02-04
  • 2015-12-01
  • 1970-01-01
相关资源
最近更新 更多