2009-09-20 85 views
3

我正在构建一个应用程序,该应用程序允许人们在城市的不同区域(约10个城市)发布信息。你们是否知道有这种信息的任何现有(规范化)数据库/数据集?或者我需要从头开始创建一个?任何指针建议非常感谢!基于位置的应用程序

+0

您正在寻找专为此类信息设计的数据库模式,还是正在寻找具有事物位置的现有数据库。如果是后者,你想要什么样的东西? – 2009-09-20 18:40:58

+0

是的,一个数据库模式会起作用。我正在考虑将城市与城市特定区域连接起来的模式。例如,纽约市(市中心,中城,上城,切尔西等)。我想知道是否要根据邮政编码进行此操作,并将邮政编码映射到区域名称中......我的应用程序基本上会列出不同区域的业务......感谢您的回答! – berto77 2009-09-21 17:57:09

+0

喜欢这个网站的方式:http://www.thrillist.com/list/Boston – berto77 2009-09-21 18:02:59

回答

-2

你可以将它保存为两个整数经度和纬度(我想,如果我的地理位置是正确的)

1

归在这种情况下是有点问题的,因为原子性要求规定单个属性存储的单个值给定的领域,所以当看着坐标系统时,事情变得很模糊。有几个选项。这些都是完全正常化的。

分开的点表

在这种方法中你有一个会像(PostgreSQL的符号)的表:

CREATE TABLE geo_points (
    id bigserial not null unique, 
    x bigint, 
    y bigint, 
    z bigint, 
    primary key (x, y, z) 
); 

记录将进入此表,并评论将加盟在geo_points.id上。

点类型的方法

各种数据库都有类型存储点。如果我们假设一切都在地面上,我们不需要追踪海拔,我们可以:

CREATE TABLE tagged_location (
    id bigserial not null unique, 
    user_id int references users(id), 
    location point, 
    comment text not null, 
    primary key (user_id, location) 
); 

通过这种方法,分可能看起来像'(134.22222, 94.4444)'和不同的坐标系可以由数据库管理系统提供支持。这些可以包括平面坐标,球坐标等。选择坐标系非常重要,因为它会影响距离计算等单位。例如,如果使用球坐标,则距离通常以度数度量,所以如果要将其转换为英里或公里,则需要做额外的工作。

数值数组方法

可以代表一个点作为数字数组。这通常是没有原生点类型的解决方法。这符合1NF,因为每个数组代表单个位置的2d或3d坐标。普通性很重要,所以整个数组表示一个单一的值(即它是一个元组而不是一个包或一个包)。这与点类型的上述方法是等价的,除了通常你必须做自己的距离计算,并且点看起来像'{134.22222, 94.4444}'

最后,有很多不同的方法都完全标准化的问题数据库设计真的受到你的RDBMS和你的用例的限制。你可能不会找到完全适合你的用例的现成设计。

相关问题