Problema base de datos!

Phoenix4

Hola!
Estoy intentando crear una base de datos en acces y se me plantean una serie de dudas con el modelo E/R (Entidad/Relación).
Hace como 5 años que di bases de datos y casi no me acuerdo de nada.
La cosa es crear una base de datos para el trabajo de un amigo.
Es para una empresa en un aeropuerto, que se dedica a ofrecer ayuda a personas de movilidad reducida (PMR).
Tengo una tabla llamada PMRS, con sus datos.
Otra con los tipos de PMR (viene por abreviaturas según lo que tenga el PMR, BLND es un blind o ciego, DEAF un sordo, etc)
Una con las fechas, donde esta la fecha del dia en la que viaja el PMR, la hora de inicio a la que se le empieza a atender y la hora de fin, cuando se termina de atenderle.
Una con los vuelos, donde viene el numero de vuelo y la compañia en la que viaja.
Luego dos tablas, con salidas y llegadas.
Un PMR puede salir por la mañana, volver a la tarde o sólo llegar o sólo salir.
Pongo mi actual esquema E/R:

Se me presentan las siguientes dudas:
Creo que el modelo E/R no esta bien del todo.
Las relaciones serian todas 1 a varios, como clave principal pondría siempre el primer ID de cada tabla.
Lo que no se es si las ralaciones estan bien, que creo que no.
En la tabla PMRS tendria que haber un ID de las demas tablas no?
Tendría redundancia de datos ahi?
Si alguien me puede ayudar, lo agradecería mucho.
Gracias!

Phoenix4

Nadie sabe?

Z3R0KULL

Pues la verdad es que si, que está mal el modelo E/R.
Te recomendaria que pusieras la cardinalidad para no liarte.
Te falta pasar las FK a las tablas respectivas (Por ejemplo, en pmrs tienes que pasar como FK la PK de tipo). Cuando hayas puesto la cardinalidad te saldrá solo el tema de FK
Con este modelo, tal como lo tienes no te van a salir las tablas normalizadas.

Dame un rato y te hago uno, pero tu enunciado no es que esté muy claro ^^ (vamos que hay cosas que no entiendo :P)

EDIT: Por cierto, la relacion pmrs - vuelo deberia ser de M:N, por lo que deberias sacar otra tabla entre medias (una llamada pmrs-vuelo mismo) y con eso incluso te podrias quitar las tablas llegadas y salidas

EDIT2: Por que la tabla "Tipo" tiene tantas columnas? no te conviene mas algo asi como "id_tipo/ descripcion" (para abreviar) donde descripcion sea el tipo de minusvalia?

EDIT3: que diferencia o que relacion tiene "fechas" con "llegadas" y "salidas"?

Murkay

Coincido con #3

GamA

Coincido con #3.

Menudo cacao tienes ahí montado. Las relaciones se superponen, la verdad es que no tiene demasiado sentido lo que planteas. Deberías rehacerlo.

Te recomendaría ver ejemplos de diagramas E/R:

http://es.wikipedia.org/wiki/Modelo_entidad-relaci%C3%B3n

Deberías anotar la cardinalidar y sobre todo no meter todas las relaciones a una relación que las agrupe hasta una tabla.

Cada relación une dos tablas o conjuntos de tablas si se trata de una relación ternaria, pero no pueden unificarse en una relación 40 relaciones distintas.

Eso quiere decir que si quieres que la tabla A y B se relacionen co C no unas las relaciones de A y B hasta C, sino que hagas una relación de A a C y otra de B a C.

Por cierto. Según has puesto eso ahí, la tabla TIPO no sirve de nada, pues no se relaciona con nada (o al menos su PK no está visiblemente relacionada en otra tabla). Si es tipo de aeronave debería relacionarse con vuelo y por tanto ID TIPO debería estar, o bien como FK en Vuelos o bien deberías crear una relación a parte (siendo 1:1 no hace falta) llamada TipoVuelo que relacione la ID Vuelo con ID Tipo.

No se si ese ID Tipo se refiere a otra cosa, pero como te digo ahí esa tabla no está haciendo nada :S

Esto se aprende haciéndolo.

Phoenix4

