Esquema Base datos

8
EJERCICIO 1: Vamos a crear las tablas para un taller mecánico donde se reparan vehículos. Empezaremos creando con SQL las siguientes tablas: Tabla MECÁNICOS recogerá información sobre los mecánicos del taller: NIF, Nombre, Apellido1, Apellido2, Número de empleado, Dirección, Título, Salario. Tabla PROPIETARIOS de los vehículos: NIF, Nombre, Apellido1, Apellido2, Dirección, Teléfono, Cliente habitual del taller. Tabla VEHÍCULOS con los siguientes campos: Matrícula, Marca, Modelo, Tipo de vehículo, Número de kilómetros, Fecha de fabricación, Fecha de reparación, Propietario, Mecánico que lo repara. 1. Un vehículo sólo puede pertenecer a un propietario. 2. Debes elegir los nombres más adecuados para los atributos teniendo en cuenta las reglas. 3. Debes elegir los tipos de datos adecuados en función del contenido de los campos

description

Esquema base de datos taller mecánico

Transcript of Esquema Base datos

Page 1: Esquema Base datos

EJERCICIO 1:

Vamos a crear las tablas para un taller mecánico donde se reparan vehículos. Empezaremos creando con SQL las siguientes tablas:

Tabla MECÁNICOS recogerá información sobre los mecánicos del taller: NIF, Nombre, Apellido1, Apellido2, Número de empleado, Dirección, Título, Salario.

Tabla PROPIETARIOS de los vehículos: NIF, Nombre, Apellido1, Apellido2, Dirección, Teléfono, Cliente habitual del taller.

Tabla VEHÍCULOS con los siguientes campos: Matrícula, Marca, Modelo, Tipo de vehículo, Número de kilómetros, Fecha de fabricación, Fecha de reparación, Propietario, Mecánico que lo repara.

1. Un vehículo sólo puede pertenecer a un propietario.2. Debes elegir los nombres más adecuados para los atributos teniendo en

cuenta las reglas.3. Debes elegir los tipos de datos adecuados en función del contenido de los

campos

Page 2: Esquema Base datos

Esquema base de datos taller mecánico

Tabla MECÁNICOS recogerá información sobre los mecánicos del taller: NIF, Nombre, Apellido1, Apellido2, Número de empleado, Dirección, Título, Salario.

MatriculaMarcaModeloTipoVehiculoKilometrosFechaFabricaFechaReparaPropietarioMecanico

Vehiculos

NifNombreApellido1Apellido2DireccionTelefonoHabitual

Propietarios

IdEmpleadoNifNombreApellido1Apellido2DireccionTituloSalario

Mecanicos

Page 3: Esquema Base datos

Creamos la tabla mecanicos

CREATE TABLE Mecanicos(IdEmpleado VARCHAR2(9) PRIMARY KEY, (Al ser clave Primaria es Única y Not Null, NO se pueden repetir dos IdEmpleado)Nif VARCHAR2(9) NOT NULL,Nombre VARCHAR2(20),Apellido VARCHAR2(20),Apellido2 VARCHAR2(20),Direccion VARCHAR2(50),Titulo VARCHAR2(20), (El dato Titulo es obligatorio por eso le decimos que no puede ser nulo)Salario NUMBER(6,2),CONSTRAINT Mec_Nif_UK UNIQUE(Nif) (Hacemos que el campo Nif sea UNICO y NO se repita)

);

Tabla PROPIETARIOS de los vehículos: NIF, Nombre, Apellido1, Apellido2, Dirección, Teléfono, Cliente habitual del taller.

Creamos la tabla propietarios

CREATE TABLE Propietarios(Nif VARCHAR2(9) PRIMARY KEY, (Al ser clave Primaria es Única y Not Null, NO se pueden repetir dos Nif)Nombre VARCHAR2(20),Apellido VARCHAR2(20),Apellido2 VARCHAR2(20),Direccion VARCHAR2(50),Telefono NUMBER(10),Habitual VARCHAR2(1),CONSTRAINT Pro_Hab_CK CHECK((Habitual='S') OR (Habitual='N')) (Chequeamos que sea S(si) o N(no))

);

