【问题标题】:create tables country with city用城市创建表格国家
【发布时间】:2021-09-04 08:30:40
【问题描述】:
哪个更好 - 制作两张表,一张用于国家/地区,另一张用于城市?
countries
countery_id pk
country_name
cities
city_id pk
city_name
country_id fk
或国家和城市一张表
id pk
country_name
city_name
【问题讨论】:
标签:
sql
forms
ms-access
relational-database
【解决方案1】:
我会为每个对象方法使用一个单独的表。 (2 表)
- 它会更容易维护和扩展(例如,您需要为国家/地区添加货币)。
- 它促进数据完整性,例如消除来自同一国家的两个城市的国家名称拼写不同(“美国”、“美国”等)的风险。
- 它节省了磁盘空间(没有数据重复)。
【解决方案2】:
这是一个复杂的问题。 “正式”的答案是国家和城市是不同的实体,因此您应该将它们放在单独的表中。
实际的答案是,使用单独的表格可能没有多大用处:
- 一个城市恰好位于一个国家/地区(尽管都会区可能跨越多个国家/地区)。
- 城市从不——或很少——改变国家/地区。
- 国家/地区具有标准化的名称和代码。
“国家”可以被视为“城市”的一个属性。但这意味着通过多行重复国家名称。而且这样的重复很可能是有问题的,并且容易出错。但这取决于数据的来源。
对我来说,我认为这可以归结为三个因素。
- 数据来源是什么?如果源是城市和经过验证的国家名称的标准化列表,我将它们存储为单个表不会有问题。如果来源是任意的或涉及任何人工输入,那么我建议为
countries 单独提供一个表格。
- 您是否还需要存储有关某个国家/地区的其他信息,例如语言或人口?如果是这样,那么您需要为
country 提供一个单独的表。
- 其他表格是否需要引用国家/地区(例如列出官方语言的表格)?
总之,我想说可能有更多的情况需要两张桌子。但是在您非常简单的示例中,在某些情况下,一张桌子可能没问题。