如果您有关于以下问题的任何建议,我将不胜感激:
如何在可索引的varchar字段中有效存储GPS(或任何浮点数)。
背景:
我们开发了一个内容管理系统,可以有效地存储任何类型的文件以及一组元数据。该文件/元数据存储如下:
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中分别存储纬度和经度的行。
这种解决方案在支持更容易的查询问题上有益处(代价是复杂性和笨重性,特别是当我将存储每个文件的多个地理标记时),但我仍面临着索引问题。
我可以在查询时将varchar转换为浮点数,但我不确定这是否会忽略我在metadata_table.metadata_value上的索引并执行表扫描。
3. 创建专用的浮点字段来存储GPS数据。
这是最不理想的选择,因为它违反了为特定元数据添加数据库字段的设计原则。并非所有文件都会存储GPS数据。
欢迎任何帮助或建议。