LIMITACIONES DE PostgreSQL

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

Las restricciones pueden estar a nivel de columna o de tabla. Las restricciones de nivel de columna se aplican a una sola columna, mientras que las restricciones de nivel de tabla se aplican a toda la tabla. Definir un tipo de datos para una columna es en sí mismo una limitación. Por ejemplo, una columna de tipo FECHA restringe la columna a fechas válidas.

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

  • Restricción NOT NULL – Asegura que la columna no pueda ser NULL.

  • Restricción única – Asegura que todos los valores de la columna sean diferentes.

  • Clave primaria – Identifica de forma única cada fila / registro en la tabla de la base de datos.

  • Clave externa – Limita los datos basados ​​en columnas en otras tablas.

  • VERIFICAR limitación – La restricción CHECK garantiza que todos los valores de una columna cumplan determinadas condiciones.

  • Limitación de excepciones – La restricción EXCLUDE asegura que al comparar dos filas cualesquiera de 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 sea NULL, debe definir dicha restricción en esa columna, especificando que NULL ya no está permitido en esta columna. Una restricción NOT NULL siempre se escribe como una restricción de columna.

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

Ejemplo

Por ejemplo, la siguiente declaración de PostgreSQL crea una nueva tabla denominada COMPAÑÍA1 y agrega cinco columnas, tres de las cuales, ID, NOMBRE y EDAD, indican que no se aceptan nulos:

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 el mismo valor en una columna específica. Por ejemplo, en la tabla EMPRESA, 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 denominada 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 PRIMARY KEY

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

Los usamos para representar las filas de una tabla. Las claves primarias se convierten en claves externas en otras tablas cuando se crean relaciones entre tablas. Debido a la «supervisión de codificación de larga data», las claves primarias en SQLite pueden ser NULL. Esto no se aplica a otras bases de datos.

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

Una tabla solo puede tener una clave principal, que puede constar de uno o más campos. Cuando se utilizan varios campos como clave principal, se denominan clave compuesta

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

Ejemplo

Ya ha visto varios ejemplos arriba en los que hemos creado una tabla COMAPNY4 con un 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 de una columna (o 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 denominada DEPARTMENT1 que agrega tres columnas. La columna EMP_ID es una clave externa y se refiere al campo 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)
);

VERIFICAR limitación

La restricción CHECK permite una condición para verificar el valor ingresado 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 un SALARIO 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)
);

Limitación de excepciones

Las restricciones de excepción garantizan que si se comparan dos cadenas en las columnas o expresiones especificadas utilizando los operadores especificados, al menos una de esas 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 la 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í, USANDO Gist es el tipo de índice que se creará y utilizará para la aplicación.

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

Dado que hemos establecido que la edad debe 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).

Eliminando restricciones

Para eliminar la restricción, debe conocer su nombre. Si se conoce el nombre, es fácil deshacerse de él. De lo contrario, debe averiguar el nombre generado por el sistema. Aquí es donde el comando psql d table name resulta útil. La sintaxis general es:

ALTER TABLE table_name DROP CONSTRAINT some_name;

🚫