2011-09-02 19 views
8

Considere este escenario:relaciones muchos a muchos en JSON

desea enviar algunos datos al cliente en formato JSON, y que no quieren volver al servidor. La información consta de 15 maestros con 100 estudiantes. La relación entre estas entidades es de muchas a muchas (cada alumno aprende muchos maestros y cada maestro enseña a muchos estudiantes).

En el cliente, el usuario se presenta con la lista de estudiantes. Al hacer clic en cualquier alumno, la lista de sus profesores se presentaría al usuario, y al hacer clic en un profesor, se presentaría la lista de todos los alumnos de ese profesor. Esto da como resultado una navegación infinita por estilo de clic desde estudiantes a profesores y vice verca.

Ahora, como usted sabe, JSON sólo se representa uno-a-muchos relación en esta forma:

{ "s1" : [ "t1", "t2"], "s2" : [ "t2", "t4" ], "s3" : [ "t1", "t3", "t4"], ...} 

¿Tiene alguna idea de cómo hacer esto?

+0

gran pregunta, gracias !! – MeV

Respuesta

11

Como JSON no tiene un concepto de referencias, no debería tener que preocuparse por ellas. Lo que define lo que cuenta como una relación entre profesores y estudiantes se encuentra fuera de los datos, es decir, es simplemente una cuestión de su interpretación durante el tiempo de ejecución, a través de los identificadores de las entidades.

var faculty = { 
"teachers": { 
    "t1": ["s1","s2","s5"], 
    "t2": ["s2","s7","s9"] 
    }, 
"students": { 
    "s1": ["t1","t2"], 
    "s2": ["t2","t7"] 
    } 
} 

Por ejemplo:

alert("Teacher t1's students are: " + faculty.teachers.t1.toString()); 
alert("Student s2's teachers are: " + faculty.students.s2.toString()); 
alert("Student s2's first teacher's students are: " + faculty.teachers[faculty.students.s2[0]].toString()); 
+1

Pero esto implica que habrá una gran cantidad de datos redundantes. Si los profesores fueron objetos completos, y el número de teléfono cambia, es posible que se modifique en varios lugares. ¿No deberíamos imitar a los RDMBS cuando tal caso se resuelve con una tabla separada de 'unirse'? –

+1

Marten, en absoluto. {.. [snip] ... "t1": {"estudiantes": ["s1", "s2"], "teléfono": "+43 1 58801"}} –

2

¿Podría hacer una matriz de pares que describa las relaciones como un gráfico dirigido?

[// from , to 
    ["s1", "t1"], 
    ["s1", "t2"], 
    ["s2", "t2"], 
    ["s2", "t4"], 
    ["t1", "s1"], 
    ["t1", "s2"], 
    ["t1", "s3"], 
    ["t1", "s4"] 
] 

No sería conciso. Pero describiría su conjunto de datos.

+0

Esto es un truco. Pero fue una buena sugerencia @Exelian. Gracias y +1. –

Cuestiones relacionadas