2011-07-09 52 views
1

我有一个引用和邮政编码表。事实上,一个城市可以有多个邮政编码,所以我应该如何设置数据库,以便在输入城市名称时获得正确的拉链,或者在输入邮编时获取正确的城市。在数据库中设置此数据的最佳方式是什么?

这应该是一个包含所有数据的表,还是三个有城市的地方,一个有拉链,第三个有正确的关联?

+1

什么是“一个城市”?是否不仅仅是城市的文字名称?什么是“所有数据”?这是一个很远的办法,但是在邮政编码中是否还有更多的数据而不仅仅是一个数字? –

+0

邮政编码也可以与多个城市相关联。对于边界重叠状态边界的城市,还有多个州。邮政编码与邮递员如何驾驶其路线有关;地理是巧合。 –

回答

3

我只使用一个邮政编码表作为主键和城市的索引(加快搜索)。如果您有多对多的关系(一个邮政编码可以有多个城市),那么三表解决方案可能会很有用,但除此之外,我认为这只是不必要的复杂性。

+0

这是非常特定于域的,但不是很可能两个城市共享相同的邮政编码吗?在不同的国家呢? – phtrivier

+0

phtrivier,你是对的,这是特定领域的,所以根据他/她的需要,我的答案可能不是最好的。 –

+0

嗯,我非常倾向于多对多,因为这将覆盖具有相同zip的多个城市,反之亦然。 现在我坚持与如何把这一张桌子上的任务,并将其分成三个:) –

0

在Kissimmee居住并为UPS工作(记忆邮政编码),佛罗里达州Kissimee和Celebration的城市邮政编码为34747。我个人使用多个表格:国家,地区(州)和地区(城市)。国家表格中有国家名称和其他相关数据。地区表基本上是相同的,但具有国家名称的外键。地方表具有区域名称的外键,以及邮政编码和其他相关数据。我在地方表(地名,区域,邮政编码),区域表(名称,国家)和国家表格(名称)中创建了一个引用多个列的主键,以帮助提高性能。因此,我的地方表格可以处理(基西米,FL,34747)和(Celebration,FL,34747)以及(Orlando,FL,32801)和(Orlando,FL,32802)。无论如何,如果我通过邮政编码或城市搜索,我会处理返回多个结果。然而,根据您的源数据是如何获取的,您可能需要在地方表中创建一个布尔型“大都市”列,以表明(在我的示例中)基西米是Celebration的metrolopitan区域,并且每个邮政编码只允许一个大城市。

+0

这与@Emil建议的基本相同。对主键应该如何设置稍作修改,以便我接受他的答案。 –

相关问题