jueves, 14 de agosto de 2014

Diseño físico de base de datos. Boletín 3

1.- Partiendo del siguiente esquema relacional, crea las tablas correspondientes, teniendo en cuenta la descripción y las restricciones siguientes:

ALUMNOS
DNI Alumno
VARCHAR2, tamaño 10
3 numeros, un guión y una letra
Nombre
VARCHAR2, tamaño 20
No Nulo
Direccion
VARCHAR2, tamaño 20

Teléfono
VARCHAR2, tamaño 10
Empieza por 95

EMPRESAS
CIF Empresa
VARCHAR2, tamaño 10

Nombre
VARCHAR2, tamaño 20
Único
Dirección
VARCHAR2, tamaño 20
No Nulo
Responsable Legal
VARCHAR2, tamaño 10

Sector
VARCHAR2, tamaño 15


PRACTICAS
DNI Alumno
VARCHAR2, tamaño 10
Clave ajena
NIF Empresa
VARCHAR2, tamaño 10
Clave ajena
Fecha Inicio
FECHA

NumHoras
NUMERICO de 4
Por defecto 0

Los campos que aparecen en negrita y subrayados forman la clave primaria de la tabla, restricción que debe considerarse al crear las tablas, al igual que las claves ajenas.


2.- Añade las restricciones siguientes:

-          CIF Empresa: Empieza y termina con una letra mayúscula.
-          FechaInicio: En Abril o Mayo.
-          Sector: Es uno de los siguientes: ‘Informatica’, ‘I+D’ o ‘Electrónica’.

Solución SQL

CREATE TABLE alumnos
(
dni VARCHAR2 (10),
nombre VARCHAR2 (20) NOT NULL,
direccion VARCHAR2 (20),
telefono VARCHAR2 (10),
CONSTRAINT pk_dni PRIMARY KEY (dni),
CONSTRAINT ck_dni1 CHECK (UPPER (SUBSTR (dni,10,2)) BETWEEN 'A' AND 'Z'),
CONSTRAINT ck_telefono CHECK(SUBSTR(telefono,1,2)='95')
);

CREATE TABLE empresas
(
cif VARCHAR2 (10),
nombre VARCHAR2 (20) UNIQUE,
direccion VARCHAR2 (20) NOT NULL,
responsable_legal VARCHAR2 (10),
sector VARCHAR2 (15),
CONSTRAINT pk_cif PRIMARY KEY (cif),
CONSTRAINT ck_cif_letra CHECK (cif BETWEEN 'A%' AND 'Z%'),
CONSTRAINT ck_cif_letrafin CHECK (cif BETWEEN '%A' AND '%Z'),
CONSTRAINT ck_sector CHECK (sector IN ('Informatica', 'I+D', 'Electronica'))
);

CREATE TABLE practicas
(
dni VARCHAR2 (10),
cif VARCHAR2 (10),
fecha_inicio DATE,
numhoras NUMBER (4) DEFAULT 0,
CONSTRAINT pk_dni_cif PRIMARY KEY (dni, cif),
CONSTRAINT fk_dni_pers FOREIGN KEY (dni) REFERENCES alumnos (dni),
CONSTRAINT fk_cif_emp FOREIGN KEY (cif) REFERENCES empresas (cif) ON DELETE CASCADE,
CONSTRAINT ck_fecha_inic CHECK ( fecha_inicio IN ('abril', 'mayo'))
);

Solución MYSQL

CREATE TABLE alumnos
(
dni VARCHAR (10),
nombre VARCHAR (20) NOT NULL,
direccion VARCHAR (20),
telefono VARCHAR (10),
CONSTRAINT pk_dni PRIMARY KEY (dni),
CONSTRAINT ck_dni1 CHECK (UPPER (SUBSTR (dni,10,2)) BETWEEN 'A' AND 'Z'),
CONSTRAINT ck_telefono CHECK(SUBSTR(telefono,1,2)='95')
);


CREATE TABLE empresas
(
cif VARCHAR (10),
nombre VARCHAR (20) UNIQUE,
direccion VARCHAR (20) NOT NULL,
responsable_legal VARCHAR (10),
sector VARCHAR (15),
CONSTRAINT pk_cif PRIMARY KEY (cif),
CONSTRAINT ck_cif_letra CHECK (cif BETWEEN 'A%' AND 'Z%'),
CONSTRAINT ck_cif_letrafin CHECK (cif BETWEEN '%A' AND '%Z'),
CONSTRAINT ck_sector CHECK (sector IN ('Informatica', 'I+D', 'Electronica'))
);

CREATE TABLE practicas
(
dni VARCHAR (10),
cif VARCHAR (10),
fecha_inicio DATE,
numhoras NUMERIC (4) DEFAULT 0,
CONSTRAINT pk_dni_cif PRIMARY KEY (dni, cif),
CONSTRAINT fk_dni_pers FOREIGN KEY (dni) REFERENCES alumnos (dni),
CONSTRAINT fk_cif_emp FOREIGN KEY (cif) REFERENCES empresas (cif) ON DELETE CASCADE,
CONSTRAINT ck_fecha_inic CHECK ( fecha_inicio IN ('abril', 'mayo'))
);


No hay comentarios:

Publicar un comentario