Tabla VEHÍCULOS con los siguientes campos: Matrícula, Marca, Modelo, Tipo de vehículo, Número de kilómetros, Fecha de fabricación, Fecha de reparación, Propietario, Mecánico que lo repara.

Creamos la tabla vehiculos

CREATE TABLE Vehiculos(Matricula VARCHAR2(10) PRIMARY KEY, (Al ser clave Primaria es Única y Not Null, NO se pueden repetir dos Matrícula)Marca VARCHAR2(15),Modelo VARCHAR2(15),TipoVehiculo VARCHAR2(20) NOT NULL, (El dato TipoVehiculo es obligatorio por eso le decimos que no puede ser nulo)Kilometros NUMBER NOT NULL, (El dato Kilometros es obligatorio por eso le decimos que no puede ser nulo)FechaFabrica DATE NOT NULL,FechaReparacion DATE NOT NULL,Propietario VARCHAR(9) NOT NULL,Mecanico VARCHAR(9) NOT NULL,CONSTRAINT Fec_Vehi_CK CHECK(FechaReparacion>FechaFabrica), (Comprobamos que la fecha de reparacion sea mayor a fecha fabricación)CONSTRAINT Veh_Pro_FK FOREIGN KEY (Propietario) REFERENCES Propietarios(Nif), (Creamos una clave foranea al campo Nif de la tabla Propietarios)CONSTRAINT Veh_Mec_FK FOREIGN KEY (Mecanico) REFERENCES Mecanicos(IdEmpleado) (Creamos una clave foranea al campo IdEmpleados de la tabla Mecanicos)

);

4. Debes establecer las siguientes restricciones:

A. Los vehículos deben ser asignados a un mecánico para que proceda a su reparación y deben asociarse a su propietario antes de ser dado de alta.

Page 4: Esquema Base datos

Al crear las claves foráneas creando relaciones con otras tablas con su clave principal estamos creando integridad referencial y asi estamos obligando a que en todas las tablas relacionadas deben asignarse los datos correspondientes siendo la tabla padre la tabla Vehículos e hijas las tablas Propietarios y Mecánicos

B. En un vehículo, el número de kilómetros es un dato que no puede faltar, es obligatorio que contenga información.

Kilometros NUMBER NOT NULL, (El dato Kilómetros es obligatorio por eso le decimos que no puede ser nulo)

C. En la tabla MECÁNICOS, el atributo Título no puede estar vacío.

Titulo VARCHAR2(20), (El dato Titulo es obligatorio por eso le decimos que no puede ser nulo)

D. En la tabla VEHÍCULOS, el atributo Tipo no puede estar vacío.

TipoVehiculo VARCHAR2(20) NOT NULL, (El dato TipoVehiculo es obligatorio por eso le decimos que no puede ser nulo)

E. Dos mecánicos no pueden tener el mismo número de empleado.

IdEmpleado VARCHAR2(9) PRIMARY KEY, (Al ser clave Primaria es Única y Not Null, NO se pueden repetir dos IdEmpleado)

F. Podremos diferenciar las tuplas de la tabla VEHÍCULOS por la matrícula del vehículo.

Matricula VARCHAR2(10) PRIMARY KEY, (Al ser clave Primaria es Única y Not Null, NO se pueden repetir dos Matrícula también al ser clave primaria es índice para las búsquedas)

G. Podremos diferenciar las tuplas de la tabla MECÁNICOS y PROPIETARIOS por el NIF.

CONSTRAINT Mec_Nif_UK UNIQUE(Nif) (Hacemos que el campo Nif sea UNICO y NO se repita al ser única ya estamos creando un índice para las búsquedas)Nif VARCHAR2(9) PRIMARY KEY, (Al ser clave Primaria es Única y Not Null, NO se pueden repetir dos Nif también al ser clave primaria es índice para las búsquedas)

H. La fecha de reparación del vehículo nunca puede ser menor que la fecha de fabricación del mismo.

CONSTRAINT Fec_Vehi_CK CHECK(FechaReparacion>FechaFabrica), (Comprobamos que la fecha de reparación sea mayor a fecha fabricación)

I. El dominio del atributo cliente habitual del taller es S (sí) y N (no).

CONSTRAINT Pro_Hab_CK CHECK((Habitual='S') OR (Habitual='N')) (Chequeamos que sea S(si) o N(no))

