2012-03-28 9 views
0

Ich habe ein Problem mit dem Design meiner Modelle. Die Anwendung hat Module (IE Universitätsmodule), die von einem oder mehreren Dozenten unterrichtet werden, Dozenten können auch einen oder mehrere Module unterrichten, daher gibt es im Hinblick auf das Datenbankdesign eine Viele-zu-viele Beziehung zwischen Modulen und Dozenten, daher in meinem Datenbank diese Beziehung wird durch eine Additionstabelle dargestellt werden, die MODULE_ID und Lecturer_id als Verbund Schlüssel hat dies zu erreichen, ich mit dem virtuellen Modifikator und vice versa eine Liste der Dozenten im Modul Klasse enthalten ist, wie untenModellentwurf und LINQ Abfrage

gesehen
public class Module 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public Department department { get; set; } 
    public string code { get; set; } 
    public virtual List<Lecturer> lecturers { get; set; } 

    ... 
} 

Und die Dozenten-Klasse:

public class Lecturer 
{ 

    public int id { get; set; } 
    public string name { get; set; } 
    public virtual List<Module> modules { get; set; } 

    ... 
} 

Meine erste Frage ist, ist dies der beste Weg um diese Situation in den Modellen zu implementieren? Es scheint in Ordnung zu sein, aber das bedeutet, dass Module Dozenten haben, die Module unterrichten, die dann von den Dozenten ... unterrichtet werden und so weiter, und daher sehr ineffizient und nicht optimal erscheinen. Es bedeutet auch, dass ich aufgrund dieser Schleife zB kein Modul als JSON-Objekt an den Browser zurückgeben kann.

Schließlich, wenn dies die richtige Implementierung ist, gibt es eine Möglichkeit, LINQ zu einem Modul abzufragen und dann ein begrenztes Modul zurückzugeben, das Dozenten hat, aber dann sind die Vorlesungen eingeschränkt und ihnen sind keine Module zugeordnet? Im Moment verwende ich die folgende Aussage?

Module module = dbContext.Modules.Where(r => r.id == id).Single(); 
+0

Wenn Sie Kommentare zum Design Ihres Programms wünschen, sollten Sie zu Programmers.SE gehen. Wenn Sie Antworten auf den Code selbst möchten, sollten Sie wahrscheinlich den Code einfügen, mit dem Sie Probleme haben. –

+0

Ich stimme nicht mit @GeorgeStocker überein - dies ist eine absolut gültige Frage für Stack Overflow. – Randolpho

+0

@Randolpho Es ist eine * Design * -Frage (er sagt es sogar im Titel). Als solche ist es eine Programmierfrage. –

Antwort

1

Persönlich, wenn ich mich mit vielen-zu-vielen Beziehungen befasse, möchte ich die Beziehungstabelle zu einem konkreten Teil meines Modells machen. Das heißt, ich hätte eine LecturerModule Tabelle, die sowohl Lecturer als auch Module referenziert. In einer Viele-zu-Viele-Beziehung ist die Beziehung eine Sache. Dies ist für mich architektonisch am sinnvollsten und macht die Arbeit mit Modellen so viel einfacher, als zu versuchen, die Beziehung in einer Art komplexem Baum zu verstecken.

+0

Danke für die Antwort, aber ich fragte mich mit diesem Ansatz, wenn ein Modul nicht mehr eine Liste von Dozenten hat, müssten Sie zum Beispiel, wenn ein neues Modul hinzugefügt wurde, aktualisieren Sie die Module und ModuleLecturer Tabellen mit separaten LINQ-Anweisungen und auch beim Manipulieren Modulobjekte Wenn Sie sich Gedanken darüber gemacht haben, welche Dozenten dieses Modul hatte, müssten Sie diese separat abfragen oder gibt es eine Möglichkeit, auf sie als Teil der Modulklasse zuzugreifen, tut mir leid, wenn ich Sie nicht selbst in Frage stellen kann –

+0

Ich sage nur, dass Sie in einer relationalen Datenbank keine Viele-zu-Viele-Beziehung zwischen zwei Tabellen ohne eine Zwischentabelle haben können. Ich weiß, dass du das weißt. Diese Beziehungstabelle zu einem Teil meines Modells zu machen, hat mir die besten Ergebnisse gebracht. In Ihrem Fall ist ein Modul nicht wirklich von einem Dozenten enthalten, auch nicht umgekehrt. Daher spiegelt Containerschiff nicht wirklich das Modell wider. Es war immer am sinnvollsten, die Zwischentabelle als separate Entität zu betrachten, die beiden Seiten gehört. Ich habe den Code noch nicht benutzt, also könnte ich falsch verstehen, was du tust ... – Jordan

+0

.. Aber die Beziehung ist eine Sache, und es zu einer Einheit für sich zu machen, war immer besser für mich.Module können ohne Dozenten bestehen und umgekehrt. Ein Modul besitzt keinen Dozenten oder umgekehrt, außerhalb der Existenz eines ModuleLecturer. Diese Entität stellt diese Beziehung her. – Jordan