Sql server 具有唯一地址的数据库地址表设计

Sql server 具有唯一地址的数据库地址表设计,sql-server,database,google-maps-api-3,google-places-api,Sql Server,Database,Google Maps Api 3,Google Places Api,我正在设计一个数据库,其中有与客户相关的地址。根据面向对象编程的规则,一个地址可以独立存在,没有客户,许多客户可以有相同的地址,一个客户也可以有多个地址。所以我在客户和地址之间建立了多对多关系。我的表格如下: 现在,这种设计要求Address表中的地址是唯一的,以符合现实世界,这就是我现在面临的挑战。 我想到了一个解决方案,就是使用它并从中查找地址。如果输入的地址是新的,那么我将把它插入address表中,如果它已经存在于数据库中,那么我将只在CustomerAddress表中插入记录以进行关

我正在设计一个数据库,其中有与客户相关的地址。根据面向对象编程的规则,一个地址可以独立存在,没有客户,许多客户可以有相同的地址,一个客户也可以有多个地址。所以我在客户和地址之间建立了多对多关系。我的表格如下:

现在,这种设计要求Address表中的地址是唯一的,以符合现实世界,这就是我现在面临的挑战。 我想到了一个解决方案,就是使用它并从中查找地址。如果输入的地址是新的,那么我将把它插入address表中,如果它已经存在于数据库中,那么我将只在CustomerAddress表中插入记录以进行关联。现在我有两个问题:

1)我想到的解决方案有效吗?我一直怀疑它,因为我在任何地方都没有见过这样的实现


2)上述解决方案只能解决问题,直到地址行1而不是地址行2,地址行2通常是楼层和公寓/办公室/商店编号。我不知道有哪种API为AddressLine2提供了唯一的查找值。那么,我如何保持地址行1地址行2的组合唯一?

您不能简单地使用现有查询吗?您的数据结构看起来不错。保持它们唯一性的问题是简单地为AddressLine1和AddressLine2添加唯一约束。您所描述的问题与清理地址数据有关。您可以使用自动完成帮助,但它不会强制用户使用自动完成地址。清理地址对于运输指标来说是一个巨大的问题,如果你找到了一个简单的方法,请分享。据我所知,您要么接受脏数据,要么对街道、邮政编码、城市、州、单位等进行更精细的处理。。。你仍然可以有肮脏的数据。@AndrewO'Brien是的,你说得对。我所说的唯一地址实际上是指干净的数据。因为一个地址可以以多种不同的方式键入,例如,美国马萨诸塞州剑桥市第一街51号或美国马萨诸塞州剑桥市第一街51号。我同意你的粒度观点。您能提供这样一个将地址分解为细粒度组件的示例吗?假设它是一个美国地址,我会有街道、城市、州、邮政编码的条目,另外还有一个单元/套房/办公室的条目。这不会清理它,但可以让您构建自己的逻辑来清理它,或者将它提供给一个为您清理它的API。这些都是在线提供的,但不是免费的。你可以看看他们是如何分解的。祝你好运。