Dea*_*lze 5 database database-design
我只想避免一次只在表中存储街道地址的方法就重新发明轮子。唯一性约束在某些常见情况下不起作用:
100 W 5th Ave
100 West 5th Ave
100 W 5th
200 N 6th Ave Suite 405
200 N 6th Ave #405
Run Code Online (Sandbox Code Playgroud)
在插入表之前,我可以实现一些业务逻辑或触发器以对所有字段进行规范化,并在表中的多个字段之间使用唯一性约束,但是很容易错过某些情况,因为某些情况的街道地址会有所不同。
最好是每个地址的通用标识符,也许基于GPS坐标。在存储新地址之前,请查找其GUID,并查看该GUID是否已存在于“地址”表中。
诸如Mapquest,Postal Serice,FedEx或美国政府之类的组织可能拥有这样的系统。
有没有人找到一个好的解决方案?
现在是我的地址表(由JPA生成):
CREATE TABLE address
(
id bigint NOT NULL,
"number" character varying(255),
dir character varying(255),
street character varying(255),
"type" character varying(255),
trailingdir character varying(255),
unit character varying(255),
city character varying(255),
state character varying(255),
zip integer,
zip4 integer,
CONSTRAINT address_pkey PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
我选择了USC WebGIS服务,因为他们的 Web 服务界面很好并且很容易注册。
不过,出于多种原因,地理编码不适合作为街道地址的唯一键。例如,地理编码无法区分公寓大楼或公寓楼中的不同单元。
我决定使用地理编码结果中解析的地址,并对街道号码、街道名称、单位、城市、州和邮政编码施加唯一约束。它并不完美,但它适合我正在做的事情。