Partiendo del siguiente esquema relacional, crea las tablas
correspondientes en Oracle, teniendo en cuenta el tipo y tamaño de los campos,
las claves primarias (negrita y subrayado)
y ajenas y las restricciones indicadas. Debes incluir en el script
inserciones de registros de prueba para demostrar el funcionamiento correcto de
las restricciones.
Somos
los encargados de la administración y explotación de la base de datos del Gran
Hipódromo de Andalucía y debemos:
Tabla
Caballos
CABALLOS
|
||
CodCaballo
|
CADENA, tamaño 4
|
|
Nombre
|
CADENA, tamaño 20
|
|
Peso
|
NUMERICO de 3
|
Entre 240 y 300
|
Fecha Nacimiento
|
FECHA
|
Posterior al año 2000
|
Propietario
|
CADENA, tamaño 25
|
|
Nacionalidad
|
CADENA, tamaño 20
|
|
Tabla Carreras
CARRERAS
|
||
CodCarrera
|
CADENA, tamaño 4
|
|
Fecha y Hora
|
FECHA
|
|
Importe Premio
|
NUMERICO de 6
|
|
Apuesta Limite
|
NUMERICO de 5 más 2 decimales
|
Menor de 20000
|
Tabla Participaciones
PARTICIPACIONES
|
||
CodCaballo
|
CADENA, tamaño 4
|
|
CodCarrera
|
CADENA, tamaño 4
|
|
Dorsal
|
NUMERICO de 2
|
Obligatorio
|
Jockey
|
CADENA, tamaño 10
|
No Nulo
|
PosicionFinal
|
NUMERICO de 2
|
Numero positivo
|
Tabla Apuestas
APUESTAS
|
||
DNICliente
|
CADENA, tamaño 10
|
|
CodCaballo
|
CADENA, tamaño 4
|
|
CodCarrera
|
CADENA, tamaño 4
|
|
Importe
|
NUMERICO de 6
|
No Nulo, por defecto 300
|
Tantoporuno
|
NUMERICO de 4 más 2 decimales
|
Mayor que 1
|
Tabla Clientes
CLIENTES
|
||
DNI
|
CADENA, tamaño 10
|
|
Nombre
|
CADENA, tamaño 20
|
|
Añadir
las siguientes restricciones una vez
creadas las tablas e insertado algunos registros:
●
En Participaciones los nombres de
los jockeys tienen siempre las iniciales en mayúsculas.
●
La temporada de carreras transcurre
de Marzo a Noviembre.
●
La nacionalidad de los caballos
sólo puede ser Española, Británica o Árabe.
●
Añade la columna Nacionalidad a la
tabla CLIENTES de tipo CADENA y tamaño 20.
●
Modifica la columna Importe para
que sea de tipo numérico de 5 con dos decimales.
●
Fecha y Hora: De las 9 a las 14:30
●
El código de la carrera ha de
comenzar por una letra mayúscula, luego un
guión y a continuación dos números.
CREATE TABLE caballos
(
codcaballo
VARCHAR2(4),
nombre VARCHAR2(20),
peso NUMBER(3),
fecha_nac DATE,
propietario
VARCHAR2(25),
nacionalidad
VARCHAR2(20),
CONSTRAINT
PK_caballos PRIMARY KEY (codcaballo),
CONSTRAINT CK_peso CHECK (peso BETWEEN 240 AND 300),
CONSTRAINT CK_fecha_nac CHECK
(TO_NUMBER(TO_CHAR(fecha_nac,'YYYY'))>2000)
);
CREATE TABLE carreras
(
codcarrera
VARCHAR2(4),
fecha_hora DATE,
importe_premio
NUMBER(6),
apuesta_limite
NUMBER(7,2),
CONSTRAINT
PK_carreras PRIMARY KEY (codcarrera),
CONSTRAINT
CK_apuesta_limite CHECK (apuesta_limite < 20000)
);
CREATE TABLE
participaciones (
codcaballo
VARCHAR2(4),
codcarrera
VARCHAR2(4),
dorsal NUMBER(2),
jockey VARCHAR2(10),
posicion_final
NUMBER(2),
CONSTRAINT
PK_participaciones PRIMARY KEY (codcaballo, codcarrera),
CONSTRAINT
FK_codcaballo FOREIGN KEY (codcaballo) REFERENCES caballos (codcaballo),
CONSTRAINT
FK_codcarrera FOREIGN KEY (codcarrera) REFERENCES carreras (codcarrera),
CONSTRAINT CK_dorsal_nnull CHECK (dorsal IS NOT NULL),
CONSTRAINT CK_jockey_nnull CHECK (jockey IS NOT NULL),
CONSTRAINT CK_posicion_final CHECK (posicion_final
>= 0)
);
CREATE TABLE clientes
(
dni VARCHAR2(10),
nombre VARCHAR2(10),
CONSTRAINT PK_clientes_dni PRIMARY KEY (dni)
);
CREATE TABLE apuestas
(
dnicliente
VARCHAR2(10),
codcaballo
VARCHAR2(4),
codcarrera
VARCHAR2(4),
importe NUMBER(6)
DEFAULT 300,
tantoporuno
NUMBER(6,2),
CONSTRAINT
PK_clientes PRIMARY KEY (dnicliente, codcaballo, codcarrera),
CONSTRAINT
FK_dnicliente FOREIGN KEY (dnicliente) REFERENCES clientes (dni),
CONSTRAINT
FK_participaciones FOREIGN KEY (codcaballo, codcarrera) REFERENCES
participaciones (codcaballo, codcarrera),
CONSTRAINT CK_importe_nnull CHECK (importe IS NOT
NULL),
CONSTRAINT CK_tantoporuno CHECK (tantoporuno >1)
);
ALTER TABLE participaciones ADD CONSTRAINT CK_nombre_j
CHECK (jockey=INITCAP(jockey));
ALTER TABLE carreras ADD CONSTRAINT CK_fecha_mar_nov
CHECK (TO_NUMBER(TO_CHAR(fecha_hora,'MM')) BETWEEN 03 AND 11);
ALTER TABLE caballos
ADD CONSTRAINT CK_caballo_nac CHECK (upper(nacionalidad) IN
('ESPANHOLA','BRITANICA','ARABE'));
ALTER TABLE clientes
ADD nacionalidad VARCHAR2(20);
DESCRIBE clientes;
ALTER TABLE apuestas
MODIFY importe NUMBER(5,2);
DESCRIBE apuestas;
ALTER TABLE carreras
ADD CONSTRAINT CK_fecha_hora CHECK ((TO_NUMBER(TO_CHAR(fecha_hora,'hh'))>9)
AND
((TO_NUMBER(TO_CHAR(fecha_hora,'hh'))<14)
OR ((TO_NUMBER(TO_CHAR(fecha_hora,'hh'))<14) AND
(TO_NUMBER(TO_CHAR(fecha_hora,'mi'))<30))));
ALTER TABLE carreras ADD CONSTRAINT CK_codcarrera
CHECK (((substr(codcarrera,1,1) = upper(substr(codcarrera,1,1)))
AND ((substr(codcarrera,2,1)='-'))
AND (TO_NUMBER(substr(codcarrera,3,2))) BETWEEN 0 AND
99)
);
No hay comentarios:
Publicar un comentario