这是我存储位置的架构:
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)
);
因为他们是一个hieracy我想把他们联系在一起。例如:
USA ----> country(id=1)
Washington ----> administrative_area_level3(id=54), country(id=1)
我的问题是,如果我尝试像这样菊花链表:
地点 - > administrative_area_level_1 - > administrative_area_level_2 - > administrative_area_level_3等
然后在添加“USA”之前添加“Washington,USA”之类的条目将导致添加USA。这是来自谷歌地理编码,但原始地理编码只会给我华盛顿的坐标值,而不是“美国”的坐标值。我需要为USA制作第二个地理编码请求并单独添加这些值。
就我所见,我唯一的选择就是做这样的事情:
有更好或更聪明的方法吗?
答案 0 :(得分:2)
我先说,如果您正在使用关系数据库中的层次结构,那么真的想要这本书:http://www.amazon.com/Hierarchies-Smarties-Edition-Kaufmann-Management/dp/0123877334
想想你的华盛顿问题,我想知道:你是不是很开心,因为当你真正想要的只是“华盛顿?”时,你的桌面结构迫使你为“美国”添加一个条目。
我不是100%我可以回答你的问题,但让我告诉你我是如何解决这些问题的。我几乎总是使用路径在关系数据库中建模层次结构。而不是5个表,我有一个名为“位置”,看起来像这样:
create table locations (
id varchar(10) not null primary key,
path varchar(1000) not null unique,
name varchar(40) not null,
loc varchar(255) not null, -- from your model
rad varchar(255) not null, -- from your model
);
“id”是每个位置的短标识符,“path”根据其ID和其他位置的ID来描述该位置在层次结构中的位置。
所以华盛顿看起来像这样:
id: wa
path: na/usa/wa
name: Washington
我们说华盛顿(“wa”)是美国(“美国”)的一部分,它是北美(“na”)的一部分。
现在,您可以选择是否要实际包含“usa”和“na”的行。您不必为它们添加行以插入“wa”行。你可以立即插入行,或者永远不要插入它们(并且让你的代码理解“wa”可以是“usa”的一部分而没有“usa”被完全定义),或者不立即插入它们并定期工作为路径中显示但没有自己行的任何位置运行和添加行。
我上面引用的Hierarchies一书详细介绍了这个路径策略,并包含许多SQL代码,向您展示如何操作和浏览层次结构。