如果有人提出任何建议,我将不胜感激:
如何在可以编制索引的varchar字段中有效地存储gps(或任何浮点数).
背景:
我们开发了一个内容管理系统,可以有效地存储任何类型的文件和一组元数据.此文件/元数据存储如下:
file_table metadata_table
---------- --------------
file_id -> file_id (number)
file_name metadata_id (number)
file_location metadata_value (varchar)
...etc
Run Code Online (Sandbox Code Playgroud)
我被要求提供对地理标记文件的支持(即将gps坐标存储为元数据).此外,我们还希望支持具有多个地理标记的文件.
现在据我所知,我有几个选择:
1)将纬度和经度存储在相同的metadata_value varchar中(例如'52.4343242,-1.32324').
我如何查询此字符串?有什么聪明的我可以使用sql,允许我查询字符串的"组件"?我可以将坐标存储为xml字符串 - 这会有帮助吗?如何有效地编入索引?
2)将纬度和经度存储为metadata_table中的单独行.
这个解决方案解决了支持更容易查询的问题(以牺牲复杂性和笨重为代价,特别是当我将为每个文件存储多个地理标记时),但是我仍然面临索引问题.
我可以在查询时将varchars转换为浮点数,但是我不确定这是否会忽略我在metadata_table.metadata_value上的索引并执行表扫描.
3)创建专用浮点字段以存储gps数据.
这是最不可取的选项,因为它违背设计的细节以添加特定元数据的数据库字段.并非所有文件都存储gps数据.
任何帮助或建议表示赞赏.