5 votos

Dominios de valores codificados en PostgreSQL

En el trabajo, utilizo las geodatabases de ArcGIS y uso mucho los dominios de valores codificados.

Ahora estoy trabajando con PostgreSQL y estoy tratando de crear el mismo tipo de modelo de datos que haría en, por ejemplo, un archivo gdb. Y eso incluye los dominios.

Los dominios de valores codificados no tienen equivalente a los dominios de PostgreSQL.

Para ambos puedo establecer restricciones de valor pero los primeros también impiden repetir cadenas largas mediante el uso de códigos sin perder visualmente esa información (se ve la cadena, no el código).

Eso es exactamente lo que quiero lograr y no encuentro la manera de hacerlo. Tal vez no tiene sentido y es sólo un problema de concepto como tal vez el modelado de datos PostgreSQL simplemente tiene una manera de abordar o tratar con esta situación que ignoro.

¿Esto se suele hacer en PostgreSQL? ¿Se puede hacer sin demasiado código adicional? ¿Tiene algún sentido? Por favor, ilumínenme sobre esto.

Un ejemplo ilustrativo,

Tengo una tabla con todos los árboles de una ciudad:

árboles_de_ciudad

tree_id | t_location    | t_species      | t_health
--------+---------------+----------------+--------------
234     | Arc Cie Av.   | Populus nigra  | Healthy
235     | Arc Cie Av.   | Populus nigra  | Deceased
236     | 27th May Str. | Salix alba L.  | Healthy
237     | Monolith Sqr. | Quercus alba   | Healthy

Para los nombres de las especies y el estado de salud utilizo dominios de valores codificados. El uso de los dominios es transparente para el usuario: en la tabla city_trees veo las descripciones de los dominios a pesar de que en realidad están poblados con valores codificados.

domSpecies

code  | description
------+-----------------
PN    | Populus nigra
SAL   | Salix alba L.
QA    | Quercus alba

domHealthStatus

code | description
-----+-----------------
H    | Healthy
D    | Declining
L    | Deceased
C    | Cut

1voto

CamSpy Puntos 106

Tienes razón en que no hay un equivalente en PostgreSQL al dominio de valores codificados disponible en ArcGIS.

La opción más sencilla puede ser simplemente crear tablas de búsqueda, una para cada dominio, y luego asignar el código y la descripción adecuadamente para cada uso. Incluso puede aplicar restricciones a las columnas de código y descripción para garantizar la validación de las entradas.

He aquí un ejemplo que sustituye a uno de sus dominios en la pregunta:

-- Create lookup table to replace the code/value domain of the same name
CREATE TABLE domHealthStatus
(
    code CHARACTER(1) NOT NULL PRIMARY KEY
        CHECK (code IN ('H', 'D', 'L', 'C')),
    description VARCHAR(50) NOT NULL
);

-- Populate the lookup table with unique code/value pairs
-- Note the use of check and primary key constraints to enforce uniqueness
INSERT INTO domHealthStatus VALUES
    ('H', 'Healthy'),
    ('D', 'Declining'),
    ('L', 'Deceased'),
    ('C', 'Cut');

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X