存储下拉菜单的信息

时间:2010-04-06 05:36:17

标签: database-design

假设您正在构建一个HTML表单,并且您希望有两个或更多下拉菜单,从第一个选择选项后,将填充第二个菜单,依此类推。例如,选择country会显示该国家/地区的provinces列表,该列表会列出cities

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

2 个答案:

答案 0 :(得分:2)

我会使用规范化表单,因为(通常使用规范化表单)更新会更容易,更安全。

想象一下,“加拿大”的名字改为“美国的帽子”。使用规范化表单,您可以更新一行,其依赖的省份和城市仍然准确。使用非规范化形式,您的更新将不得不为加拿大的每个城市更新表中的一行,效率较低(并且,[可悲的]在某些RDBMS中,而不是原子)。

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

顺便说一下,您可能会考虑丢失“id”列(可能是自动生成的整数键?)并使用自然主键:可能是国家/地区的国家/地区代码,省份的“名称”和经度/纬度列对于城市(假设“名称”不能提供必要的区分)。

答案 1 :(得分:1)

每个项目级别的平面表怎么样,其属性可以告诉您每个项目属于哪个更高级别的类别。

然后您的查询可能会出现:

SELECT name FROM countries
SELECT name FROM states WHERE country="selection"
SELECT name FROM cities WHERE state="selection"