Etica profesional
1. La empresa tiene distintas oficinas repartidas por distintas ciudades donde los clientes pueden alquilar el vehículo.
2. En cada momento desea poder saberse si un coche/camión está alquilado o no, y en su caso, a qué cliente, la fecha de alquiler y devolución, y quien es el empleado quese lo alquiló, también los clientes pueden alquilar los vehículos por la página web de la empresa directamente sin necesidad de un intermediario.
3. Un mismo cliente puede alquilar varios vehículos en el mismo tiempo.
4. Los camiones se guardan en garajes especiales identificados por COD_GARAJE que permiten guardar varios camiones, también interesa DIRECCIÓN_GARAJE.
5. de cadagaraje también nos interesa saber que cuantas plazas están libres y cual son.
6. Los datos principales son:
COCHE (Matrícula,VelocidadMáxima,Nºpasajeros,Precio)
CAMIÓN(Matrícula,Nºejes,Tonelaje,Precio)
7. Todos los vehículos son coches o son camiones, y NO ambos.
8. Se desea guardar un histórico con todos los alquileres. Y saber quien es el jefe de la oficina conmás alquileres.
DIAGRAMA ENTIDAD RELACIÓN[pic]
MODELO RELACIONAL
OFICINA (Id_oficina, Dirección, Teléfono, Ciudad)
GARAJE (Cod_garaje, Dirección,ciudad)
PLAZA( Id_plaza, Número, Letra, Piso, Ocupación, Garaje)
CLIENTE (Cod_cliente, Nombre,Teléfono,Dirección)
ISA de EjG por ejemplo:
VEHÍCULO(Matrícula,Num_bastidor,Precio)
COCHE(Matrícula,Velocidad_Max, pasajeros)
CAMION (Matrícula,tonelaje,num_ejes)
FECHA (fechaini,fechafin)
EMPLEADO(Id_empleado, Nombre, Dirección, Jefe, Oficina)
ALQUILAR(Matrícula, Cod_cliente, Fechaini, Fechafin)
ALQUILAR EN OFICINA(Id_empleado, Matrícula, Cod_cliente,fechaini,fechafin)
GUARDAR( Matrícula,Cod_garaje)
LA ISA
La ISA enuna sola tabla
Vamos a acoplar la ISA entera en una sola tabla, usaremos de clave primaria la matrícula, que es la clave de la tabla Vehículo, hemos indicado un relación ISA de tipo exclusiva total, así crearemos un campo que se denominará tipo, y así poder controlar si el vehículo es de tipo coche o de tipo camión. Así colocaremos un check que controle que si es un camión, los campos develocidad_max y pasajeros, que pertenecen al coche, valgan nulo. Y a la inversa igual con el coche y los campos tonelaje, n_ejes y cod_garajes, también deben de valer nulo.
El num_bastidor, por lo especial y único que es, lo haremos UNIQUE y NOT NULL, ya que cada coche tiene uno y no se puede repetir. Por otro lado el cod_garaje, al ser clave ajena en nuestra tabla, indicaremos que hace referencia a latabla garaje, y que es not null, ya que la cardinalidad mínima de la relación en la parte del garaje es 1.
Como podemos observar, tenemos ventajas muy claras como la eficiencia, de no hacer falta reagrupar con joins y que la clave primaria común es mucho más fácil de implementar. Por la contra hay muchos campos nulos, cosa que consume memoria y reserva espacio, para nada. Esto es ideal paratablas que tienen muchos campos en la relación y tan solo uno o dos en la especialización.
En nuestro caso es fatal, ya que las especializaciones constan de demasiados campos como para hacer este tipo de ISA. Mucha memoria desaprovechada.
vehiculo_coche_camion
matricula CHAR(12) PRIMARY KEY,
precio DECIMAL(8,2),
num_bastidor CHAR(17) UNIQUE NOT NULL,
velocidad_max CHAR(15),pasajeros NUMERIC(2),
tonelaje NUMERIC(3),
num_ejes NUMERIC(2),
tipo CHAR(18) CHECK(tipo IN('Vehiculo_Coche',
'Vehiculo_Camion')) NOT NULL,
CHECK((tipo='Vehiculo_Coche' AND tonelaje IS NULL
AND num_ejes IS NULL)
OR (tipo='Vehiculo_Camion' AND tipo='Vehiculo_Camion'
AND velocidad_max IS NULL AND pasajeros IS...
Regístrate para leer el documento completo.