Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

¿Es buena practica usar tipos array para este problema?

Estas en el tema de ¿Es buena practica usar tipos array para este problema? en el foro de PostgreSQL en Foros del Web. Pero expongo mi problema (llevo un par de meses enredando con esto): Tengo, de forma esquemática estas dos tablas: tabla parcelas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: ...
  #1 (permalink)  
Antiguo 15/07/2015, 05:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
¿Es buena practica usar tipos array para este problema?

Pero expongo mi problema (llevo un par de meses enredando con esto):

Tengo, de forma esquemática estas dos tablas:

tabla parcelas

Código SQL:
Ver original
  1. id | parcela
  2. -------------
  3. 1  | parcela1
  4. 2  | parcela2
  5. 3  | parcela3

tabla cultivos

Código SQL:
Ver original
  1. id | id_parcela | cultivo | superficie
  2. __________________________________
  3. 1  | 1          |trigo    | s1
  4. 2  | 1          |cebada   | s2
  5. 3  | 2          |maiz     | s3
  6. 4  | 3          |trigo    | s4
  7. 5  | 3          |trigo    | s5

La causa de que las filas 4 y 5 tengan el mismo cultivo y se referencien a la misma parcela es porque el dueño puede plantar cosas diferentes o lo mismo, pero se mantienen en todo momento esas dos "subparcelas".

Entonces cuando quiero hacer una vista que sea una selección por cultivos (por ejemplo trigo) tendría algo así:

Código SQL:
Ver original
  1. id | parcela  | cultivo | superficie
  2. _________________________________
  3. 1  | parcela1 | trigo   | s1
  4. 3  | parcela3 | trigo   | s4
  5. 3  | parcela3 | trigo   | s5

Y me quedo sin mi clave primaria, ya que se repite.

Podría añadir una id diferente a la vista, pero eso enmascararía el problema de que la parcela3 está repetida.
Esto es un problema ya que dichas parcelas almacenan datos geométricos para abrirse posteriormente con un programa de GIS, por lo que si creo diferente id a la vista, se superpondrían dos parcelas.

Entonces pienso que la solución sería:
1.- Crear una función o query que me convirtiera lo anterior en:
Código SQL:
Ver original
  1. id | parcela  | cultivo | superficie
  2. _________________________________
  3. 1  | parcela1 | trigo   | s1
  4. 3  | parcela3 | trigo   | s4+s5

2.- Que las parcelas tuvieran un campo array para poder almacenar las diferentes subsuperficies y cultivos.


En la ayuda de postgresql advierten de que muchas veces el usar array es señal de un mal diseño, y que es mejor crear tablas siempre que sea posible (al menos eso he traducido, que mi inglés es muy malo).

Así que mis preguntas son:
1.-¿Cual es la mejor forma de diseñar esta situación? Yo estaba decidido a hacerlo con los arrays, pero parece que es una forma de alejarse del modelo relacional que a fin de cuentas es la forma "natural" de operar con BBDD (además de que tendría que ver cómo hago para lidiar con los arrays en BBDD, que son casi totalmente desconocidos para mi)

2.- Si es mejor seguir con tablas separadas...¿como podría llegar al esquema que he puesto antes? Una función, una query....porfa un poco de ayuda para arrancar, porque estoy totalmente perdido.

Gracias como siempre!
__________________
Mi calculadora en Qt
  #2 (permalink)  
Antiguo 15/07/2015, 08:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: ¿Es buena practica usar tipos array para este problema?

Bueno, la consulta para llegar a la solución 1 ya la he conseguido....algún día aprenderé BBDD

Código SQL:
Ver original
  1. SELECT parcela, cultivo, SUM(superficie) AS suma FROM parcelas, cultivos WHERE parcelas.id=cultivos.id_parcela AND cultivo='trigo' GROUP BY parcela,cultivo;

Me queda la duda de si es mejor resolver esto con columnas de arrrays...o incluso definir un tipo propio, como estoy viendo en la guía de postresql.

De hecho voy entendiendo el concepto de BBDD orientada a objetos!
__________________
Mi calculadora en Qt

Etiquetas: postgres, tabla, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:51.