【发布时间】:2013-10-05 00:37:15
【问题描述】:
我有一个存储一些 POI 的表,所以它有一些 id、名称、纬度和经度。问题是,我不想在数据库中拥有相同坐标的 POI 两次。我想到的可能性是:
- 将主键设置为纬度和经度的组合...但它们是浮点数,所以这不是一个好主意
- 创建列 INT(16)(8 个纬度数字和 8 个经度数字合并在一起),但这就像复制数据一样,会占用大量空间
- 对经纬度做一些hash,设置为主键,但怕是大数
怎么做,不会占用db太多空间?
【问题讨论】:
-
1.为什么它们是浮动的? DECIMAL 不合适吗? 2. 我建议你将它们设为 DECIMAL 并在 (lat,lon) 上设置一个 UNIQUE KEY。除非您确定坐标永远不会“移动”,否则最好不要将它们用作 PK。
-
如果您的坐标是浮点数据并且它们在之前的计算中有错误,这意味着理想情况下相等的坐标不相等,那么将它们转换为另一种形式或散列它们通常不会产生相等结果。您必须首先确定坐标是否指向同一点。为什么您认为您的浮点数据在同一点上可能没有相等的值?
标签: mysql sql floating-point coordinates