Está en la página 1de 11

Daniel González Touza - Tarea para GBD03.

Detalles de la tarea de esta unidad.


Enunciado.
EJERCICIO 1

Partiendo del siguiente modelo relacional que corresponde al Restaurante Mouro escribe
las instrucciones en SQL necesarias para crear la base de datos:

EMPLEADOS (DNI, Nombre, Apellidos, Dirección, Ciudad, Teléfono, CP, FechaAlta,


Categoría, Salario)
COCINEROS (DNI, Puesto, Especialidad)
ADMINISTRACIÓN (DNI, Cargo)
CAMAREROS (DNI, Turno, años, DNI_encargado)
COMEDORES (CodigoC, Nombre, Capacidad, Nmesas, Localización)
MESAS (CodigoM, CodigoC, Nasientos, DNI_camarero)
Hacen (CodigoM, CodigoC, Nreserva, NasientosR)
RESERVAS (Nreserva, Fhreserva, Nombre, Fhreservada, Comida/Cena, Npersonas,
Varios)
FACTURAS (NFactura, FechaF, CodigoM, CodigoC)
Incluyen (NFactura, CodigoPl, Unidades)
PLATOS (CodigoPl, Nombre, Descripción, Tipo, Precio)
Contienen (CodigoPl, CodigoPr, Cantidad)
PRODUCTOS (CodigoPr, Descripción, Stock, UnidadBase, PrecioU, Categoría,
CodigoPro)
PROVEEDORES (CodigoPro, Dirección, CP, Teléfono, Fax, Contacto)

Nota: Las claves primarias se indican en subrayado y las claves ajenas se denotan en
cursiva.

CREATE DATABASE Restaurante_Mouro;

USE Restaurante_Mouro;

CREATE TABLE Empleados

DNI Char(9) NOT NULL,

Nombre VARCHAR( 25 ) ,

Apellidos VARCHAR( 25 ) ,

Direccion VARCHAR( 50 ) ,

Ciudad VARCHAR( 50 ) ,
Telefono INTEGER( 9 ) ,

CP INTEGER(5) ,

FECHA_ALTA DATE ,

Categoria VARCHAR( 25 ) ,

Salario INTEGER ( 9 ) UNSIGNED ,

PRIMARY KEY (DNI)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Cocineros

DNI Char(9) NOT NULL,

Puesto VARCHAR( 25 ) ,

Especialidad VARCHAR( 25 ) ,

PRIMARY KEY (DNI) ,

FOREIGN KEY(DNI) REFERENCES Empleados(DNI)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Administracion

DNI Char(9) NOT NULL,

Cargo VARCHAR( 25 ) ,
PRIMARY KEY (DNI) ,

FOREIGN KEY(DNI) REFERENCES Empleados(DNI)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Camareros

DNI Char(9) NOT NULL,

Turno VARCHAR( 25 ) ,

Años INTEGER( 2 ) UNSIGNED,

Dni_Encargado Char ( 9 ) ,

PRIMARY KEY(DNI) ,

FOREIGN KEY(DNI) REFERENCES Empleados(DNI),

FOREIGN KEY(Dni_Encargado) REFERENCES Empleados(DNI)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Comedores

CodigoC VarChar(9) NOT NULL,

Nombre VARCHAR( 25 ) ,

Capacidad INTEGER( 4 ) ,

Nmesas INTEGER (3) ,


Localizacion VARCHAR ( 25 ) ,

PRIMARY KEY (CodigoC)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Mesas

CodigoM VarChar(9) NOT NULL,

CodigoC VarChar(9) NOT NULL,

Nasientos INTEGER( 3 ) ,

Dni_Camarero VARCHAR( 9 ) ,

PRIMARY KEY (CodigoM,CodigoC) ,

FOREIGN KEY(CodigoC) REFERENCES Comedores(CodigoC),

FOREIGN KEY(Dni_Camarero) REFERENCES Empleados(DNI)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Reservas

Nreserva INTEGER (4) NOT NULL ,

Fhreserva DATE,

Nombre VARCHAR( 25 ) ,

Fhreservada DATE,

Comida_Cena VARCHAR (6) ,


Npersonas INTEGER (4),

Varios VARCHAR (25),

PRIMARY KEY (Nreserva)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Hacen

CodigoM VarChar(9) NOT NULL,

CodigoC VarChar(9) NOT NULL,

Nreserva INTEGER (4) NOT NULL ,

NasientosR INTEGER ( 4 ) ,

PRIMARY KEY (CodigoM,CodigoC,Nreserva) ,

FOREIGN KEY(CodigoM,CodigoC) REFERENCES Mesas(CodigoM,CodigoC),

FOREIGN KEY(Nreserva) REFERENCES Reservas(Nreserva)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Facturas

NFactura INTEGER (4) NOT NULL ,

FechaF DATE,

CodigoM VarChar(9) ,

CodigoC VarChar(9) ,
PRIMARY KEY (NFactura),

FOREIGN KEY(CodigoM,CodigoC) REFERENCES Mesas(CodigoM,CodigoC)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Platos

CodigoPL INTEGER (4) NOT NULL ,

