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

[SOLUCIONADO] Duda sobre cómo manejar una tabla de relaciones

Estas en el tema de Duda sobre cómo manejar una tabla de relaciones en el foro de Bases de Datos General en Foros del Web. Bueno, como siempre tengo la sensación de que no he puesto un título muy afortunado. A ver si me explico mejor ahora: Parto de una ...
  #1 (permalink)  
Antiguo 05/10/2015, 14:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Duda sobre cómo manejar una tabla de relaciones

Bueno, como siempre tengo la sensación de que no he puesto un título muy afortunado. A ver si me explico mejor ahora:

Parto de una tabla que relaciona otras dos. Esta tabla tiene 3 columnas, la id, la id de una de las tablas y la id de la otra tabla (en una relacion de M:N)

Bueno, pues mi duda es que si en algún momento he de romper alguna relación, se me queda un hueco "vacío"...vamos, que las id ya no son correlativas. Entonces, cuando vuelva a crear otra relación.....¿he de aprovechar esa id o he de seguir a partir de la última?

Obviamente sé que va a funcionar de las dos formas, pero no sé si es una buena práctica o no el "aprovechar" las id que van faltando en lugar de ir siempre añadiendo id desde la última que haya.

Saludos y gracias!
__________________
Mi calculadora en Qt
  #2 (permalink)  
Antiguo 05/10/2015, 14:32
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, 5 meses
Puntos: 2658
Respuesta: Duda sobre cómo manejar una tabla de relaciones

Tienes un error de diseño...
Una tabla relacional, la que define una relación N:M no contiene ID autonuméricos. Nunca.
Las dos FK se usan para definir la PK de esa tabla y no requieren ningun otro campo a menos que un mismo para de FK (las mismas en todos los casos), puedan aparecer relacionadas en más de una ocasión, es decir en diferentes registros.
Esa sola excepción requiere de un discriminante, que normalmente es un campo DATETIME o TIMESPAN, porque tales relaciones se suelen dar en diferentes momentos del tiempo, pero no suelen ser válidos al mismo tiempo. Por supuesto que esto último dependerá de qué tablas, qué relación hay entre ellas y en qué contexto.

En cuanto a los ID autonuméricos, la respuesta es NO. No se vuelve a usar JAMÁS.

sobre esto ya una vez postee en las FAQs de MySQL, donde se aplicarían estos dos conceptos:
Cita:
5. No se recomienda renumerar si existen datos históricos de otras transacciones, que hacen referencia a otros registros que tenían el mismo número. De hecho, en una tabla de stock, las ID jamás cambian porque el hecho que un producto ya no exista ni se fabrique no quiere decir que no aparezca en registros más antiguos. Pisar un ID sería lo mismo que ponerle a un recién nacido el número de documento de un muerto.

6. Es irrelevante tener espacios de números que ya no se usan, en tanto la numeración sea secuencial e incremental. Perder tiempo en renumerar sólo hace que una lista quede más bonita, pero eso se puede hacer perfectamente en la interfase, donde se visualiza la tabla de datos, o bien se pueden usar variables de usuario para generar numeraciones temporales sin afectar la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/10/2015, 14:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre cómo manejar una tabla de relaciones

Lo mas comun es seguir usando las correlativas, porque es mucha validacion saber en donde tienes un hueco......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 05/10/2015, 14:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Duda sobre cómo manejar una tabla de relaciones

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes un error de diseño...
Una tabla relacional, la que define una relación N:M no contiene ID autonuméricos. Nunca.
Las dos FK se usan para definir la PK de esa tabla y no requieren ningun otro campo a menos que un mismo para de FK (las mismas en todos los casos), puedan aparecer relacionadas en más de una ocasión, es decir en diferentes registros.
Esa sola excepción requiere de un discriminante, que normalmente es un campo DATETIME o TIMESPAN, porque tales relaciones se suelen dar en diferentes momentos del tiempo, pero no suelen ser válidos al mismo tiempo. Por supuesto que esto último dependerá de qué tablas, qué relación hay entre ellas y en qué contexto.

En cuanto a los ID autonuméricos, la respuesta es NO. No se vuelve a usar JAMÁS.

sobre esto ya una vez postee en las FAQs de MySQL, donde se aplicarían estos dos conceptos:
Perfectamente contestado, tanto el caso particular que he expuesto como la forma en general de tratar las id de una tabla.

Muchas gracias
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 05/10/2015, 14:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Duda sobre cómo manejar una tabla de relaciones

Cita:
Iniciado por Libras Ver Mensaje
Lo mas comun es seguir usando las correlativas, porque es mucha validacion saber en donde tienes un hueco......
Muchas gracias por la respuesta. Parece una tontería pero llevaba mucho tiempo rondándome en la cabeza.
__________________
Mi calculadora en Qt

Etiquetas: manejar, relaciones, tabla
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 17:29.