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 originalid | parcela
-------------
1 | parcela1
2 | parcela2
3 | parcela3
tabla cultivos
Código SQL:
Ver originalid | id_parcela | cultivo | superficie
__________________________________
1 | 1 |trigo | s1
2 | 1 |cebada | s2
3 | 2 |maiz | s3
4 | 3 |trigo | s4
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 originalid | parcela | cultivo | superficie
_________________________________
1 | parcela1 | trigo | s1
3 | parcela3 | trigo | s4
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 originalid | parcela | cultivo | superficie
_________________________________
1 | parcela1 | trigo | s1
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!