Vale, admito que creando modelos E/R soy malísimo...
Planteo nuevamente el problema, a ver si se puede sacar un BD efectiva y sin redundancia.
El tema consiste en lo siguiente:
La empresa se dedica a ofrecer un servicio de atención a personas con movilidad reducida en los aeropuertos. Dicha persona, recibe el nombre de PMR.
Cuando un PMR llega a la terminal para viajar, pide el servicio en el punto de información o directamente a la compañia y esta llama al punto.
En el momento que se le empieza a atender es la hora de inicio de asistencia y se rellena una ficha con con dicha hora y la fecha del dia , su nombre y apellidos, asi como con los siguientes datos:
Se define el tipo de asistencia que necesita, que pueden ser varios:
-WCHR: un PMR que necesita silla de ruedas hasta el avión, sube por si solo las escaleras de la aeronave.
-WCHC: un PMR que necesita silla hasta el avión y al que necesita otra silla especial para subir a la aeronave, hasta su asiento.
-BLND: un ciego
-DEAF: un sordo
-DEAF/BLND: un sordo/ciego
-DPNA: un pasajero con alguna discapacidad psíquica o física, hay que especificar en observaciones la discapacidad (Párkinson, esquizofrenia, etc)
-MAAS: cualquier otro pasajero no incluido en los anteriores, hay que especificar que deficiencia tiene en una casilla de observaciones. (Pasajero mayor desorientado, con bastón, andadora, etc)

Además, si el pasajero es WCHR o WCHC, en una casilla de observaciones, hay que especificar si lleva silla de ruedas propia y su tipo (Normal, de batería líquida o de batería seca) o si pide silla de ruedas a la empresa, en cuyo caso se le cede una.

Luego, se pone el nombre de la compañía y el número de vuelo en el que viaja el PMR.
Cuando se le ha terminado de embarcar en la aeronave, se anota en la ficha la hora de finalización del servicio.

Un PMR puede sólo pedir el servicio para un viaje de ida, en cuyo caso sería un embarque.
Por otro lado, a la empresa se le puede avisar desde otro aeropuerto, en cuyo caso sólo sería una llegada.
De ahí que se necesita siempre la fecha del dia en el que viaja el PMR, la hora de inicio y la hora de fin de asistencia.
En una llegada, sería la hora de llegada de la aeronave.
Un PMR también puede llegar, pedir el servicio, viajar y unas horas mas tarde, volver en otro vuelo.
Habrá siempre llegadas y salidas. Algunos sólo salen o llegan y otros ambas cosas.
Aparte de eso, se tiene un listado diario de servicios que figuran en cita, puesto que el PMR puede reservar via agencia de viaje, teléfono o internet el servicio con antelación.
Asi en cada servicio, hay que especificar si venia en cita, nos aviso otro aeropuerto o si el PMR es captado en la terminal.
A base de esa información, habría que definir el modelo E/R.
Espero haberlo aclarado un poco, perdonad que este tan verde, pero se me da fatal. El crear la base de datos luego, es lo mas sencillo para mí. El modelo E/R es el que no saco nunca.
Gracias por vuestra ayuda!

GamA

"En el momento que se le empieza a atender es la hora de inicio de asistencia y se rellena una ficha con con dicha hora y la fecha del dia , su nombre y apellidos, asi como con los siguientes datos:"

Leyendo eso te falta un ID Fecha en la tabla del PMR o bien 3 campos más: fecha, hora inicio, hora fin (yo usaría 3 campos, es más veloz).

Por otro lado en la tabla Tipo no hacen falta tantos campos (e incluso te faltaría uno). Te faltaría el campo "observaciones" o "comentarios" y te sobran todos los que son acrónimos, deberías usar un campo que se llame algo así como "tara" en el que almacenes un código de la tara que posee. Normalmente cuando hay muchas posibilidades y pueden ocurrir todos a la vez lo mejor es guardarlo como binario:

WCHR -> 20
WCHC -> 21
DPNA -> 22
BLND -> 23
DEAF -> 24
MAAS -> 25

Así si el individuo es ciego, necesita silla de ruedas y además está sordo puedes hacer:

011001 para indicar las 3 taras a la vez y ahorrar espacio, lo cual se traduciría en "25"

Eso en un Entidad relación no se podría plasmar directamente, necesitarías una nota indicándolo.

De todas formas no tienes relacionada dicha tara con nadie, cuando realmente debería estar asociado al PMR.

Por ello necesitas o bien incluir la PK de la tabla TIPO en la tabla PMRS como ID TIPO, o crear una tabla intermedia (esto ya depende de gustos). Si añades dicho campo a PMRS la tabla actualmente estaría como esto:

PMRS

ID PMR
Nombre
Apellido 1º
Apellido 2º
ID FECHA
ID TIPO

Luego haces una relación con la tabla TIPO de 1 a 1 y una con la tabla FECHA de 1 a 1 también.

Si usases los tres campos para fecha y horas no necesitarías relación con la tabla de fechas, eso a tu elección.

A la hora de implementar esto recuerda usar las FKs para las IDs externas como ID FECHA e ID TIPO para que en caso de borrar el PMRS se borren las fechas y tipos asociadas a este.

Por otro lado el vuelo debería asociarse al PMR también, pero como este puede pedir varios vuelos no podemos meter ID VUELO en PMRS, sino que necesitamos una relación por el medio que se transforme en tabla a la hora de implementar con dos campos, la PK de cada tabla que relaciona (ID VUELO e ID PMRS). La tabla puede llamarse VuelosPMRS por ejemplo e incluir esos dos campos para relacionar ambas tablas.

