2011-09-02 6 views
8

Xem xét trường hợp này:Nhiều mối quan hệ trong JSON

Bạn muốn gửi một số dữ liệu cho khách hàng ở định dạng JSON và bạn không muốn quay lại máy chủ. Dữ liệu bao gồm 15 giáo viên với 100 sinh viên. Mối quan hệ giữa các thực thể này rất nhiều (mỗi học sinh học nhiều giáo viên và mỗi giáo viên dạy cho nhiều học sinh).

Trong ứng dụng khách, người dùng được cung cấp danh sách sinh viên. Khi nhấp vào bất kỳ học sinh nào, danh sách giáo viên của họ sẽ được trình bày cho người dùng và khi nhấp vào giáo viên, danh sách tất cả học sinh của giáo viên đó sẽ được trình bày. Điều này dẫn đến điều hướng kiểu nhấp qua vô hạn từ sinh viên đến giáo viên và ngược lại.

Bây giờ, như bạn đã biết, JSON chỉ đại diện cho một-nhiều mối quan hệ ở dạng này:

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

Bạn có bất cứ ý tưởng về làm thế nào để làm điều này?

+0

câu hỏi rất hay, cảm ơn bạn !! – MeV

Trả lời

11

Vì JSON không có khái niệm tham chiếu, bạn không cần phải lo lắng về chúng. Điều đó xác định những gì được tính là mối quan hệ giữa giáo viên và học sinh nằm ngoài dữ liệu, tức là chỉ đơn giản là vấn đề giải thích của bạn trong thời gian chạy, thông qua mã định danh của các thực thể.

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

Ví dụ:

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

Nhưng điều này ngụ ý rằng sẽ có rất nhiều dữ liệu dư thừa. Nếu giáo viên là đối tượng bị thổi hoàn toàn và điện thoại của một người # thay đổi, nó có khả năng bị thay đổi ở nhiều nơi. Chúng ta có nên bắt chước RDMBS khi một trường hợp như vậy được giải quyết với một bảng 'tham gia' riêng biệt không? –

+1

Marten, không hề. {.. [snip] ... "t1": {"sinh viên": ["s1", "s2"], "điện thoại": "+43 1 58801"}} –

2

Bạn có thể tạo một mảng các cặp mô tả mối quan hệ dưới dạng đồ thị được chỉ dẫn?

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

Nó sẽ không súc tích. Nhưng nó sẽ mô tả tập dữ liệu của bạn.

+0

Đây là một hack. Nhưng đó là một gợi ý tốt @Exelian. Cảm ơn và +1. –