database-design - 存储下拉菜单的信息

标签 database-design

假设您正在构建一个 HTML 表单并且您想要有 2 个或更多下拉菜单,在从第一个选项中选择一个选项后,第二个菜单被填充,依此类推。例如,选择 country将显示一个列表 provinces对于该国家/地区,该国家/地区将依次列出 cities .

您将如何将此类信息存储在数据库中?你要一张 table 吗Countries(id, name) , Provinces(id, country_id, name) , Cities(id, province_id, name)或者你是否只有一个大的非规范化表 Entries(country, province, city) ? (为什么?)

最佳答案

我会使用规范化形式,因为(与规范化形式一样)更新会更容易和更安全。

想象一下,“加拿大”将其名称更改为“美国的帽子”。用规范化的形式,你更新一行,它的依赖省市还是准确的。使用非规范化形式,您的更新必须为加拿大的每个城市更新表中的一行,这会降低效率(并且[遗憾地] 在某些 RDBMS 中,不是原子的)。

此外,考虑到您将来可能会向这些表中添加更多列,例如国家/地区的国家/地区代码、省缩写、城市邮政编码等。所有这些数据都需要为非规范化表中的每一行复制;在规范化表中,您(再次)将数据放在一个适当且规范的位置。

顺便说一句,您可能会考虑丢失“id”列(大概是自动生成的整数键?)并使用自然主键:可能是国家的国家代码、省份的“名称”以及城市的经度/纬度列(假设“名称”不会起到必要的区分作用)。

关于database-design - 存储下拉菜单的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582859/

相关文章:

SQL 设计问题 - 是否有很多表?

MySql数据库模式引用问题

数据库基数关系奥林匹克问题?

电影数据库搜索系统的 SQL

xml - sqlite、xml 还是组合?

mysql - 跨多个表的唯一键

mysql - DBMS 如何使用文件 I/O 读取数据库?

entity-framework - E2L : How do you handle Foreign Keys that participate in multiple relationships?

sql-server - 什么时候更喜欢悲观的事务隔离模型而不是乐观的模型?

database - 正在分隔数据库字段中的数据 ok