2017-07-21 6 views
1

Ich möchte einen Schüler, Lehrer, Klassenbeziehung modellieren. Jeder Schüler ist mit einem Lehrer verbunden (der Lehrer kann viele Schüler haben). Es gibt nur drei Klassen. Die Art und Weise ich daran denke ist, dass es drei Tabellen:So erstellen Sie eine einfache Datenbank

Schülertisch -> (STUDENT_ID, student_name, class_id)

Lehrer Tabelle -> (STUDENT_ID, student_name, class_id)

Klasse Tabelle - > (class_id, class_name)

Ich bin nicht sicher, wie man die Schüler-Lehrer-Beziehung in den Tabellen zeigt. Wie würden wir wissen, welcher Lehrer welchem ​​Schüler zugeordnet ist?

+0

Sie führen eine weitere "Link" -Tabelle 'Student_Teacher' ein. Entfernen Sie 'class_id' von' Student' und 'Teacher' und es in die neue Tabelle. –

+0

Konnte eine weitere Tabelle "assigned_students" hinzufügen und Spalten haben: student_id, teacher_id Dann in Ihrem Code, nur ziehen/einfügen in die Tabelle, die wem zugeordnet ist. – Adam

+1

Dies ist ein Beispiel für eine "Viele-zu-Viele" -Beziehung. Schüler können von vielen Lehrern unterrichtet werden, und Lehrer können viele Schüler unterrichten. Sie benötigen eine Zwischentabelle (StudentTeacher vielleicht), um die Beziehung in "one-to-many" zu brechen. – Eric

Antwort

1

dies erreicht werden kann mit einigen einfachen verbindet.

Angenommen, Sie möchten alle Schüler finden, die einem bestimmten Lehrer zugeordnet sind, beginnen Sie mit der Zeile teacher. Sie würden dann in die classes, die der Lehrer lehrt, beitreten. Schließlich würden Sie die , die in diesen Klassen sind, beitreten.

Dies ist bekannt als eine Viele-zu-Viele-Beziehung und ist ein wichtiges Konzept in Datenbanken.

select 
    t.student_name, -- I suspect this col might actually be named teacher_name 
    s.student_name, 
from 
    -- Find the classes that a teacher teaches 
    teacher_table t join class_table c on (t.class_id=c.class_id) 
    -- Find the students in those classes 
    join student_table s on (s.class_id=c.class_id) 
where 
    t.student_id = ? -- Again, I suspect this should be "teacher_id" 
+0

Ich sollte erwähnen, dass Sie die teacher_table und student_table direkt beitreten können. Aber ich habe die Klassen-Tabelle in meine Antwort aufgenommen, um zu demonstrieren, wie viele von vielen im Allgemeinen erreicht werden können. Wenn Sie keine Daten aus der classes-Tabelle benötigen (wie zum Beispiel "class completion date" für eine where-Klausel), können Sie einfach 'SELECT t.student_name, s.student_name FROM lehrer_tabelle t JOIN student_table s verwenden ON (t.class_id = s.class_id) WHERE t.student_id =? ' – RToyo

1

Dies sind ein paar mehr Tabellen als Sie möchten, aber einige der .NET-Beispiele, die Microsoft erstellt hat, drehen sich um eine ähnliche relationale Datenbank.

Hier ist ein Link zu dieser Datenbank ist: https://msdn.microsoft.com/en-us/library/bb399731(v=vs.100).aspx

In diesem Beispiel ist der Schüler und die Lehrer sind sowohl in dem Personen-Tisch gehalten und sind mit dem Kurs Tabelle durch zwei verschiedene Tabellen mit bezogen. . Schülerklasse und Kursleiter.

enter image description here

Und hier ist die Contoso-Universität Schema mit Link: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

enter image description here

Verwandte Themen