Customer Table - CustomerId, Street, City, State, Zipcode
ZipCode Table - ZipCodeId, ZipCode, CityId, StateId
然而,我对此感到困惑的是 - 我应该使用CityId,StateId和ZipCodeId还是应该将CityName,StateName和ZipCode放在Customer表中?这些应该设置为引用城市,州和邮政编码表中的外键吗?我应该完全摆脱City Table并在ZipCode表和Customer表中重复城市名称吗?
答案 0 :(得分:1)
如果可以有多个城市拥有相同的邮政编码,那么你有一个更好的解决方案,你有一个城市表,你有 zipcode 列(只有varchar或int列,没有外国的键)。在城市表格中,您可以从州表中保留外键。最后,您应该将 CityId 保留在客户表中。
原因:City和State表是小表,加入它们就不会产生性能问题,只需在它们上面做索引就可以了。一切都会好的。
答案 1 :(得分:1)
名义上,客户表应仅包含街道地址和邮政编码ID(不是城市或州)。注意,这种规范化方案的数据输入不一定是直接的;人们期望输入城市,州,邮政编码(或者只是邮政编码),并且应用程序将在应用程序上正确映射,并在必要时消除歧义。
我也住在两个城市使用的邮政编码中;他们甚至碰巧在不同的县,这导致了我有时居住在哪个县的问题。其中一个城市有多个其他邮政编码;另一个只有(部分)一个邮政编码。没有问题:对于同一个ZipCode,您将有两个单独的ZipCodeID条目,每个城市一个。请注意,这意味着不是ZipCode表中ZipCode列的唯一索引。
你在哪里存储Zip + 4方案的+4?好问题!这属于街道地址。
答案 2 :(得分:0)
您的设计对我来说没问题 - 在客户表中保留完整地址。只需确保您允许在具有相同邮政编码但不同城市的ZipCode表中输入多个条目(即不要使ZipCode.ZipCode唯一密钥)。
邮政编码只与邮件系统有关,绝对没有 与政治边界有关。一些城市将被更多人覆盖 比一个邮政编码;一些邮政编码将覆盖多个城市。
当你打电话给保险公司并且在告诉他们邮政编码后他们会给你非常糟糕的报价 - 这只是因为你似乎生活在马路对面的不同城市,并且那个城市的邮政编码完全相同,但是很糟糕犯罪情况。
答案 3 :(得分:0)
您还可以将USPS地址更正合并到您的应用程序中,以标准化并保持此信息的标准化。请参阅:https://ribbs.usps.gov/index.cfm?page=aec