Nombre VarChar(25) ,

Descripcion VarChar(50) ,

Tipo VARCHAR (25),

Precio INTEGER (4) UNSIGNED ,

PRIMARY KEY (CodigoPL)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Incluyen

NFactura INTEGER (4) NOT NULL,

CodigoPL INTEGER (4) NOT NULL ,

Unidades INTEGER (4) UNSIGNED ,

PRIMARY KEY (NFactura,CodigoPL),

FOREIGN KEY(CodigoPL) REFERENCES Platos(CodigoPL),

FOREIGN KEY(NFactura) REFERENCES Facturas(NFactura)


)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Proveedores

CodigoPRO INTEGER(4) NOT NULL,

Direccion VARCHAR( 50 ) ,

CP INTEGER(5) ,

Telefono INTEGER( 9 ) ,

FAX INTEGER(9) ,

Contacto VARCHAR ( 25 ) ,

PRIMARY KEY (CodigoPRO)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Productos

CodigoPR INTEGER(4) NOT NULL,

Descripcion VARCHAR( 50 ) ,

Stock INTEGER(5) ,

UnidadBase INTEGER( 3 ) ,

PrecioU INTEGER(6) UNSIGNED,

Categoria VARCHAR ( 25 ) ,
CodigoPRO INTEGER(4),

PRIMARY KEY (CodigoPR),

FOREIGN KEY(CodigoPRO) REFERENCES Proveedores(CodigoPRO)

ENGINE = InnoDB;

USE Restaurante_Mouro;

CREATE TABLE Contienen

CodigoPR INTEGER(4) NOT NULL,

CodigoPL INTEGER(4) NOT NULL,

Cantidad INTEGER(5) ,

PRIMARY KEY (CodigoPR,CodigoPL),

FOREIGN KEY(CodigoPR) REFERENCES Productos(CodigoPR),

FOREIGN KEY(CodigoPL) REFERENCES Platos(CodigoPL)

ENGINE = InnoDB;
EJERCICIO 2

Sobre la base de datos Restaurante Mouro realiza las siguientes modificaciones:

Tabla EMPLEADOS

2.1. Añade un índice que facilite búsquedas frecuentes por Apellidos y Nombre sin
duplicados.

USE Restaurante_Mouro;

ALTER TABLE Empleados;

CREATE UNIQUE INDEX Apellidos_Nombres ON Empleados(Nombre(6) ASC,


Apellidos(10) ASC)

2.2. El Restaurante se ha inaugurado el día 15 de Julio de 2010. Comprueba que la fecha


de alta de los empleados no sea anterior a esa fecha.

USE Restaurante_Mouro;

ALTER TABLE Empleados

ADD CONSTRAINT Fecha CHECK (FechaAlta>"2010-07-15")

Tabla CAMAREROS

2.3. El turno de trabajo sólo puede tomar 3 valores: mañana, tarde y noche. Añade esa
restricción teniendo en cuenta que un camarero puede tener más de un turno (no utilices
CHECK).

USE Restaurante_Mouro;

ALTER TABLE Camareros

MODIFY Turno ENUM("Mañana", "Tarde" , "Noche");


Tabla PROVEEDORES

2.4. Añade las columnas Apellidos y Nombre entre el código y la dirección.

USE Restaurante_Mouro;

ALTER TABLE Proveedores

ADD COLUMN APELLIDOS VARCHAR (25) AFTER CodigoPRO;

ALTER TABLE Proveedores

ADD COLUMN NOMBRE VARCHAR (25) AFTER APELLIDOS;

Tabla MESAS

2.5. El valor por defecto del número de asientos en las mesas es 4.

USE Restaurante_Mouro;

ALTER TABLE Mesas

ALTER Nasientos SET DEFAULT "4";

Tabla PRODUCTOS

2.6. Añade un índice por Categoría. Muestra todos los índices de la tabla.

USE Restaurante_Mouro;

ALTER TABLE PRODUCTOS

ADD UNIQUE INDEX Categorias (Categoria);

2.7. Añade una restricción en la tabla, de forma que el Stock sea entero de 4 cifras, sin
signo y que no admita nulos.

USE Restaurante_Mouro;

ALTER TABLE Productos

MODIFY Stock int(4) UNSIGNED NOT NULL ;


2.8. Borra el índice que acabas de crear.

USE Restaurante_Mouro;

ALTER TABLE Productos

DROP INDEX Categorias ;

Tabla PLATOS

2.9. Borra la tabla PROVEEDORES. ¿Qué ocurre?. Borra previamente las claves
ajenas.

DROP TABLE Productos Error Code: 1217. Cannot delete or update a parent row: a
foreign key constraint fails 0.000 sec

No se puede borar al contener una clave ajena que la relaciona con otra table.

USE Restaurante_Mouro;

ALTER TABLE Productos

DROP FOREIGN KEY productos_ibfk_1;

DROP TABLE proveedores;

DROP TABLE proveedores 0 row(s) affected 0.031 sec

BASE DE DATOS Restaurante Mouro

2.10. Borra la base de datos.

USE Restaurante_Mouro;

DROP DATABASE Restaurante_Mouro;

También podría gustarte