Буду благодарен за любые советы, которые кто-либо имеет в отношении:
Как вы эффективно храните gps (или любое число с плавающей запятой) в поле varchar, которое может быть проиндексировано .
Справочная информация:
Мы разрабатываем систему управления контентом, которая может эффективно хранить файлы любого типа вместе с набором метаданных. Этот файл / метаданные хранятся следующим образом:
file_table metadata_table
---------- --------------
file_id -> file_id (number)
file_name metadata_id (number)
file_location metadata_value (varchar)
...etc
Меня попросили обеспечить поддержку файлов геотегирования (т. Е. Хранить координаты GPS в виде метаданных). Кроме того, мы также хотели бы поддерживать файлы с несколькими геотегами.
Теперь, насколько я вижу, у меня есть несколько вариантов:
1) Сохранение широты и долготы в пределах одного и того же metadata_value varchar (например, '52 .4343242, -1.32324 ').
Как бы я запросил эту строку? Есть ли что-нибудь умное, что я могу сделать с sql, что позволит мне запрашивать «компоненты» строки? Могу ли я сохранить координаты в виде строки XML - это поможет? Как это можно эффективно проиндексировать?
2) Сохранить широту и долготу в виде отдельных строк в metadata_table .
Это решение решает проблему поддержки более простых запросов (за счет сложности и громоздкости, особенно когда я буду хранить несколько геотег в одном файле), однако я все еще сталкиваюсь с проблемой индексации.
Я могу преобразовать varchars в число с плавающей точкой при запросе, однако я не уверен, будет ли это игнорировать индекс, который у меня есть для metadata_table.metadata_value , и вместо этого будет выполнять сканирование таблицы.
3) Создание выделенных полей с плавающей запятой для хранения данных GPS.
Это наименее желательный вариант, поскольку он идет вразрез с дизайном, добавляя поля базы данных для определенных метаданных. Не все файлы будут хранить данные GPS.
Любая помощь или совет приветствуется.