Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Problemas con relación ternaria

Estas en el tema de Problemas con relación ternaria en el foro de Symfony en Foros del Web. Estoy trabajando en un proyecto en Symfony2 sobre un sistema de un colegio de Primaria y me surgió el siguiente problema. Tengo tres entidades relacionadas ...
  #1 (permalink)  
Antiguo 08/04/2016, 03:45
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 8 meses
Puntos: 0
Problemas con relación ternaria

Estoy trabajando en un proyecto en Symfony2 sobre un sistema de un colegio de Primaria y me surgió el siguiente problema. Tengo tres entidades relacionadas Profesor, Asignatura y Grupo. Las relaciones son las siguientes:

- Un profesor imparte una o varias asignaturas.
- Una asignatura es impartida por uno o varios profesores.

- Un profesor imparte en uno o varios grupos.
- En un grupo imparte uno o muchos profesores.

- Una asignatura se imparte en uno o varios grupos.
- En un grupo se imparte una o varias asignaturas.

En mi caso, una asignatura puede ser impartida en varios cursos y un curso se compone de varios grupos, por lo que para poderlas diferenciar necesito tener en la misma tabla la asignatura y el curso la que va dirigida, pero para no repetir para cada asignatura cada curso no le he añadido el curso como atributo en la entidad Asignatura, sino que se debe obtener mediante una relación de ambas entidades.

Creo que debería ser una relación ternaria, pero no sé como se implementa en doctrine. También se podría dividir la relación en tres relaciones Asignatura_Grupo, Profesor_Grupo y Profesor_Asignatura. Todos con relación muchos a muchos.Pero en este caso, no puedo conseguir, por ejemplo, el profesor que enseña matemáticas en 1º Primaria A.

A continuación muestro las tres relaciones con datos de prueba para que se pueda ver como no se puede obtener lo indicado anteriormente (indico con ¿? cuando no hay elección)

por ejemplo:

** Asignatura-Grupo **

ASIGNATURA (PK) _______GRUPO (PK)_____LIBRO DE TEXTO
Matemáticas 1º ____________1º Primaria______ libro_1_______________ OK
Matemáticas 2º ____________2º Primaria______ libro_2
Inglés 1º_________________1º Primaria______ libro_3


** Profesor-Grupo **

MAESTRO (PK)__________GRUPO (PK)_____HORARIO
José ____________________ 1º Primaria A_____M 09:00________ ¿?
José ____________________ 2º Primaria A_____M 11:00
Manuel__________________1º Primaria A_____T 09:00_________ ¿?


** Profesor-Asignatura **

PROFESOR (PK)_________ASIGNATURA (PK)
José ____________________ Matemáticas____________________ ¿?
José ____________________ Ciencias Naturales
Manuel__________________ Matemáticas ____________________¿?
Manuel__________________ Inglés

Creo que para obtener el resultado correcto debería tener una tabla de la relación ternaria como la siguiente:

PROFESOR (PK) __ ASIGNATURA (PK) __ GRUPO (PK) __ LIBRO DE T.___ HORARIO
José______________ Matemáticas________1º Primaria A_____libro_1_______ M 9:00__________OK
Manuel____________Inglés_____________ 1º Primaria A_____libro_3_______ T 09:00

Agradezco su ayuda, para saber cómo resolver este problema y si es una relación ternaria como se implementaría en doctrine.
  #2 (permalink)  
Antiguo 08/04/2016, 08:52
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Problemas con relación ternaria

Del manual:
Cita:
Why are many-to-many associations less common? Because frequently you want to associate additional attributes with an association, in which case you introduce an association class. Consequently, the direct many-to-many association disappears and is replaced by one-to-many/many-to-one associations between the 3 participating classes.
No existen las relaciones ternarias per se en Doctrine, pero puedes crearlas con una clase asociación, que es una entidad que tiene relaciones uno a muchos y muchos a uno según corresponda con las otras entidades que participan en la asociación ternaria.
Revisa el manual de Doctrine: http://docs.doctrine-project.org/pro...unidirectional
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 09/04/2016, 04:02
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problemas con relación ternaria

Gracias por la respuesta hhs.

Si no he entendido mal, para el caso de las relaciones ternarias tengo que tener por cada entidad una relación Muchos a 1 con la clase de asociación que sería otra entidad que tengo que crear ¿no? y el ejemplo que aparece en el manual ¿sería la relación de una de ellas a la clase de asociación?

Soy novato en doctrine, así que agradecería toda la ayuda posible.

Saludos.
  #4 (permalink)  
Antiguo 10/04/2016, 12:57
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problemas con relación ternaria

Cita:
Iniciado por hhs Ver Mensaje
Del manual:

No existen las relaciones ternarias per se en Doctrine, pero puedes crearlas con una clase asociación, que es una entidad que tiene relaciones uno a muchos y muchos a uno según corresponda con las otras entidades que participan en la asociación ternaria.
Revisa el manual de Doctrine: [url]http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-unidirectional[/url]
Gracias por la respuesta hhs.

Si no he entendido mal, para el caso de las relaciones ternarias tengo que tener por cada entidad una relación Muchos a 1 con la clase de asociación que sería otra entidad que tengo que crear ¿no? y el ejemplo que aparece en el manual ¿sería la relación de una de ellas a la clase de asociación?

Soy novato en doctrine, así que agradecería toda la ayuda posible.

Saludos.
  #5 (permalink)  
Antiguo 10/04/2016, 13:00
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Problemas con relación ternaria

debes de tener 3 entidades; en tu caso Maestro, Grupo y Asignatura. Estas tres entidades estarán unidas mediante una cuarta entidad que tendrá relaciones many to one hacia las otras tres.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 10/04/2016, 13:45
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problemas con relación ternaria

Y a la nueva entidad tengo que añadirle tres atributos que hagan referencia a cada una de las otras tres entidades ¿verdad? Y si quiero guardar cualquier otro atributo extra por ejemplo el libro de esa asignatura impartida o el horario ¿también se añadiría en la nueva entidad?
  #7 (permalink)  
Antiguo 10/04/2016, 14:38
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Problemas con relación ternaria

si, así es, puedes agregarle otros atributos que sean necesarios
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 10/04/2016, 14:47
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problemas con relación ternaria

De acuerdo, voy a realizarlo como me indicas.

Muchas gracias.

Un saludo.

Etiquetas: bases-de-datos, bases-de-datos-general, doctrine2, symfony2
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 23:45.