como se modela una base de datos asi

ricm

Se incorporó
28 Agosto 2005
Mensajes
7.536
Quiero guardar datos en Mysql y los datos son de esta manera:
distont.gif

Como ven hay titulos en las filas y en las columnas, como puedo modelar una base asi? yo suelo usar bases donde titulos estan solo en 1 de las 2. No tengo idea que es lo optimo para algo asi.

Lo que se me ocurre es crear una tabla por "ciudad" lo que parece tedioso.
 
Última modificación:

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
Eso es una matriz de adyacencia

Es una fila por cuadro. Distancia entre santiago_concepcion 400km.

Para hacerlo mas rápido, utilizas índices enteros como fk a una tabla que se llame ciudades.

Enviado desde mi XT1032 mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.474
creo que algo así como esto te puede servir, ojo que es psuedo-código en MySQL:

Código:
CREATE TABLE cities (
   id INT AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(255) NOT NULL
);

CREATE TABLE distances (
    from_city INT NOT NULL,
    to_city INT NOT NULL,
    distance INT NOT NULL,
    FOREIGN KEY (from_city) REFERENCES cities.id,
    FOREIGN KEY (to_city) REFERENCES cities.id,
    -- Algunas claves dependiendo obviamente de la forma de tus consultas
);

Saludos.
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.474
En realidad fue @Matjazz el de la idea, básicamente me basé en su idea para crear el código xD


Sent from my iPhone using Tapatalk
 
Upvote 0

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
puta yo le doy el crédito a unreal porque a mi me da paja escribir código desde el celu jajaja...

pero bueno, esa es la forma de modelar grafos en una base de datos.
 
Upvote 0

ricm

Se incorporó
28 Agosto 2005
Mensajes
7.536
No entendí algo para ser sincero ¿como agrego los datos?. solo tengo la columna distance pero originalmente son varias columnas.
Regreso a la hoguera de los noob.
 
Upvote 0

mmirandap

Gold Member
Se incorporó
1 Septiembre 2006
Mensajes
2.452
No entendí algo para ser sincero ¿como agrego los datos?. solo tengo la columna distance pero originalmente son varias columnas.
Regreso a la hoguera de los noob.

Debes insertar por columna, pero con la salvedad de que cuando insertes las ciudades, tendrás que crear un trigger que pase el dato a distancias. Algo asi como insertar en cascada.

Asi mas menoh:

insert on columna1 (id.nextval,name)

Y el trigger:

create trigger nombre_trigger after insert on 'cities'
for each row insert into distances (cities_id) values (new.cities_id)

Eso de lo que recuerdo, basado en lo que posteo don unreal4u
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.474
Trigger la podría hacer, aunque quizás tb crear una función que cree los datos, en la forma de que recibe dos ciudades y una distancia, y de esa forma en la función creas las entradas en la ciudad, para dp crearlas en las distancias.

En lo que hay que ponerle ojo en esta función, es que no puedes crear la misma ciudad más de una vez, es importante que cada ciudad sólo esté una vez, así que quizás no sea mala idea ponerle una clave única al nombre de la ciudad, no la ocuparás para buscar, pero sí limitarás la inserción (aunque no a prueba de tontos debo decir).

Luego, seleccionas las 2 id's que acabas de insertar: tu desde y hacia. Esas dos id's las insertas en las distancias junto con la distancia que es, y aquí es importante que dupliques la columna en el sentido contrario. Esto último no será lo más limpio y quizás se podría hacer de forma más bonita, pero te facilitará la vida en las queries posteriores. Si alguien tiene una mejor idea, que hable ahora o calle hasta el próximo mensaje.

Saludos.
 
Upvote 0
Subir