none
Referencia Circular Base de datos RRS feed

  • Pregunta

  • Que tal gente...

    Tengo un problema, estoy haciendo una base de datos para colegio y tengo un problema con referencia circular, les explico como son las reglas de negocio.

    Se crea un año escolar el cual consta de Turnos, SEDE, Grados, Niveles Academico

    La referencia circular se da con la relacion de nivel_academico entre año academico y nivel_academico con secciones

    Ya que se crea un año por nivel_academico de una sede, y se crea secciones por nivel academico

    Alguien me pueda ayudar a mejorar el diseño para que no sea circular

    en este link de abajo esta el diagrama pueden copiar y pegarlo

    https://lh4.googleusercontent.com/-I7YcKZM3rAQ/VSSqcICceLI/AAAAAAAAADU/0qcF5OrWieI/w952-h699-no/DER_COLEGIo.png


    • Editado ZombieRV miércoles, 8 de abril de 2015 4:28
    miércoles, 8 de abril de 2015 3:56

Respuestas

  • No queda muy clara la pregunta, ya que no se ve bien en el diagrama cuál es la referencia circular.

    Pero el mero hecho de que exista una referencia circular no debería preocuparte. Es algo perfectamente lícito en una base de datos, e incluso bastante corriente. Por ejemplo, es normalísimo que una taba de empleados tenga una referencia circular contra sí misma, mediante un campo en el que se indica quién es el jefe del empleado, que resulta ser otro empleado de la misma tabla. Con tal de que el campo acepte NULL para poder interrumpir las referencias cuando se llega al jefe supremo, no hay problema en que exista esa circularidad.

    Si tu diseño está bien hecho y hay causa justificada para que tengas la referencia circular que mencionas (ya digo que no resulta claro dónde la tienes), entonces no hay problema en que dejes dicha referencia. Lo único que puede dar problemas es el borrado en cascada si les has puesto el "on delete cascade" a las referencias circulares. En ese caso, tendrás que suprimir dicha cláusula y gestionar los borrados recursivos mediante código (bien sea código cliente o usando triggers).

    • Propuesto como respuesta Karen MalagónModerator miércoles, 8 de abril de 2015 21:45
    • Marcado como respuesta ZombieRV miércoles, 8 de abril de 2015 21:52
    miércoles, 8 de abril de 2015 5:27

Todas las respuestas

  • No queda muy clara la pregunta, ya que no se ve bien en el diagrama cuál es la referencia circular.

    Pero el mero hecho de que exista una referencia circular no debería preocuparte. Es algo perfectamente lícito en una base de datos, e incluso bastante corriente. Por ejemplo, es normalísimo que una taba de empleados tenga una referencia circular contra sí misma, mediante un campo en el que se indica quién es el jefe del empleado, que resulta ser otro empleado de la misma tabla. Con tal de que el campo acepte NULL para poder interrumpir las referencias cuando se llega al jefe supremo, no hay problema en que exista esa circularidad.

    Si tu diseño está bien hecho y hay causa justificada para que tengas la referencia circular que mencionas (ya digo que no resulta claro dónde la tienes), entonces no hay problema en que dejes dicha referencia. Lo único que puede dar problemas es el borrado en cascada si les has puesto el "on delete cascade" a las referencias circulares. En ese caso, tendrás que suprimir dicha cláusula y gestionar los borrados recursivos mediante código (bien sea código cliente o usando triggers).

    • Propuesto como respuesta Karen MalagónModerator miércoles, 8 de abril de 2015 21:45
    • Marcado como respuesta ZombieRV miércoles, 8 de abril de 2015 21:52
    miércoles, 8 de abril de 2015 5:27
  • Hola Alberto , Gracias por responder te comento la referencia circular se da en este orden siguiendo la secuencia de relaciones.

    Secciones-> Grado-> Niveles_Academicos->Anios_escolares->Turno_Anios_escolares-> Secciones

    Como niveles académicos se relaciona con Grado y niveles_academicos se relaciona con Anios_escolares, alli se daria la forma circular; ya que Anios _escolares se relaciona con Turno y Turno a la vez con Secciones.

    La verdad es que en la UNi a uno le enseñan que en tu modelo nunca debe tener una relacion ciruclar pero con lo que me dices me queda mas tranquilo puesto que no veia como romper dicha relacion 

    Gracias por responder amigo.

    miércoles, 8 de abril de 2015 13:40
  • Cualquier relación circular es un error de diseño... sin mas explicacion

    Antonio Ortiz
    ant(a)aortiz.net
    www.aortiz.net
    www.qsoluciones.net

    lunes, 5 de junio de 2017 12:04
  • Secciones-> Grado-> Niveles_Academicos->Anios_escolares->Turno_Anios_escolares-> Secciones

    Tal como lo indicas si que creo que no es buena idea ese diseño. Cuando yo me referia a las referencias circulares estaba pensando en definiciones jerarquicas, como la lista de empleados con sus jefes, en la que la tabla de empleados tiene una auto-referencia, o listas de componentes para fabricacion de un objeto (en la que un componente puede a su vez contener otras componentes). Pero la relacion que has indicado si que creo que habria que replanearla.
    lunes, 5 de junio de 2017 12:15
  • Es correcto, en este caso que mencionas se trata de referencias 'recursivas' y podrían ser validas en algunos casos

    Antonio Ortiz
    ant(a)aortiz.net
    www.aortiz.net
    www.qsoluciones.net

    martes, 6 de junio de 2017 0:25