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

Problema de almacenamiento

Estas en el tema de Problema de almacenamiento en el foro de Mysql en Foros del Web. Buenas buenas, amigos Tengo el siguiente lio y me gustaría saber sus comentarios al respecto: Tengo una tabla aaaa con la siguiente info: 1 - ...
  #1 (permalink)  
Antiguo 15/09/2010, 17:41
 
Fecha de Ingreso: febrero-2004
Ubicación: Bogotá, Colombia
Mensajes: 191
Antigüedad: 20 años, 2 meses
Puntos: 1
Sonrisa Problema de almacenamiento

Buenas buenas, amigos

Tengo el siguiente lio y me gustaría saber sus comentarios al respecto:

Tengo una tabla aaaa con la siguiente info:
1 - abeja
2 - gato
3 - perro
(Esta tabla va a seguir creciendo gradualmente)

Necesito guardar una asociación entre cada elemento de esa tabla así:
1 - abeja
2 - gato - abeja
3 - gato - perro - abeja
4 - gato - perro
5 - abeja - perro

Como ven, cada asociación puede tener n elementos.

La idea es consultar en esta tabla con la combinación que se desee y de esta manera se obtenga el id de la asociación.

La pregunta es: Cómo puedo almacenar esto de la manera correcta y más óptima posible?

Muchas gracias
  #2 (permalink)  
Antiguo 15/09/2010, 20:51
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Problema de almacenamiento

crea una tabla donde guardes las relaciones, osea el id de cada animal

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 15/09/2010, 20:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema de almacenamiento

Si analizas el problema desde la óptica del álgebra de Boole o desde la teoría de conjuntos, podrás ver que no existen en realidad N atributos en la entidad. Una razón de ello es porque ciertas relaciones están absorbidas por otras.
En tu ejemplo, la relación gato - perro - abeja ya está dada por gato - perro y perro - abeja, por lo que se puede establecer que se trata de un modelo lógico de una sola entidad con una relación M:N consigo misma, lo que a nivel de tablas se expresa en dos tablas, una de las cuales contiene sólo las PK de la segunda que establecen la relación.

¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/09/2010, 08:26
 
Fecha de Ingreso: febrero-2004
Ubicación: Bogotá, Colombia
Mensajes: 191
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Problema de almacenamiento

Gracias por responder, gnzsoloyo

Perdón la ignorancia, pero me gustaría saber cómo expresa su idea en SQL.
Gracias.
  #5 (permalink)  
Antiguo 20/09/2010, 15:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema de almacenamiento

Algunos te dirán que guardes en un campo multivaluado, separando los datos con coma, guión o lo que sea, pero yo no seré uno de ellos. Naturalmente, luego podrías buscar dentro de ese campo cadena multivaluado con expresiones regulares o funciones, pero su actualización resultará complicada y cuando aumenten los datos, más lenta.

La otra posibilidad sería esta, según creo:

tabla aaaa
animal_id - animal
1 - abeja
2 - gato
3 - perro
(Esta tabla va a seguir creciendo gradualmente)

asociaciones
id - asociacion - animal_id
1 - 1 - 1
2 - 2 - 2
3 - 2 - 1
4 - 3 - 2
5 - 3 - 3
6 - 3 - 1
7 - 4 - 2
8 - 4 - 3
9 - 5 - 1
10 - 5 - 3
Si el orden de los animales en cada asociación fuera importante, tendrías que añadir el número de orden en la asociación como campo

Ahora podrás buscar cualquier cosa, y con suma rapidez.

Así es como yo lo almacenaría

Última edición por jurena; 20/09/2010 a las 16:34

Etiquetas: almacenamiento
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 10:19.