我有一张引用和邮政编码表。因为它发生了一个城市可以有多个邮政编码所以我应该如何设置数据库,当我输入城市名称时我可以拉出正确的拉链或当我输入拉链时获得正确的城市。
这应该是一个包含所有数据的表,还是三个有城市的表,一个有拉链,第三个有正确的关联?
答案 0 :(得分:3)
我只使用一个带有邮政编码的表作为主键,并使用城市的索引(以加快搜索速度)。如果您有多对多的关系(一个邮政编码可以有多个城市),那么三表解决方案可能很有用,但我认为这只是不必要的复杂性。
答案 1 :(得分:0)
住在基西米并为UPS工作(记忆邮政编码),基西米和佛罗里达州庆典的城市有相同的邮政编码34747.我个人使用多个表:国家,地区(州)和地方(城市) 。国家/地区表有国名和其他相关数据。区域表基本相同,但具有国家/地区名称的外键。 localities表具有区域名称的外键,以及邮政编码和其他相关数据。我创建了一个主键,引用了localities表(name,region,postal_code),regions表(name,country)和countries表(name)中的多个列来帮助提高性能。因此,我的地方表可以处理(Kissimmee,FL,34747)和(Celebration,FL,34747)以及(Orlando,FL,32801)和(Orlando,FL,32802)。在任何情况下,如果我按邮政编码或城市搜索,我会处理多个结果。但是,根据获取源数据的方式,您可能需要在localties表中创建一个布尔“metropolis”列,以指示(在我的示例中)Kissimmee是庆典的metrolopitan区域,并且每个邮政编码仅允许一个大都市