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

Cómo evitar caos al borrar registro relacionado

Estas en el tema de Cómo evitar caos al borrar registro relacionado en el foro de Bases de Datos General en Foros del Web. Hola... errr creo que el título no es muy claro, pero no se me ocurre otro Tengo en mySQL 2 tablas, Empleado y Puesto, donde ...
  #1 (permalink)  
Antiguo 06/01/2004, 00:40
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Cómo evitar caos al borrar registro relacionado

Hola... errr creo que el título no es muy claro, pero no se me ocurre otro

Tengo en mySQL 2 tablas, Empleado y Puesto, donde Empleado tiene los campos Id, nombre, apellido y puestoId y Puesto tiene id y puesto

Como habrán adivinado, Empleado.puestoId está relacionada con Puesto.id

Ahora la descripción del problema...

Si borro un registro de la tabla Puesto, evidentemente los registros de Empleado que tenían referencias a Puesto van a presentar un error...

¿Cómo puedo hacer para que al ejecutar el query aquellos registros "rotos" me muestren un letrero de "Información no disponible" en lo que el administrador arregla uno por uno estos links?

Igual y no se hace desde el Query, no sé... estoy usando php por si sirve de algo el dato

Espero haberme explicado.

Saludos y gracias
  #2 (permalink)  
Antiguo 06/01/2004, 09:20
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Hola Escoffie

Para evitar esos problemas, y mantener la integridad de la base de datos, se usan las constraints.

No conozco mySQL (uso Oracle) pero estoy seguro que deben existir las constraints.

Tenés que crear una clave primaria en puesto (id) y luego habilitar una constraint referential desde empleado(puestoId) a Puesto(Id).

De ese modo la base no te permitirá borrar un puesto mientras exitan empleados asignados al mismo, ni asignar un empleado a un puesto inexistente.

Espero que te sea de utilidad
  #3 (permalink)  
Antiguo 06/01/2004, 11:25
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Gracias Daniel, es muy interesante, jamás oí de ellas antes. Tampoco se si mySQL lo tiene, pero será cosa de revisar en el manual de referencia.

Ojalá que sí porque es muy interesante esa función de constraint

Saludos y gracias!!!
  #4 (permalink)  
Antiguo 06/01/2004, 12:03
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Bueno, me fijé en www.mysql.com y SI, si las soporta, la información está exactamente aquí

Se llaman Foreign Keys (Claves foráneas)

Suerte
  #5 (permalink)  
Antiguo 06/01/2004, 12:15
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Tengo mucho que aprender todavía, comenzando por los tipos de tablas. Yo uso la predeterminada que es una llamada MyISAP, y para usar el foreign keys necesito usar una llamada innoDB. Supongo que son términos propios de mySQL.

Ahora mismo me hecho toda esa parte del manual y me pongo a hacer pruebas. Has abierto un nuevo horizonte para mí con eso de Constraint (que ni sabía que exisitera).

Haré un par de experimentos y luego te platico cómo me fue.

Gracias!!!
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 14:39.