El enunciado es el siguiente : Cread un script SQL para la siguiente definición de base de datos:
BASE DE DATOS: RESERVAS
TABLA
USUARIO: codigo, nombre, apellidos, teléfono, mail, activo
CP: codigo (automático)
CAlt: mail
VNN: teléfono
* El campo activo será booleano, indicando si el usuario está de alta o de baja
TABLA RESTAURANTE: codigo, nombre, dirección, teléfono, web, coordenadas
El código será una cadena de texto de 10 caracteres,
por ejemplo: BARVLC0001, CAFEMDR500, ...
CP: codigo
TABLA RESERVAS_RESTAURANTE: restaurante, usuario, fecha_hora, comentarios, estado
CP: restaurante, usuario, fecha_hora
CAj: restaurante --> Restaurante(codigo)
CAj: usuario --> Usuario(codigo)
* Los posibles estados de la reserva será: RESERVADO, CANCELADO, VISITADO, NO VISITADO,
por defecto
el valor será RESERVADO.
(http://otroblogmas.com/diferencias-entre-enum-y-set-en-mysql/)
* Al eliminar un usuario, se eliminarán todas las reservas del mismo
* No se podrá eliminar un restaurante mientras existan reservas activas
* Al actualizar un restaurante, se actualizarán las reservas.
Y como yo lo he resuelto:
Código
CREATE DATABASE IF NOT EXISTS reservastabla COLLATE utf8_bin; USE reservastabla; CREATE TABLE usuario( codigo INT PRIMARY KEY, nombre VARCHAR(20), apellidos VARCHAR(40), telefono VARCHAR(15) NOT NULL, mail VARCHAR(30) UNIQUE, activo BOOLEAN ); CREATE TABLE restaurante( codigo VARCHAR(10) PRIMARY KEY, nombre VARCHAR(20), direccion VARCHAR(40), telefono VARCHAR(15), web VARCHAR(30), coordenadas VARCHAR(20) ); CREATE reservas_restaurante( restaurante VARCHAR(20), usuario INT, fecha_hora DATETIME, comentarios VARCHAR(200), estado ENUM('reservado', 'cancelado', 'visitado', 'no visitado') DEFAULT 'reservado', PRIMARY KEY(restaurante, usuario, fecha_hora), CONSTRAINT restaurante FOREING KEY (restaurante) REFERENCES restaurante(codigo), ON DELETE RESTRICT, ON UPDATE CASCADE, CONSTRAINT usuario FOREING KEY (usuario) REFERENCES usuario(codigo), ON DELETE CASCADE );
Gracias de antemano y un saludo.