Con respecto a las tablas de llegadas y salidas tampoco es necesario dividirlas, se puede crear un campo en la tabla VUELOS que sea "tipo" en el que si es 0 es salida y si pone 1 es llegada, por ejemplo, lo cual reduce bastante el nº de tablas sin cargarse funcionalidad. Eso si la ID FECHA entonces ha de meterse en la tabla Vuelos, y quedaría así:

VUELOS

ID Vuelo
Tipo
Compañía
num_vuelo
ID Fecha

Esta tabla ya te digo que debería estar relacionada con PMRS por la tabla VueloPMRS (o similar)

De todas formas no veo 100% necesaria la tabla de fechas, ya que con cambiar ID Fecha en cada tabla por "fecha, hora_ini, hora_fin" vale y te ahorras meter una tabla de por medio.

Tampoco me lo he leido muy a fondo pero más o menos te ayudará lo que te he puesto.

P.D: ¿Para que és si puede saberse? :P

Phoenix4

Gracias Gama!
Me has resuelto varias dudas que tenía.
Esta tarde subo del trabajo las fichas que se le hacen a cada PMR cada vez que viaja.
El jefe de la empresa, quiere informatizar esas fichas en una base de datos, seguramente Microsoft Access.
La haré un escaneo a dicha ficha y la posteo aquí, que creo que aclara bastante los datos que necesitan informatizar ahí.
Por ahora, gracias por tu ayuda!

GamA

#8 De nada hombre, si te surge alguna otra duda ya me pasaré por aquí para intentar ayudar :P

Phoenix4

Gama, aquí te dejo la ficha en blanco de un PMR tal como dije.
Los datos con una X en rojo son los que no hacen falta.
Los marcados en verde son los que se necesitan para la base de datos.

Espero que eso acalare un poco el planteamiento del problema.
Gracias por vuestra ayuda!

erdanblo

No se que hace ID PWR en las salidas, de todos modos..., yo creo que asi quizás lo entiendas.

Aunque las BBDD no son lo mio (y ese ER no anda demasiado bien,pero bueno).

Phoenix4

Gracias erdanblo!
Podrías explicarme un poco porqué lo has hecho así?
Qué es el FG?

D

creo que FG se refiere a FK, Foreign Key

Phoenix4

Ah ok.
Pero no se si esta bien del todo el planteamiento de erdanblo.
Me parece lógico lo que dice Gama de crear una tabla intermedia entre PMRS y vuelos.

D

PMRS que es exactamente?

la tabla intermedia se coloca cuando la relacion entre PMRS - VUELOS es de N:M (Varios a Varios)

La tabl aintermedia te la divide en 2 relaciones de 1:N

GamA

#13 Si, se confundió, es una FK (Foreign Key)

#15 Es que esa es la clave, en un vuelo pueden ir varios PMRs y cada PMRs puede aparecer en varios vuelos. El enunciado dice que un PMRs puede cojer un vuelo de ida y luego de vuelta. Si agrupamos en una tabla todos los vuelos (lo cual es lo lógico) tenemos una relación de N:M, por lo que nos hace falta una tabla intermedia.

De todas formas no hay un diseño ideal para cada problema, sino que puede haber varios que sean muy buenos. Es como decir que en una aplicación solo se puede usar un patrón de diseño para tener la solución óptima.

Soluciones hay muchas, yo te he dado una, pero seguro que hay muchas que también valen.

Un saludo

erdanblo

Sí, FG = FK, FAIL!.

Lo que dice gama es cierto, de todos modos, mi esquema no es un ER, ya que no tiene entidades ni nada, es la tabla y los campos (lo que te saca Access cuando haces las relaciones vaya).

Phoenix4

Gama, según tú, como debería de quedar el modelo E/R?

D

#18 no hay un modelo fijo par aun problema en cuestión.

Tu puedes hacer una BDD con 20 tablas, y si t epone skiskilloso, puedes sgeuir "afinando" y sacar otras 20, y asi hasta el infinito. Es bastante abstracto.

Es la mierda de las BBDD xD

Addys

Si no me equivoco, quien lleva la asistencia a PMR's en los apt españoles no es clece??

MAAS es Meet and assistance, es decir que se le da asistencia xk puede que sea mayor y no pueda andar mucho y eso.

No te faltaría WCHS (Steps??)

Yo marcaría también si el vuelo en el cual va a embarcar/desembarcar es por finger o remoto por el tema del ambulift.

