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

Restricciones de las claves foraneas

Estas en el tema de Restricciones de las claves foraneas en el foro de Mysql en Foros del Web. Hola, estoy trabajando con las claves foraneas de mi base de datos y me surge una duda. Para ello os explicare lo esencial de mi ...
  #1 (permalink)  
Antiguo 21/04/2010, 11:42
 
Fecha de Ingreso: abril-2010
Mensajes: 42
Antigüedad: 14 años
Puntos: 0
Restricciones de las claves foraneas

Hola, estoy trabajando con las claves foraneas de mi base de datos y me surge una duda. Para ello os explicare lo esencial de mi programa:

En la base de datos tengo una tabla de proveedores y otra de productos, entre otras. Tengo relacionadas estas dos tablas con la clave primaria de la tabla proveedores (id_proveedor) con un campo de la tabla productos (id_prov). Se entiende no? Un producto comprado a un proveedor.

Mi duda es que si quiero borrar un proveedor que ya no es mi proveedor, pero quiero mantener el producto producto porque lo tengo en mi almacen, no puedo ponerle a mi producto un null en el campo id_prov (porque este ya no existe)?

Yo creia que si ya que al hacer la relacion le puse "on delete no action" y en " on update cascade". Con esto mi intencion era que si cambiaba el dato se cambie en las dos tablas y si se borra solo lo borre en una de ellas.

Gracias
  #2 (permalink)  
Antiguo 21/04/2010, 11:52
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Restricciones de las claves foraneas

Una idea es crear un registro en la tabla proveedores con ID=0 que se llame "Sin datos" o algo asi. Y cuando borres un proveedor, actualizes tú todos sus productos poniendo id_prov=0, de este modo por ejemplo luego con PHP cuando muestres los productos, saldra el "Sin datos" o algo por el estilo.

Espero que te sirva, saludos
  #3 (permalink)  
Antiguo 21/04/2010, 12:16
 
Fecha de Ingreso: abril-2010
Mensajes: 42
Antigüedad: 14 años
Puntos: 0
Sonrisa Respuesta: Restricciones de las claves foraneas

Pues supongo que tendre que hacer algo asi. Por lo que leo por ahi tb, es imposible lo que quiero hacer.

Gracias por responder
  #4 (permalink)  
Antiguo 21/04/2010, 12:38
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: Restricciones de las claves foraneas

Tu problema es un caso habitual en los modelos de datos. Es muy habitual realizar esa relación producto->proveedor, y es lógicamente correcta, pero no es un modelo flexible.
Para resolver tu problema se requiere una tercera tabla, que es la que debe mantener la correlación entre productos y proveedores:
Producto_Proveedor(producto_id, proveedor_id)
De esta forma no importa si un proveedor se va de la lista de proveedores, el producto permanece.
Hay modelos más avanzados, pero el esquema simplificado sería este.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: claves, restricciones, foreignkey
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 19:56.