Database design 基于位置的应用程序

Database design 基于位置的应用程序,database-design,location,database,Database Design,Location,Database,我正在开发一个应用程序,允许人们在城市的不同区域发布信息(大约10个城市)。你们知道有任何现有的(规范化的)数据库/数据集包含这种信息吗?或者我需要从头开始创建一个?非常感谢任何指点建议 您可以将其保存为两个整数经度和纬度(我认为,如果我的地理位置正确的话)在这种情况下,规范化有点问题,因为原子性要求指定单个属性存储给定域的单个值,因此在查看坐标系时,这里的情况变得非常模糊。有几个选择。每一个都是完全标准化的 独立积分表 在这种方法中,您将有一个如下表(PostgreSQL表示法): 记录将进入

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

您可以将其保存为两个整数经度和纬度(我认为,如果我的地理位置正确的话)

在这种情况下,规范化有点问题,因为原子性要求指定单个属性存储给定域的单个值,因此在查看坐标系时,这里的情况变得非常模糊。有几个选择。每一个都是完全标准化的

独立积分表

在这种方法中,您将有一个如下表(PostgreSQL表示法):

记录将进入此表,并在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.22222294.4444)
,数据库管理系统可能支持不同的坐标系。这些可以包括平面坐标、球面坐标等。选择一个坐标系是非常重要的,因为它会影响到在距离计算中得出的单位。例如,如果使用球坐标,则距离通常以度为单位测量,因此如果要转换为英里或公里,则需要做额外的工作

数字数组方法

可以将点表示为数字数组。这通常是一种没有本机点类型的变通方法。这符合1NF,因为每个数组表示单个位置的二维或三维坐标。有序性很重要,因此数组作为一个整体表示一个值(即,它是一个元组,而不是一个集合或一个包)。这与上述点类型的方法相同,只是通常您必须自己进行距离计算,并且点看起来像
{134.222222,94.4444}


最后,由于有这么多完全规范化的不同方法,数据库设计的问题实际上受到RDBMS和用例的限制。您可能找不到完全适合您的用例的现成设计。

您是在寻找针对此类信息设计的数据库模式,还是在寻找具有内容位置的现有数据库。如果是后者,您想要什么样的东西?是的,db模式可以工作。我正在考虑一个模式,将城市与城市的特定区域联系起来。例如,纽约(市中心、市中心、住宅区、切尔西等)。我想知道是否要这样做的基础上,邮政编码和地图的地区名称…我的应用程序将列出不同地区的企业基本上…谢谢你的回答!就像这个网站所做的那样:
 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)
 );