Ver Mensaje Individual
  #8 (permalink)  
Antiguo 04/11/2015, 16:50
Avatar de gnzsoloyo
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: relacion 1:N con entidad debil

ES un error habitual.
En una relacion maestro-detalle, lo que debe ser incremental es el listado de detalle asignado a un mismo maestro, pero NO como autoincremental global, es decir, deben numerarse los items del detalle desde 1 en todas las ocasiones, y hasta el limite definido por el sistema para el detalle de un mismo maestro.
No es lo mismo.
En ese caso el detalle de una Factura, por ejemplo, sigue conteniendo en su PK el campo FK de la Factura, junto con el valor del discriminante del item: (nro_factura, nro_item). Lo que hay que diseñar es el metodo para que el numero de item se reinicie con cada factura nueva, y como eso NO se puede hacer con autoincremental de MYSQL, debes hacerlo fácilmente por la aplicación, o bien en un trigger.
Cualquiera de las dos es una buena opción.
Usar un AUTO_INCREMENT y declararlo exclusivamente PK puede parecer una solución práctica, pero no es la adecuada, porque no impide restricción la inserción de valores relacionados con una factura ya cerrada, o exceder el limite de items de la misma. En otras palabras, no vincular en forma segura al maestro (nro_factura) con el item, puede generar datos inconsistentes.
En cambio poner el par (nro_factura, nro_item) como PK, impedirá datos inconsistentes y redundanciasnocivas.

Este esquema no es un invento mío. SI analizas todas las bases de datos productivas empresariales verás que es el método adoptado...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)