Implementación de Integridad en Bases de Datos

Definición de Integridad de Entidad

Creación de Tabla Supplier1 con Integridad a Nivel de Columna

CREATE TABLE Supplier1(
    cod_proveedor INT PRIMARY KEY,
    nombre CHAR(100),
    direccion VARCHAR(100),
    cod_nacion INT,
    telefono CHAR(30),
    saldo NUMERIC(12,2),
    comentario VARCHAR(100),
    CONSTRAINT fk_nacion_proveedor1 FOREIGN KEY (cod_nacion) REFERENCES nacion(cod_nacion)
);

DESCRIBE Supplier1;

Creación de Tabla Supplier2 con Entegridad a Nivel de Tabla

CREATE TABLE Supplier2(
    cod_proveedor INT,
    nombre CHAR(100),
    direccion VARCHAR(100),
    cod_nacion INT,
    telefono CHAR(30),
    saldo NUMERIC(12,2),
    comentario VARCHAR(100),
    CONSTRAINT fk_nacion_proveedor2 FOREIGN KEY (cod_nacion) REFERENCES nacion(cod_nacion),
    PRIMARY KEY(cod_proveedor)
);

DESCRIBE Supplier2;

Integridad Definida Posteriormente en Supplier3

CREATE TABLE Supplier3(
    cod_proveedor INT,
    nombre CHAR(100),
    direccion VARCHAR(100),
    cod_nacion INT,
    telefono CHAR(30),
    saldo NUMERIC(12,2),
    comentario VARCHAR(100),
    CONSTRAINT fk_nacion_proveedor3 FOREIGN KEY (cod_nacion) REFERENCES nacion(cod_nacion)
);

ALTER TABLE Supplier3 MODIFY cod_proveedor INT PRIMARY KEY;
DESCRIBE Supplier3;

Integridad Referencial

Tabla PartSupp1 con Clave Compuesta

CREATE TABLE partsupp1(
    cod_parte INT,
    cod_proveedor INT,
    cantidad_disponible INT,
    costo_suministro NUMERIC(10,2),
    comentario VARCHAR(200),
    CONSTRAINT pk_partsupp1 PRIMARY KEY (cod_parte, cod_proveedor),
    CONSTRAINT fk_parte_partsupp1 FOREIGN KEY (cod_parte) REFERENCES parte(cod_parte),
    CONSTRAINT fk_proveedor_partsupp1 FOREIGN KEY (cod_proveedor) REFERENCES proveedor(cod_proveedor)
);

Nation1 con Clave Primaria y Unicidad

CREATE TABLE nation1(
    cod_nacion INT PRIMARY KEY,
    nombre CHAR(25) UNIQUE,
    cod_region INT,
    comentario VARCHAR(150),
    CONSTRAINT fk_region_nation1 FOREIGN KEY (cod_region) REFERENCES region(cod_region)
);

Verificación de Entegridad con Inserciones

INSERT INTO nation1 VALUES(40,'China',1,'');
-- La siguiente inserción fallará debido a la violación de integridad
INSERT INTO nation1 VALUES(40,'China',1,'');

Eliminación de Clave Primaira

ALTER TABLE nation1 DROP PRIMARY KEY;

Integridad Referencial entre Tablas

Creación de Region1 y Nation2 con Referencias

CREATE TABLE region1(
    cod_region INT PRIMARY KEY,
    nombre CHAR(25),
    comentario VARCHAR(150)
);

CREATE TABLE nation2(
    cod_nacion INT PRIMARY KEY,
    nombre CHAR(25),
    cod_region INT,
    FOREIGN KEY (cod_region) REFERENCES region(cod_region),
    comentario VARCHAR(150)
);

Lineitem1 con Múltiples Restricciones

CREATE TABLE lineitem1(
    cod_orden INT,
    cod_parte INT,
    cod_proveedor INT,
    numero_linea INT,
    cantidad INT,
    precio_extendido NUMERIC(8,2),
    descuento NUMERIC(3,2),
    impuesto NUMERIC(3,2),
    flag_devolucion CHAR(1),
    estado_linea CHAR(1),
    fecha_envio DATE,
    fecha_compromiso DATE,
    fecha_recepcion DATE,
    instrucciones_envio CHAR(25),
    modo_envio CHAR(10),
    comentario VARCHAR(40),
    CONSTRAINT pk_lineitem1 PRIMARY KEY (cod_orden, numero_linea),
    CONSTRAINT fk_parte_lineitem1 FOREIGN KEY (cod_parte) REFERENCES parte(cod_parte),
    CONSTRAINT fk_proveedor_lineitem1 FOREIGN KEY (cod_proveedor) REFERENCES proveedor(cod_proveedor)
);

Validaciones con CHECK

Lineitem2 con Restricciones de Dominio

CREATE TABLE lineitem2(
    cod_orden INT,
    cod_parte INT,
    cod_proveedor INT,
    numero_linea INT,
    cantidad INT,
    precio_extendido NUMERIC(8,2),
    descuento NUMERIC(3,2),
    impuesto NUMERIC(3,2),
    flag_devolucion CHAR(1),
    estado_linea CHAR(1),
    fecha_envio DATE,
    fecha_compromiso DATE,
    fecha_recepcion DATE,
    instrucciones_envio CHAR(25),
    modo_envio CHAR(10),
    comentario VARCHAR(40),
    CONSTRAINT pk_lineitem2 PRIMARY KEY (cod_orden, numero_linea),
    CONSTRAINT fk_parte_lineitem2 FOREIGN KEY (cod_parte) REFERENCES parte(cod_parte),
    CONSTRAINT fk_proveedor_lineitem2 FOREIGN KEY (cod_proveedor) REFERENCES proveedor(cod_proveedor),
    CHECK (fecha_envio < fecha_recepcion),
    CHECK (flag_devolucion IN ('A','R','N'))
);

INSERT INTO lineitem2 (cod_orden, numero_linea, flag_devolucion, fecha_envio, fecha_recepcion) 
VALUES(15, 20, 'A', '2021-12-15', '2021-12-25');

-- Estas actualizaciones fallarán debido a las restricciones CHECK
UPDATE lineitem2 SET flag_devolucion = 'H' WHERE cod_orden = 15;
UPDATE lineitem2 SET fecha_envio = '2021-12-30' WHERE cod_orden = 15;

Etiquetas: SQL integridad_referencial clave_primaria restricciones_CHECK clave_foránea

Publicado el 9-12 00:19