Разработка базы данных Mysql - Хранение длинных и нескольких лат - PullRequest
3 голосов
/ 23 июня 2009

У меня есть таблица базы данных mysql, в которой будут храниться места для зданий, событий и некоторых других вещей. Все локации хранятся в одной таблице и связаны со зданиями, событиями и т. Д. Через их собственную таблицу «многие ко многим». Таким образом, я могу просто отображать точки на карте, а также разрешать фильтрацию и т. Д.

Однако проблема заключается в том, что некоторые вещи имеют одно местоположение, например 1 лат, длинное, но у некоторых, например, у дорожки, есть несколько длинных длинных позиций, и что-то вроде большого стадиона может иметь многоугольник. Они также хранятся в виде списка значений lat, long с первым и последним одинаковыми.

Мне интересно, как мне хранить это в базе данных mysql. Первоначально у меня был только столбец для lat, long и id для таблицы поиска. Должен ли я иметь ДРУГОЙ справочную таблицу для координат или сериализовать данные перед тем, как каким-либо образом поместить их в БД, или я должен просто сохранить всю строку в одном поле LAT1, long1 LAT1, long1; LAT2, long2; LAT1, long1

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 23 июня 2009

Я бы не нормализовал данные с самого начала, поместив целый «сериализованный» многоугольник в одно поле.

Скорее, у меня была бы таблица Polygons (с идентификатором многоугольника и, возможно, вспомогательной информацией для каждого многоугольника, такой как фактический замкнутый многоугольник или просто ломаная линия), хотя это может быть альтернативно представлено в следующей таблице, если последняя точка, равная первой для определенного многоугольника), и таблица PointsInPolygon (с координатами точки, внешним ключом идентификатора многоугольника, номером вершины внутри многоугольника - последние два вместе являются уникальными).

Нормализация сделает (как обычно) вашу жизнь намного проще для специальных запросов (включая в этом случае «многоугольники около X», точки в многоугольнике и т. Д.). Опять же, как обычно, вы можете позже добавить избыточные денормализованные значения, если и когда вы определите, что какой-то конкретный запрос действительно должен быть оптимизирован (при некоторых затратах на обновления таблиц, проверки целостности и т. Д.). В этом отношении геоданные не сильно отличаются от других видов.

1 голос
/ 23 июня 2009

Поскольку вы не выполняете поиск местоположений и используете (я предполагаю) API Карт Google, простейшим решением, вероятно, будет кодирование списка широт / долгот в виде JSON и сохранение в varchar столбец.

Вы можете просто вывести JSON прямо из базы данных для использования вашего кода API Карт Google. Я бы предложил вам использовать некоторую простую структуру JSON, например: ["point",1.23456,2.34567] или ["line",1.23456,2.34567,3.45678,4.56789] и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...