jueves, 14 de agosto de 2014

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


Coches (Matrícula (PK), Marca, Modelo, Color, PVP, Cod_Cliente (FK))
Clientes (Código (PK), NIF, Nombre, Dirección, Ciudad, Teléfono)
Revisiones (Código (PK), Fecha, Matrícula (FK))
Operaciones (Código (PK), Descripción, Horas)
Operaciones_Revisiones (Código_rev(PK y FK), Código_operacion (PK y FK))

Crear las tablas procurando que las columnas tengan el tipo y tamaño adecuados y con las siguientes restricciones:

1. Color es verde, rojo o azul.
2. Las horas de una operación nunca pasan de 10.
3. Todas las claves primarias, ajenas y candidatas.
4. La marca y modelo del coche no pueden dejarse en blanco.
5. El precio de un coche está entre 10000 y 40000.

Solución en SQL

CREATE TABLE clientes
(
cod_cliente VARCHAR2 (10),
nif VARCHAR2 (9) CONSTRAINT nif_unico UNIQUE,
nombre VARCHAR2 (15),
direccion VARCHAR2 (30),
ciudad VARCHAR2 (20),
telefono VARCHAR2 (10),
CONSTRAINT pk_cod_cliente PRIMARY KEY (cod_cliente)
);

CREATE TABLE coches
(
matricula VARCHAR2 (10),
marca VARCHAR2 (15) CONSTRAINT marca_obligatorio NOT NULL,
modelo VARCHAR2 (15) CONSTRAINT modelo_obligatorio NOT NULL,
color VARCHAR2 (10),
pvp NUMBER (10,2) CONSTRAINT ck_pvp CHECK(pvp BETWEEN 10000 AND 40000),
cod_cliente VARCHAR2 (10),
CONSTRAINT pk_matricula PRIMARY KEY (matricula),
CONSTRAINT ck_tipo_color CHECK(color='verde' OR color='rojo' OR color='azul'),
CONSTRAINT fk_cod_cliente FOREIGN KEY (cod_cliente)
REFERENCES clientes (cod_cliente)
ON DELETE CASCADE
);

CREATE TABLE revisiones
(
cod_revisiones VARCHAR2 (10),
fecha DATE,
matricula VARCHAR2 (10),
CONSTRAINT pk_cod_revisiones PRIMARY KEY (cod_revisiones),
CONSTRAINT fk_matricula FOREIGN KEY (matricula) REFERENCES coches (matricula)
ON DELETE CASCADE
);

CREATE TABLE operaciones
(
cod_operaciones VARCHAR2 (10),
descripcion VARCHAR2 (30),
horas VARCHAR2 (5),
CONSTRAINT pk_cod_operaciones PRIMARY KEY (cod_operaciones),
CONSTRAINT ck_horas_maximas CHECK(horas<10)
);

CREATE TABLE operaciones_revisiones
(
cod_revisiones VARCHAR2 (10),
cod_operaciones VARCHAR2 (10),
CONSTRAINT pk_cod_rev_oper PRIMARY KEY (cod_revisiones, cod_operaciones),
CONSTRAINT fk_cod_revisiones FOREIGN KEY (cod_revisiones) REFERENCES revisiones (cod_revisiones),
CONSTRAINT fk_cod_operaciones FOREIGN KEY (cod_operaciones)
REFERENCES operaciones (cod_operaciones)
ON DELETE CASCADE
);

Solución en MYSQL

CREATE DATABASE ejercnav ;
USE ejercnav ;

CREATE TABLE clientes
(
cod_cliente VARCHAR (10),
nif VARCHAR (9),
nombre VARCHAR (15),
direccion VARCHAR (30),
ciudad VARCHAR (20),
telefono VARCHAR (10),
CONSTRAINT pk_cod_cliente PRIMARY KEY (cod_cliente),
CONSTRAINT nif_unico unique (nif)
);

CREATE TABLE coches
(
matricula VARCHAR (10),
marca VARCHAR (15) NOT NULL,
modelo VARCHAR (15) NOT NULL,
color VARCHAR (10),
pvp NUMERIC(2),
cod_cliente VARCHAR (10),
CONSTRAINT pk_matricula PRIMARY KEY (matricula),
CONSTRAINT ck_tipo_color CHECK(color='verde' OR color='rojo' OR color='azul'),

CONSTRAINT ck_pvp CHECK(pvp BETWEEN 10000 AND 40000),
CONSTRAINT fk_cod_cliente FOREIGN KEY (cod_cliente)
REFERENCES clientes (cod_cliente)
ON DELETE CASCADE
);

CREATE TABLE revisiones
(
cod_revisiones VARCHAR (10),
fecha DATE,
matricula VARCHAR (10),
CONSTRAINT pk_cod_revisiones PRIMARY KEY (cod_revisiones),
CONSTRAINT fk_matricula FOREIGN KEY (matricula) REFERENCES coches (matricula)
ON DELETE CASCADE
);

CREATE TABLE operaciones
(
cod_operaciones VARCHAR (10),
descripcion VARCHAR (30),
horas VARCHAR (5),
CONSTRAINT pk_cod_operaciones PRIMARY KEY (cod_operaciones),
CONSTRAINT ck_horas_maximas CHECK(horas<10)
);

CREATE TABLE operaciones_revisiones
(
cod_revisiones VARCHAR (10),
cod_operaciones VARCHAR (10),
CONSTRAINT pk_cod_rev_oper PRIMARY KEY (cod_revisiones, cod_operaciones),
CONSTRAINT fk_cod_revisiones FOREIGN KEY (cod_revisiones) REFERENCES revisiones (cod_revisiones),
CONSTRAINT fk_cod_operaciones FOREIGN KEY (cod_operaciones)
REFERENCES operaciones (cod_operaciones)
ON DELETE CASCADE

);

No hay comentarios:

Publicar un comentario