Yendo al tema bdd's (aunque yo posteraría en ForoDEV pero bueno), en principio yo hablaría con aena para que te pasaran la lista de vuelos del aeropuerto en concreto (si no lo hacen ya) y eso lo pondría en una tabla con toda la info de la asistencia (puerta, eta o etd, stand, etc), luego n:m con la tabla de pmr's solicitados por la cia donde relacionar al pmr con el vuelo. Si consideras varios servicios de asistencia (por ejemplo un agente va al checkin y lo lleva a la puerta, luego mas tarde otro va al embarque (por el tema de retrasos y de equipos que se usan pueden ser diferentes agentes)) haría una tabla de servicios donde donde guardaría hora inicio y fin de ese servicio y n:m agentes implicados y/o material empleado (silla, ambulift, etc). Luego el tipo de pmr lo pondría en otra tabla relacionada n:m con la tabla de los pmr.

No sé asi a bote pronto es lo que se me ocurre, seguro que es mejorable.

En cuanto a la implementación, seguro que no lo haría en acces xDD, mysql rules!

Saludos!

D

mysql + Toad for mysql creo que es la mejor opcion

Phoenix4

#20
Sí, correcto. Aquí es Clece, en otros aeropuertos de Canarias también, aunque en algunos lo lleva Groundforce.
Este aeropuerto es pequeño, y aún la terminal nueva no esta terminada.
Por eso aún no hay fingers.
WCHS falta si, era mero ejemplo y ya lo cargaría en la BD.
El listado de vuelos lo pasa Aena mensualmente, ese no es el problema.
Mi problema ahora mismo es crear un modelo E/R medianamente eficaz y sin redundancia con los datos que he puesto ahí. Y debería ser en Access que es con lo que dejan trabajar ahí.

PD: Lo del ambulift tampoco me hace falta. Sólo es necesario meter los datos en verde de la ficha en un base de datos. Todo lo demas es relativo.
La empresa solo quiere mantener constancia de los PMR que viajan, su vuelo y compañia, así como el tipo y las horas de inicio y fin.
Más no se necesita!

erdanblo

#20 Yo no he dicho que lo haga en Access.

Addys

Si es sólo para llevar una relación no hace falta tampoco ser tan precisos, vamos lo que se necesite.

Lo guay sería hacer un sistema de gestión de pmr's para un apt basado en sas para que cualquier agente pudiese dar parte de sus asistencias y llevar un control exahustivo. Lo que yo te dije es de mi experiencia en el apt de bcn donde clece va de culo, según mi opinión, por una mala gestión de los agentes y del material, de ahi mi preocupación por si el vuelo es remoto o finger, el tema de ambulift, etc. También es cierto que clece acaba de empezar desde que se unificó el tema de los pmr's en una sola empresa (no como antes que se encargaba el handling del vuelo)

De todas formas si clece quiere, y paga bien, yo estaría dispuesto a apuntarme a hacer algo decente para la gestión exhaustiva de pmr's! xD

Además cuento con experiencia aeroportuaria de bastantes años en bcn!

Saludos!

Edit:

#23 no dije que le dijeses que lo hiciera en access, se lo decía a #1 que dijo que lo haría en access xD

Phoenix4

#24
Clece ya tiene un sistema de gestión que les proporciona Aena.
Ese es una mierda como tú dices, de hecho.
Pero ese supongo que no lo cambiarán.
El que a mí me piden, es uno personal para un ordenador sólo en un punto de información.
Me lo ha pedido el gestor técnico como favor, y no es para Clece sino para el tener un registro fácil.

Phoenix4

Alguien me puede echar una mano con un modelo E/R medianamente aceptable? :(

erdanblo

Tenidno en cuenta la imagen esa de sin barreras, yo creo que con 3 tablas lo haces todo (cat. pmr son siempre las mismas no? y el tipo de embargue tb no?)

http://www.mediafire.com/download.php?gen25e2m5ty

Phoenix4

Gracias erdanblo!
Sí, las cetegorías de PMR son fijas, tan sólo hay un campo de observaciones que tiene que ir ligado a toda categoría, por si hay que especificar algo.

Tipo de embarque también. O es un embarque o es un desembarque. Pueden ser ambos, salir un PMR en un vuelo y llegar en otro más tarde.

Los vuelos (Compañia y número de vuelo) si cambian, aunque llegará un momento que los tendré todos almacenados en la BD si se van cargando en ella.

La hora de inicio y fin también es variable.

Un saludo y gracias por la ayuda. Le echaré un vistazo!

Phoenix4

No está mal planteado.

Pero en teoría las categorías se pueden resumir en otra tabla no?
Llamarla categorías, meterlas todas y relacionarla con id_categoría no?

En viajero, mejor PMR. Y el DNI no lo usamos, sólo nombre y apellidos.

erdanblo

Claro.

Lo del DNI es por si necesitas una clave única

En Access hay una opción para que al rellenar un registro, por ejemplo el de categorias, salga los campos que hay en otra tabla en plan desplegable.