Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/07/2015, 05:00
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
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