这是我用于存储位置的架构:
CREATE TABLE locality (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR (100) NOT NULL UNIQUE,
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17)
);
CREATE TABLE administrative_area_level_1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR (100) NOT NULL UNIQUE,
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17)
);
CREATE TABLE administrative_area_level_2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR (100) NOT NULL UNIQUE,
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17)
);
CREATE TABLE administrative_area_level_3 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR (100) NOT NULL UNIQUE,
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17)
);
CREATE TABLE country (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR (100) NOT NULL UNIQUE,
iso VARCHAR (3) NOT NULL UNIQUE,
loc VARCHAR (255) NOT NULL,
rad VARCHAR (255)
);
由于它们是一个层次结构,我想将它们链接在一起。例如:
USA ----> country(id=1)
Washington ----> administrative_area_level3(id=54), country(id=1)
我的问题是,如果我尝试像这样菊花链表:
地点 -> 行政区域级别_1 -> 行政区域级别_2 -> 行政区域级别_3 等
然后在添加“USA”之前添加“Washington, USA”之类的条目将导致添加 USA。这是来自谷歌地理编码,但原始地理编码只会给我华盛顿的坐标值,而不是一般“美国”的坐标值。我需要为美国提出第二个地理编码请求并分别添加这些值。
据我所知,我唯一的选择是做这样的事情:
- 看看华盛顿是否已经在桌子上
- 地理编码华盛顿
- 将结果添加到 Administrative_area_level2 和国家
- 如果国家不存在,对国家进行地理编码并添加“loc”坐标
有没有更好或更聪明的方法来做到这一点?