PostgreSQL - RESTRICCIONES

Las restricciones son las reglas que se aplican a las columnas de datos de la tabla. Se utilizan para evitar que se ingresen datos no válidos en la base de datos. Esto asegura la precisión y confiabilidad de los datos en la base de datos.

Las restricciones pueden ser de nivel de columna o de tabla. Las restricciones a nivel de columna se aplican solo a una columna, mientras que las restricciones a nivel de tabla se aplican a toda la tabla. Definir un tipo de datos para una columna es una restricción en sí misma. Por ejemplo, una columna de tipo FECHA limita la columna a fechas válidas.

Las siguientes son restricciones de uso común disponibles en PostgreSQL.

  • NOT NULL Constraint - Asegura que una columna no pueda tener un valor NULO.

  • UNIQUE Constraint - Garantiza que todos los valores de una columna sean diferentes.

  • PRIMARY Key - Identifica de forma única cada fila / registro en una tabla de base de datos.

  • FOREIGN Key - Restringe los datos basados ​​en columnas en otras tablas.

  • CHECK Constraint - La restricción CHECK asegura que todos los valores de una columna satisfagan determinadas condiciones.

  • EXCLUSION Constraint - La restricción EXCLUDE asegura que si dos filas cualesquiera se comparan en las columnas o expresiones especificadas utilizando los operadores especificados, no todas estas comparaciones devolverán VERDADERO.

Restricción NOT NULL

De forma predeterminada, una columna puede contener valores NULL. Si no desea que una columna tenga un valor NULL, entonces necesita definir tal restricción en esta columna especificando que NULL ahora no está permitido para esa columna. Una restricción NOT NULL siempre se escribe como una restricción de columna.

Un NULL no es lo mismo que sin datos; más bien, representa datos desconocidos.

Ejemplo

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla llamada EMPRESA1 y agrega cinco columnas, tres de las cuales, ID y NOMBRE y EDAD, especifican no aceptar valores NULL -

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Restricción ÚNICA

La restricción UNIQUE evita que dos registros tengan valores idénticos en una columna en particular. En la tabla EMPRESA, por ejemplo, es posible que desee evitar que dos o más personas tengan la misma edad.

Ejemplo

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla llamada EMPRESA3 y agrega cinco columnas. Aquí, la columna EDAD se establece en ÚNICA, por lo que no puede tener dos registros con la misma edad:

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

Restricción de CLAVE PRIMARIA

La restricción PRIMARY KEY identifica de forma única cada registro en una tabla de base de datos. Puede haber más columnas ÚNICAS, pero solo una clave principal en una tabla. Las claves primarias son importantes al diseñar las tablas de la base de datos. Las claves primarias son identificadores únicos.

Los usamos para referirnos a filas de tablas. Las claves primarias se convierten en claves externas en otras tablas, al crear relaciones entre tablas. Debido a una 'supervisión de codificación de larga data', las claves primarias pueden ser NULL en SQLite. Este no es el caso de otras bases de datos

Una clave primaria es un campo en una tabla, que identifica de forma única cada fila / registro en una tabla de base de datos. Las claves primarias deben contener valores únicos. Una columna de clave principal no puede tener valores NULL.

Una tabla solo puede tener una clave principal, que puede constar de uno o varios campos. Cuando se utilizan varios campos como clave principal, se denominancomposite key.

Si una tabla tiene una clave primaria definida en cualquier campo, no puede tener dos registros que tengan el mismo valor de ese campo.

Ejemplo

Ya ha visto varios ejemplos arriba donde hemos creado la tabla COMAPNY4 con ID como clave principal -

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Restricción de CLAVE EXTRANJERA

Una restricción de clave externa especifica que los valores en una columna (o un grupo de columnas) deben coincidir con los valores que aparecen en alguna fila de otra tabla. Decimos que esto mantiene la integridad referencial entre dos tablas relacionadas. Se llaman claves foráneas porque las restricciones son foráneas; es decir, fuera de la mesa. Las claves externas a veces se denominan clave de referencia.

Ejemplo

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla llamada COMPANY5 y agrega cinco columnas.

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla llamada DEPARTMENT1, que agrega tres columnas. La columna EMP_ID es la clave externa y hace referencia al campo de ID de la tabla COMPANY6.

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

COMPROBAR Restricción

La restricción CHECK habilita una condición para verificar el valor que se ingresa en un registro. Si la condición se evalúa como falsa, el registro viola la restricción y no se ingresa en la tabla.

Ejemplo

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla llamada COMPANY5 y agrega cinco columnas. Aquí, agregamos un CHEQUE con la columna SALARIO, para que no pueda tener ningún SALARIO como Cero.

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

Restricción de EXCLUSIÓN

Las restricciones de exclusión aseguran que si se comparan dos filas en las columnas o expresiones especificadas utilizando los operadores especificados, al menos una de estas comparaciones de operadores devolverá falso o nulo.

Ejemplo

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla llamada COMPANY7 y agrega cinco columnas. Aquí, agregamos una restricción EXCLUDE:

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,
   AGE WITH <>)
);

Aquí, USAR gist es el tipo de índice que se debe construir y usar para la aplicación.

Necesita ejecutar el comando CREAR EXTENSIÓN btree_gist , una vez por base de datos. Esto instalará la extensión btree_gist, que define las restricciones de exclusión en tipos de datos escalares simples.

Como hemos hecho cumplir, la edad tiene que ser la misma, veamos esto insertando registros en la tabla:

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Paul', 42, 'California', 20000.00 );

Para las dos primeras instrucciones INSERT, los registros se agregan a la tabla COMPANY7. Para la tercera instrucción INSERT, se muestra el siguiente error:

ERROR:  conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL:  Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).

Eliminación de restricciones

Para eliminar una restricción, necesita saber su nombre. Si se conoce el nombre, es fácil eliminarlo. De lo contrario, debe averiguar el nombre generado por el sistema. El comando psql \ d nombre de la tabla puede ser útil aquí. La sintaxis general es:

ALTER TABLE table_name DROP CONSTRAINT some_name;