2009-09-20 3 views
3

Я создаю приложение, которое позволит людям размещать информацию в разных районах города (около 10 городов). Вы знаете какие-либо существующие (нормализованные) базы данных/наборы данных, которые имеют такую ​​информацию? Или мне нужно создать его с нуля? Любые предложения указателей очень ценятся!приложение на основе местоположения

+0

Вы ищете схему базы данных, предназначенную для этого типа информации, или для существующей базы данных с расположением вещей. Если последнее, какие вещи вы хотите? –

+0

Да, схема db будет работать. Я думаю о схеме, которая связывает города с конкретными районами города. Например, Нью-Йорк (центр города, центр города, центр города, Челси и т. Д.). Мне интересно, следует ли делать это на основе zip-кодов и сопоставлять zip-коды с именами областей ... мое приложение будет перечислять компании в разных областях в основном ... Спасибо за ваши ответы! – berto77

+0

нравится, как это делает сайт: http://www.thrillist.com/list/Boston – berto77

ответ

-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}'

В конце концов, с таким множеством разных подходов, которые полностью нормализуются, вопрос дизайн базы данных действительно ограничен вашей РСУБД и вашим прецедентом. Вероятно, вы не найдете готового дизайна, который идеально подходит для вашего использования.