如何设计表格来支持与默认值有很多关系?

How to design tables to support has many relation with default value?

如何设计table支持与默认值有多大关系?

例如:
国家有很多城市。一个城市是该国家/地区的默认值。

表设计选项 1:
城市 table 将具有布尔字段 - is_default.

表设计选项 2:
Country table 将具有外键字段 - default_city

将写入的查询:
更新并获取默认城市并更改默认城市。

哪个选项更好,为什么?

提前致谢。

从长远来看,随着用途的发展,将城市存储在乡村可能不是最好的。最好有city属性。然后不是布尔值,而是将其设为代码,其中 1 表示默认值。以后其他城市可能会开始带有其他属性,比如金融资本、资本等。所以给城市属性可能会更好。

例如,公司有员工,一名员工是CEO。因此,最好在员工中拥有员工头衔,而不是在公司中拥有员工实体。

同样在创建国家记录时,由于城市尚不存在,您将无法创建记录。您将留空,创建城市,然后返回设置默认值。

这个问题既有哲学方面的问题,也有实践方面的问题。

哲学问题是"which entity should know about the default status - country or city?"。一个国家可以没有默认城市吗? "defaultness" 是可以与城市相关联的属性吗?是否有任何其他属性可能适用于城市与国家之间的关系?

这个哲学问题很重要,因为在未来,不参与初始对话而查看此模式的人应该能够理解其意图,而无需阅读文档。

顺便说一句,我不知道答案,但值得与您的团队进行这次对话 - 我认为默认解决方案应该是 "do what matches the domain model best"。

然后,还有一些实际问题。

正如@SaadAhmad 所写,如果 "default city" 作为国家的一个属性,并且您想将其设为强制性,则城市记录必须在您创建国家之前存在,这是不可能的,因为 "country"是 "city".

的必填字段

另一个实际问题是"how do I enforce the business rule that a country must have 1 and only 1 default city"?通过将 "default city" 创建为国家/地区的非空字段很容易,但很难将 "is_default" 作为城市的属性 - "country_id, is_default" 上的唯一索引意味着只能有一个默认城市每个国家/地区,但不执行必须至少有 1 个的规则。

所以,答案是:

  • 先弄清楚业务领域在告诉您什么。
  • 将 "is_default" 设为 city 的属性实际上是最简单的,因为您在创建国家时不必担心现有的城市。
  • 您必须处理要求每个国家/地区恰好有一个默认城市的业务规则