2011-02-11 6 views
6

En la definición de la tabla vi:de almacenamiento de base de datos de los valores de longitud/latitud en SQL Server: decimal (? 2,)

Latitude  -> varchar(50) 
Longitude -> nvarchar(50) 

Inmediatamente, obviamente, me preguntó el pensamiento detrás de esto - estar completamente seguro de estos valores de hecho son numéricos por naturaleza. Para resumir: postulé que estos serían numéricos, decimales de hecho, y que descartaríamos la filosofía de 'pensar en cuerdas'.

ya por los cuernos de mi dilema, acabo de ir adelante y proporcionado:

Latitude -> decimal(2, 4) 

Pero espera un segundo, 4 no está bien, ¿verdad? Derecha. Así que pensé que subiría el umbral antes de darme cuenta (en una fracción de segundo podría agregar) que 6 o 8 podrían no cortarlo tampoco. Entonces, lo primero es lo primero ...

¿Debo insistir en que lo hagamos de esta manera? Y si es así ...

¿A qué precisión deben almacenarse estos valores para garantizar que podamos conservar todo el valor que se va a insertar? Por ejemplo, ¿hay algo predefinido por especificación?

No solo quiero usar algo como Latitude -> decimal(2, 16) simplemente para que sea tan defectuoso como decimal(2, 2) en principio. Y una pregunta similar se plantea específicamente para Longitude, pero supongo que la respuesta a una bastará para la otra, es decir, decimal(3, answer).

Estamos utilizando MSSQL Server 2005.

Parece Estoy educando a mí mismo con SQL Server por la experiencia manual y, por tanto, la prestación partes de esta pregunta irrelevante: Sólo puedo usar decimal(x, max(x)) no decimal(x, y) de todos modos! Dejará la pregunta como está para la entrada.

+2

¿Qué versión de SQL Server estás usando? 2008 tiene algunos tipos geoespaciales nativos incorporados, tanto para escenarios cartesianos como elipsoidales. Se llaman geometría y geografía, respectivamente. –

+0

2008? Deseo. 2005. –

+0

Usa tipos decimales, mira el enlace de Cade Roux –

Respuesta

19

decimal (2, 4) significa 2 dígitos totales de precisión y 4 detrás de la decimal. SQL Server no te permitirá hacerlo, pero creo que sería significa que puedes almacenar valores de -0.0099 a 0.0099.

Recomendaría decimal (9, 6). Esto almacenará con una precisión de hasta 1/6th de una pulgada en el ecuador. Al usar 9 o menos ya que la precisión requiere 5 bytes de almacenamiento, usar 10-19 requiere 9 bytes.

1

La precisión máxima de decimales en el servidor sql es actualmente 38. La escala puede ser de hasta 38. En su máximo, un decimal tomará 17 bits, mientras que varchar ocupará cualquier longitud que sea más 2. Entonces si fuiste con un varchar (38), al máximo estás tomando 40 bits de datos. La otra cara de la moneda es que un varchar no tiene un tamaño tan limitado como el decimal. Entonces, lo que realmente necesita hacer es calcular cuántos puntos decimales va a permitir y luego calcular su tipo de datos.

Source Info

Cuestiones relacionadas