Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ayudenme En Esto Amigos

Estas en el tema de Ayudenme En Esto Amigos en el foro de Bases de Datos General en Foros del Web. Quiero guardar la distancia que existe entre dos punto en unas tablas llamemoles ciudades. La primer tabla seria (ciudad) Codigo_ciudad pk Nombre_ciudad La segunda tabla ...
  #1 (permalink)  
Antiguo 13/09/2007, 16:36
 
Fecha de Ingreso: noviembre-2006
Mensajes: 15
Antigüedad: 17 años, 5 meses
Puntos: 0
Ayudenme En Esto Amigos

Quiero guardar la distancia que existe entre dos punto en unas tablas llamemoles ciudades.

La primer tabla seria (ciudad)
Codigo_ciudad pk
Nombre_ciudad

La segunda tabla seria (distancias)
codigo_distancia pk
Nombre_ciudad fk
Nombre_ciudad fk
Distancia

Se puede tener el campo de nombre_ciudad repetido en la tabla distancias para enlazar con las dos ciudades, o necesitaria crear dos tablas de ciudades para que cada una envia un nombre de ciudad.
  #2 (permalink)  
Antiguo 14/09/2007, 08:12
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Ayudenme En Esto Amigos

Ya haría una estructura algo así:

La primera tabla: ciudad
Codigo_ciudad [PK]
Nombre_ciudad

La segunda tabla: distancias
codigo_distancia [PK]
ciudad_origen [fk -> ciudad.Codigo_ciudad]
ciudad_destino [fk -> ciudad.Codigo_ciudad]
Distancia

Aunque yo haría PK de la segunda tabla a la unión de los dos campos ciudad_origen y ciudad_destino, y me sobraría el campo codigo_distancia
__________________
Kelpie

Última edición por Kelpie; 14/09/2007 a las 08:13 Razón: Para poner unos colorines...
  #3 (permalink)  
Antiguo 14/09/2007, 10:28
 
Fecha de Ingreso: noviembre-2006
Mensajes: 15
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Ayudenme En Esto Amigos

Ok, te he entendido, ya lo probare, muchas gracias..
  #4 (permalink)  
Antiguo 14/09/2007, 13:34
Avatar de MACGREGOR  
Fecha de Ingreso: enero-2005
Mensajes: 89
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Ayudenme En Esto Amigos

Hola.

Kelpie te ha dado una solución muy buena.

No se si te has fijado pero te ha cambiado los nombres de las ciudades por su código o id en la tabla "distancias".

Si no lo haces así estás duplicando información y creando la posiblilidad inconsistencias de datos. (además de gastando un espacio en disco mucho mayor al guardar un string podiendo guardar un número).
Hay quien dirá que los id's se están duplicando en la tabla "ciudad" y "distancias" pero una clave foránea no se considera duplicidad de datos.

El hecho de utilizar los identificadores de la tabla en lugar de los nombres es lo correcto, ya que lo ideal es que las claves foráneas sean numéricas.
(a la hora de hacer una join entre las dos tablas es infinitamente más rápido comparar dos números que dos cadenas de carácteres).

Respecto a la clave primaria de la tabla "distancias" haría siempre una clave compuesta por los identificadores de las ciudades o los identificadores más la distancia. Esto dependerá de lo que quieras permitir en la DDBB.

¿La distancia entre dos ciudades será siempre la misma?
- entonces los 2 identificadores de las ciudades como clave primaria.

¿existe la posibilidad de que halla 2 o más rutas que comuniquen las 2 ciudades?
- entonces clave primaria los 3 campos. (aunque esto complicaría el esquema de tu DDBB y tendrías la necesidad de crear alguna otra tabla).

Espero que te aclare algún concepto.

Un saludo.

Última edición por MACGREGOR; 14/09/2007 a las 13:39
  #5 (permalink)  
Antiguo 17/09/2007, 08:24
 
Fecha de Ingreso: noviembre-2006
Mensajes: 15
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Ayudenme En Esto Amigos

Cita:
Iniciado por MACGREGOR Ver Mensaje
Hola.

Espero que te aclare algún concepto.

Un saludo.
Claro que me has aclarado unas dudas en especial eso que las llavaes foraneas no se consideran duplicidad de datos si se repiten, y eso es lo que pensaba que estaba un poco raro, muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:01.