可能重复:
Is there common street addresses database design for all addresses of the world?
What is the “best” way to store international addresses in a database?
Best practices for consistent and comprehensive address storage in a database
我目前有四个表,即客户,联系人,设施和客户。
这些表中的每一个都有以下字段: AddressLine1,AddressLine2,City,StateOrProvince,PostalCode。
我想将地址移到单独的表格中,并且还可以指定地址类型(计费,运费,主要等)。
我的解决方案如下:
我正在寻找指导,以确定是否有比我设计的解决方案更好的解决方案。为什么每个人都在想?
编辑:此时我并不关心美国以外的任何事情,也不关心如何存储街道地址,即街道号码与整个街道地址。我担心数据库设计和表结构的立场。答案 0 :(得分:11)
我以前工作过的DBA告诉我这个宝石,它对我们来说很有用(前两个步骤与你的解决方案相同):
通过这种方式,您可以在一个表中获得所有地址,它们可以引用您需要的任何记录,您的参照完整性是完整的,并且您没有必须遍历的中间表。
缺点是,如果要将地址添加到新的对象类(例如Employee表),则必须将“EmployeeID”列添加到“地址”表中,但这非常简单。
答案 1 :(得分:2)
我们在数据库中你可能想要考虑的另一件事是在地址表上有一个通信标志,触发器强制每人只有一个地址可以作为对应关系。我们向数据库中的人发送了大量邮件,并且知道在发送邮件时我们需要使用的三个地址中的哪一个是非常宝贵的。当查询每人只抓一个地址时,它也更容易,以避免为某些报告获得每人多个记录。
答案 2 :(得分:0)
我还想添加一件事,为了简单起见,创建将地址信息扩展到表格的视图,或者你可能讨厌以这种方式设计db。
答案 3 :(得分:0)
我会考虑使用
的单个AddressLink(名称?)表LinkTypeID (Customer,Client,Contact,Facility) -- needs additional TypeID table
ID (CustomerID,ClientID...)
AddressID
AddressTypeID
AddressActive
LastUpdateUser
LastUpdateTime
添加新的地址链接类型意味着添加新的LinkTypeID w / o新的[TypeID]地址表,不需要修改任何查询,如果您正在寻找地址的所有用途(对于删除等),那么只有一个地方看。
无论如何,这与我们这样做非常相似。
哦,我们的地址(等效)表中有一个AddressLine3用于一些奇怪的异常情况。