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

NecesitoAyuda con foreign key al eliminar un registro

Estas en el tema de NecesitoAyuda con foreign key al eliminar un registro en el foro de SQL Server en Foros del Web. Hola a todos necesito ayuda con unas foreign key, estoy trabajando con unas tablas entonces al relacionar las tablas no me deja eliminar en un ...
  #1 (permalink)  
Antiguo 05/01/2015, 13:03
 
Fecha de Ingreso: diciembre-2014
Mensajes: 3
Antigüedad: 9 años, 3 meses
Puntos: 0
NecesitoAyuda con foreign key al eliminar un registro

Hola a todos necesito ayuda con unas foreign key, estoy trabajando con unas tablas entonces al relacionar las tablas no me deja eliminar en un registro por que hacer una referencia con la foreign key

Las tablas son las que tengo a continuacion:

Código SQL:
Ver original
  1. CREATE TABLE productos
  2. (codpro VARCHAR(5),
  3. nombrepro VARCHAR(40) NOT NULL,
  4. detalle VARCHAR(40)UNIQUE NOT NULL,
  5. proveedor VARCHAR(40)NOT NULL,
  6. precio VARCHAR(10)NOT NULL,
  7. stock INT,
  8. PRIMARY KEY (codpro))

y tengo la tabla de detallef en donde creo la foreign key:

Código SQL:
Ver original
  1. CREATE TABLE detallef
  2. (n_factura VARCHAR(10)FOREIGN KEY REFERENCES factura,
  3. codpro VARCHAR(5) FOREIGN KEY REFERENCES productos,
  4. producto VARCHAR(40),
  5. cantidad VARCHAR(15),
  6. precio_unit VARCHAR(15),
  7. precio_vent VARCHAR(15))


y el problema que tengo y no se como es y espero que me puedan ayudar de favor es que cuando quiero eliminar un registro en la tabla de productos me genera un error relacionado con la foreign key .

Última edición por gnzsoloyo; 05/01/2015 a las 13:17 Razón: Muy mal etiquetado...
  #2 (permalink)  
Antiguo 05/01/2015, 13:17
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: NecesitoAyuda con foreign key al eliminar un registro

Si vas a eliminar a su registro relacionado (Foreing Key), puedes implementar para cada relación, el DELETE ON CASCADE.

O bien, como se hacia a la antigüita, mediante un TRIGGER, verificar si hay existencia de una relación (foreing key) y eliminarla primero.

Esto ultimo se modifico con la implementación del DELETE o UPDATE ON CASCADE
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 05/01/2015, 13:20
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: NecesitoAyuda con foreign key al eliminar un registro

Cita:

y el problema que tengo y no se como es y espero que me puedan ayudar de favor es que cuando quiero eliminar un registro en la tabla de productos me genera un error relacionado con la foreign key .
Eso no es un error. Es una restricción de integridad referencial: No puedes borrar un producto en tanto existan registros que usan la PK de ese producto como FK.
Un producto no se elimina. Se da de baja en forma lógica usando un campo adicional como fecha de baja. Cuando es NULL, el producto está activo, cuando no es NULL, se desactivó.
De esa forma manejas la existencia del rpoducto sin detruir la integridad referencia del mismo donde se ha usado.

Lo que t está faltando es un poco de experiencia en diseño de estructuras de datos y de sistemas.
__________________
¿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 05/01/2015, 16:05
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: NecesitoAyuda con foreign key al eliminar un registro

gnzsoloyo, Excelente respuesta, no me había detenido a pensar que el amigo solo quiere dejar inactivo el "producto".
__________________
MCTS Isaias Islas

Etiquetas: foreignkey, relacion
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 03:03.