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

foreign key ayuda

Estas en el tema de foreign key ayuda en el foro de Bases de Datos General en Foros del Web. buenas, espero me ayuden con esto, tengo las siguientes tablas productos (id_prod, nombre) detalle_venta(id_prod, id_venta, cantidad) venta(id_venta, fecha) el problema es cuando quiero eliminar un ...
  #1 (permalink)  
Antiguo 16/03/2009, 14:33
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 5 meses
Puntos: 4
foreign key ayuda

buenas, espero me ayuden con esto, tengo las siguientes tablas

productos (id_prod, nombre)
detalle_venta(id_prod, id_venta, cantidad)
venta(id_venta, fecha)

el problema es cuando quiero eliminar un producto por ejemplo (todo esto con php), pero si este ya esta asignado a un detalle_venta, no me dejara elominarlo, aqui el problema como lo elimino, si es que el usuario desea eliminarlo, o modificar el producto, y que este se modifique en detalle_venta, que me recomiendan que haga?? existe alguna manera de hacer esto?, gracias


PD: si no va en este foro, muevanlo, no supe donde colocarlo, ya que trabajo con php y postgres, saludos
  #2 (permalink)  
Antiguo 16/03/2009, 15:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: foreign key ayuda

Debes hacer un alter table con la opción 'on delete cascade' y 'on update cascade' para que permita el borrado en cascada de los datos.

De esta forma, te borra el producto y todos los registros que estén asociados al mismo en diferentes tablas. Lo mismo que al actualizarlo.

Un saludo.
  #3 (permalink)  
Antiguo 16/03/2009, 15:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: foreign key ayuda

gracias por respoder, pero existe la posibilidad de que me borre solo la columna en cuestion? y no todo el registro?

ejemplo: borro el producto, y a la vez, se elimine dicho producto de la columna detalle, nose si se entiende, estube buscando para hacerlo con un trigger, pero nose como hacerlo, gracias
  #4 (permalink)  
Antiguo 16/03/2009, 16:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: foreign key ayuda

Lo de borrarlo iria en contra de la integridad referencial, ya que ademas del producto, detalle_venta tiene tambien relacion con venta.
Por lo que veo, lo que quieres hacer es borrar el producto pero no la venta, dejando un espacio en el campo producto pero con el id_venta y cantidad.

Lo mejor que puedes hacer, es on update cascade como te decia ahora. ya que ahi no intenta borrar un registro con mas relaciones, simplemente lo actualiza.
  #5 (permalink)  
Antiguo 16/03/2009, 16:40
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: foreign key ayuda

ok, voy a probar lo que me aconsejas, gracias
  #6 (permalink)  
Antiguo 16/03/2009, 17:14
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: foreign key ayuda

para el caso del uopdate esta bien, pero en el caso que se desea eliminar el producto, que me recomiendas hacer, ya que el usuario desea eliminar productos cuando lo necesite, tu me decias que iria contra la integridad referencial, entonces cual seria la mejor solucion, nose me ocurre otra....gracias
  #7 (permalink)  
Antiguo 16/03/2009, 22:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: foreign key ayuda

No lo borres.
Si tienes un producto llamado 'shampoo' y lo quieres borrar, simplemente actualiza el nombre a 'producto no registrado', de esta forma te aparece producto no registrado pero no te toca la venta.

Lo que tambien puedes hacer, es hacer un campo para controlar si el producto esta activo o no activo. Para el usuario será invisible si el producto existe o no existe. Para ti, solo listas los productos activos.

Un saludo.
  #8 (permalink)  
Antiguo 17/03/2009, 13:59
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: foreign key ayuda

Si usas Mysql, puedes usar la sentencia ON DELETE SET NULL
esto pondrá el campo en NULL. y no borrará el registro

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
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 11:33.