J. Se debe cumplir la regla de integridad referencial.

CONSTRAINT Veh_Pro_FK FOREIGN KEY (Propietario) REFERENCES Propietarios(Nif), (Creamos una clave foránea al campo Nif de la tabla Propietarios)CONSTRAINT Veh_Mec_FK FOREIGN KEY (Mecanico) REFERENCES Mecanicos(IdEmpleado) (Creamos una clave foránea al campo IdEmpleados de la tabla Mecánicos)Al se claves foráneas creando relaciones con otras tablas con su clave principal estamos creando integridad referencial

Page 5: Esquema Base datos

EJERCICIO 2:

Vamos a modificar las tablas que hemos creado en el apartado anterior:

1. Crea un nuevo atributo llamado Población en la tabla PROPIETARIOS.

ALTER TABLE Propietarios ADD (Poblacion VARCHAR2(20));

Añade las siguientes restricciones:2. Modifica el campo Tipo de vehículo de VEHÍCULOS para que sólo pueda

tomar los valores C (Coche) o M (Moto).

ALTER TABLE Vehiculos MODIFY TipoVehiculo VARCHAR(1); (Modificamos el tamaño del campo de VACHAR2(20) a VARCHAR2(1) para que admita los valores C o M )

ALTER TABLE Vehiculos ADD CONSTRAINT Veh_Tip_CK CHECK((TipoVehiculo ='C') OR (TipoVehiculo ='M'));(Chequeamos que sea C(Coche) o M(Moto))

3. Modifica el campo Salario del MECÁNICO de manera que esté comprendido entre 900 y 1700 euros.

Page 6: Esquema Base datos

ALTER TABLE Mecanicos ADD CONSTRAINT Mec_Sal_CK CHECK (Salario BETWEEN 900 AND 1700);

Añadimos una restricción nueva al campo para que el salario este comprendido entre 900 € y 1700 €

4. No podemos añadir un vehículo si su número de kilómetros es inferior a 0.

ALTER TABLE Vehiculos ADD CONSTRAINT Veh_Kil_CK CHECK (Kilometros>0);

Añadimos una restricción nueva al campo para que los kilómetros sean mayores de cero

5. Elimina la restricción que controla los valores que puede tomar el atributo Cliente habitual.

ALTER TABLE Propietarios DROP CONSTRAINT Pro_Hab_CK;

Eliminamos la restricción al campo Habitual la cual se llamaba Pro_Hab_CK la cual chequeaba que fuese S o N

6. Elimina la columna Título de la tabla MECÁNICOS.

ALTER TABLE Mecanicos DROP (Titulo);

Eliminamos la columna Titulo

7. Cambia la clave primaria de la tabla MECÁNICOS por Nombre y Apellidos de empleado.

Primero eliminamos la clave primaria la cual al ser foránea necesitamos el comando CASCADE

ALTER TABLE Mecanicos DROP PRIMARY KEY CASCADE;

Segundo creamos la clave primaria la cual esta formada por varios campos

ALTER TABLE Mecanicos ADD CONSTRAINT Mec_Cla_PK PRIMARY KEY (Nombre,Apellido,Apellido2);

8. Renombra la tabla PROPIETARIOS por CLIENTES.

RENAME Propietarios TO Clientes

9. Elimina la tabla VEHÍCULOS.

Como tiene claves foráneas hacia la tabla Propietarios debemos utilizar la instrucción CASCADE CONSTRAINTS

DROP TABLE Vehiculos CASCADE CONSTRAINTS;

10. Crea un usuario con tu nombre y clave BD02 y dale todos los privilegios sobre la tabla MECANICOS.

Creamos el usuario José con claveBD02

CREATE USER Jose IDENTIFIED BY BD02;

Le damos todos los permisos sobre la tabla Mecánicos

GRANT ALL ON Mecanicos TO Jose;

Page 7: Esquema Base datos

11. Ahora al usuario anterior quítale permisos para modificar o actualizar la tabla MECÁNICOS.

Quitamos los privilegios que puedan hacer modificar o actualizar la tabla.

REVOKE ALTER,DELETE,INSERT,UPDATE ON Mecanicos FROM Jose;