如何设计表格来支持与默认值有很多关系?
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 的属性实际上是最简单的,因为您在创建国家时不必担心现有的城市。
- 您必须处理要求每个国家/地区恰好有一个默认城市的业务规则
如何设计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 的属性实际上是最简单的,因为您在创建国家时不必担心现有的城市。
- 您必须处理要求每个国家/地区恰好有一个默认城市的业务规则