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;