Added CHECK constraint exercise.

This commit is contained in:
Nicolás A. Ortega Froysa 2022-01-12 20:11:12 +01:00
parent 55b64d17cc
commit fed6ac2509

View File

@ -0,0 +1,81 @@
DROP TABLE Barcos;
DROP TABLE Especies;
DROP TABLE Lotes;
CREATE TABLE Barcos(
matricula CHAR(7) PRIMARY KEY,
nombre VARCHAR(20),
clase VARCHAR(20),
capacidad NUMBER(8,2),
nacionalidad VARCHAR(20)
);
CREATE TABLE Lotes(
codigo INT PRIMARY KEY,
matricula CHAR(7), /* references Barcos(matricula) */
num_kg NUMBER(8,2) CHECK(num_kg > 0),
precio_kg_salida NUMBER(8,2) CHECK(precio_kg_salida > 0),
precio_kg_vendido NUMBER(8,2) CHECK(precio_kg_vendido > 0),
fecha_venta DATE NOT NULL,
cod_especie INT /* references Especies(codigo) */
);
CREATE TABLE Especies(
codigo INT PRIMARY KEY,
nombre VARCHAR(20),
tipo VARCHAR(20),
cupo_barco NUMBER(8,2),
caladero_ppal INT /* references Caladeros(codigo) */
);
CREATE TABLE Caladeros(
codigo INT PRIMARY KEY,
nombre VARCHAR(20) CHECK(nombre = UPPER(nombre)),
ubicacion VARCHAR(20) CHECK(ubicacion = UPPER(ubicacion)),
especie_ppal INT /* references Especies(codigo) */
);
CREATE TABLE Fechas_Capturas(
cod_especie INT, /* references Especies(codigo) */
cod_caladero INT, /* references Caladeros(codigo) */
fecha_inicio DATE,
fecha_fin DATE,
PRIMARY KEY(cod_especie, cod_caladero)
);
ALTER TABLE Lotes
ADD CONSTRAINT FK_Lotes_matricula
FOREIGN KEY (matricula) REFERENCES Barcos(matricula)
ON DELETE CASCADE;
ALTER TABLE Lotes
ADD CONSTRAINT FK_Lotes_cod_especie
FOREIGN KEY (cod_especie) REFERENCES Especies(codigo)
ON DELETE CASCADE;
ALTER TABLE Especies
ADD CONSTRAINT FK_Especies_caladero_ppal
FOREIGN KEY (caladero_ppal) REFERENCES Caladeros(codigo)
ON DELETE RESTRICT;
ALTER TABLE Caladeros
ADD CONSTRAINT FK_Caladeros_especie_ppal
FOREIGN KEY (especie_ppal) REFERENCES Especies(codigo)
ON DELETE SET NULL;
ALTER TABLE Fechas_Capturas
ADD CONSTRAINT FK_Fechas_Capturas_cod_especie
FOREIGN KEY (cod_especie) REFERENCES Especies(codigo);
ALTER TABLE Fechas_Capturas
ADD CONSTRAINT FK_Fechas_Capturas_cod_caladero
FOREIGN KEY (cod_caladero) REFERENCES Caladeros(codigo);
ALTER TABLE Barcos
ADD CHECK(REGEXP_LIKE(matricula, '[A-Z]{2}-[0-9]{4}'));
ALTER TABLE Lotes
ADD CHECK(precio_kg_vendido > precio_kg_salida);
ALTER TABLE Fechas_Capturas
ADD CHECK(fecha_inicio BETWEEN '02-02-2022' AND '28-03-2022');