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

Claves Foraneas

Estas en el tema de Claves Foraneas en el foro de Bases de Datos General en Foros del Web. Hola soy nuevo en el foro y no se si es la sección correcta para mi duda, aun asi espero vuestras respuestas. Tengo una base ...
  #1 (permalink)  
Antiguo 13/12/2012, 20:12
 
Fecha de Ingreso: diciembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Claves Foraneas

Hola soy nuevo en el foro y no se si es la sección correcta para mi duda, aun asi espero vuestras respuestas.

Tengo una base de datos con 2 tablas

Cursos(Nombre_curso,id_categoria,.....)

Categorias(id_categoria, nombre_categoria)

Mi duda es la siguiente, cuando creo un curso le asigno una categoría, relacciono las tablas con inner join para obtener el nombre de la categoria al consultar un curso, pero que pasa si borro la categoría, es decir, el curso tiene el valor id_categoria pero no hay ninguna referencia en la tabla Categorias.

Como deberia actuar.

1º Borro el curso o todos los cursos que tengan esa categoria

2º Le asigno al curso categoria 0 (Que no deberia ser posible ya que todo curso debe tener su categoria)

3º Al intentar borrar la categoria le indico que es imposible hasta que elimine los cursos que tengan esa categoria.

4º Alguna otra solucion

Gracias, espero vuestras respuestas.

Última edición por vrad40; 13/12/2012 a las 20:15 Razón: Elegir icono
  #2 (permalink)  
Antiguo 14/12/2012, 02:27
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 7 meses
Puntos: 58
Respuesta: Claves Foraneas

Hola vrad40. Sería importante saber con qué base de datos estás trabajando, y qué motor utiliza ya que no todas soportan las mismas opciones.

Por ejemplo con MySQL y InnoDB, sino me equivoco, puedes decirle a las tablas relacionadas "hija" que si se borra la categoría padre se borren los datos relacionados. Seguro que te suena lo de "ON DELETE CASCADE". Así que con que hagas un DELETE de la categoría se borrarían automáticamente los cursos asociados a esta categoría.

Supongo que es lo que te interesa. Creo que se hace a la hora de crear la tabla pero no estoy seguro del todo, ya que yo lo hago desde MySQL Workbench y él hace el trabajo por mi. Ahora me doy cuenta de que no es bueno depender de estos gestores. En fin, que me salgo del tema.

Que algunas bases de datos soportan estas cosas y otras no, es importante que digas cual estás utilizando.

En cuanto a lo que comentas más que un problema de base de datos creo que es un problema que depende de cómo tú o el cliente quiera que se comporte. ¿Es posible que un curso no tenga ninguna categoría? ¿Cuando añades un curso obligas a que esté dentro de una categoría? ¿Cuando borras una categoría es porque los cursos que tiene ya no existen o no se van a realizar más?

Por defecto yo creo que la idea es que no se borre nada y que quede constancia de que estuvo ahí, sin saber muy bien en qué consiste la base de datos. Tal vez lo ideal sea un campo en el que digas si el curso o la categoría de cursos está en activo o no.

Al final todo depende de tí y como quieras que se comporte.

Un saludo
  #3 (permalink)  
Antiguo 14/12/2012, 18:42
 
Fecha de Ingreso: diciembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Respuesta: Claves Foraneas

Gracias por tu respuesta alyciashape, utilizo Mysql y he utilizado la opcion ON DELETE CASCADE, por ejemplo cuando borro un "curso" ya que un curso puede tener imagenes asignadas, asi que cuando borro el curso pues borro tambien las imagenes, en este caso la situación esta clara, para que guardar imagenes de un curso que no existe.

Mi duda y tal como tu comentas no es problema de base de datos, es sobre el comportamiento de esta. Escribi en el foro por si existia alguna regla que indicara que se hace en estos casos, ya que he hablado con varias personas y cada una indica una cosa u otra, aunque como bien dices depende de mi.

Al final he decidio que voy a poner un mensaje de control que indique que aun existen curso con esa categoria y q antes debe borrar los cursos. De esta forma ningun curso quedará sin categoria.

Una vez mas gracias por tu respuesta.

Etiquetas: claves, tabla, 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 09:16.