Ayuda con base de datos. Formulacion correcta? Cumple con Boyce-Codd?

Iniciado por LeandroRodriguez, 19 Octubre 2015, 22:53 PM

0 Miembros y 1 Visitante están viendo este tema.

LeandroRodriguez

Hola, buenas tardes, necesito ayuda con un trabajo práctico que estoy haciendo para la materia bases de datos.
El tema es así, el profesor me pidió que haga un base de datos de una agencia de taxis. Las condiciones de la base de datos son las siguientes:


Se debe diseñar, implementar y documentar una base de datos para una agencia de taxis.
Se ha relevado que es necesario registrar lo siguiente:

•   Datos personales de los choferes
•   Datos de los autos que conducen.
•   Un chofer utiliza un sólo auto pero un auto puede ser conducido por varios choferes.
•   Hora de inicio  y finalización  de trabajo por días (Los choferes trabajan en horario y días variables)
•   Viajes que realiza un chofer origen del mismo, fecha y hora de comienzo,  destino, fecha y hora de finalización (los dos últimos opcionales).

Yo primero cree el diagrama entidad-relación, y luego hice el diseño de las tablas. Pero cuando lo termine, lo siento medio vacío, no se si esta bien hecho y tampoco estoy seguro que cumpla las condiciones de Boyce-Codd.

Las tablas que cree me quedaron así :

Table Chofer:

Dni,  INT
Nombre, TEXT
Apellido, TEXT
Edad, INT
Primary key = Dni

Table Auto:

Dnichofer,  INT
Marca, TEXT
Modelo, TEXT
Primary key = Dnichofer

Table trabajo:
Dnichofer , INT
FechaHoraInicio, DATETIME
FechaHoraFin, DATETIME
Primary key = (Dnichofer,Fechahorainicio,Fechahorafin)

Table viaje:
Dnichofer , INT
FechaHoraInicio, DATETIME
FechaHoraFin, DATETIME
LugarOrigen, TEXT
LugarFin, TEXT
Primary key = (Dnichofer,Fechahorainicio,Fechahorafin)


Están bien las tablas? Alguna recomendación? Mi idea es hacer asi las tablas y después manejar todas las restricciones con código php. Voy a hacer una pagina con mysql y php y manejar las excepciones ahí.
Nunca publique en el foro asi que quizás tenga algo mal, ya sea en el formato de la pregunta u otra cosa, cualquier cosa me dicen y lo arreglo, gracias!

engel lex

CitarUn chofer utiliza un sólo auto pero un auto puede ser conducido por varios choferes.


Table Auto:

Dnichofer,  INT
Marca, TEXT
Modelo, TEXT
Primary key = Dnichofer


estás atando un auto al chofer, solo ese chofer tiene que ver con ese auto y un chofer podría tener varios autos... debe ser al contrario, el chofer debe estar atado al auto, ya que varios pueden referenciarlo a el, pero el no puede referenciar a uno solo


CitarHora de inicio  y finalización  de trabajo por días (Los choferes trabajan en horario y días variables)

Table trabajo:
Dnichofer , INT
FechaHoraInicio, DATETIME
FechaHoraFin, DATETIME
Primary key = (Dnichofer,Fechahorainicio,Fechahorafin)


si la clave primaria es dnichofer, el chofer solo puede tener una entrada, ya que la clave primaria debe ser unica, al igual que hora inicio y hora fin, ningún otro chofer podría tener un horario en las mismas horas

Table viaje:
Dnichofer , INT
FechaHoraInicio, DATETIME
FechaHoraFin, DATETIME
LugarOrigen, TEXT
LugarFin, TEXT
Primary key = (Dnichofer,Fechahorainicio,Fechahorafin)


lo mismo que el punto anterior
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LeandroRodriguez

#2
[code]
[code]

estás atando un auto al chofer, solo ese chofer tiene que ver con ese auto y un chofer podría tener varios autos... debe ser al contrario, el chofer debe estar atado al auto, ya que varios pueden referenciarlo a el, pero el no puede referenciar a uno solo



Hola, gracias por la respuesta, el tema es que la consigna me esta pidiendo que un chofer tenga solo un auto. Entonces yo le permito al chofer tener solo un auto, podrías revisar a ver si tengo razón? Porque lo veo muchas veces y creo que las tablas están definidas para que un chofer tenga solo un coche. Puedo estar equivocándome y no veo donde, si me pudieras confirmar si tengo razón te lo agradezco.



si la clave primaria es dnichofer, el chofer solo puede tener una entrada, ya que la clave primaria debe ser unica, al igual que hora inicio y hora fin, ningún otro chofer podría tener un horario en las mismas horas

lo mismo que el punto anterior



Si, el tema es que no expresé bien el como hice la clave primaria. En realidad, la clave primaria esta conformada por: (Dnichofer,FechaHoraInicio,FechaHoraFin), es una clave compuesta.
Y en el caso siguiente también es una clave primaria compuesta con (Dnichofer,FechaInicioViaje,FechaFinViaje). Esta bien usar estas claves compuestas? O es mejor encontrar otra manera de relacionar las tablas ?. No quise usar llaves foráneas porque me piden que se cumplan las condiciones de Boyce-Codd.
Todavía tengo esas dudas, desde ya, gracias![/code][/code]

0roch1

Qué tan detallado se requiere el diseño?.

Tal vez yo agregaría otros datos extras a las tablas, por ejemplo Chofer.

Dni,  INT
Nombre, TEXT
Apellido, TEXT
Edad, INT
Primary key = Dni
-----
Direccion
Telefono
TipoLicencia
FechaNacimiendo
FechaIngreso
Activo

Si guardas solo la edad el chofer siempre será la misma, en cambio con la fecha de nacimiento puedes calcularla.
Tener la fecha de registro de la "entidad" siempre es bueno.

------------------------------------------
Dnichofer,  INT
Marca, TEXT
Modelo, TEXT
Primary key = Dnichofer

y si hay dos autos de la misma marca y modelo?,

Dnichofer: 12345, Marca: Aston Martin, Modelo: DB9
Dnichofer: 67890, Marca: Aston Martin, Modelo: DB9


cómo sabrás cuál taxi le pertenece a tal chofer?, agrega el número de placa y ese será la Primary Key.
Dnichofer es Foreign Key en esta tabla.

Por ahora son todos los comentarios de mi parte.





LeandroRodriguez

Ahora veo en donde me estaba equivocando, estaba relacionando mal el auto con el chofer. Buena data lo de poner fecha de nacimiento en edad también, voy a tener en cuenta las recomendaciones, gracias!