ASP.NET und ein One-to-Many-to-Many-Szenario
-
21-08-2019 - |
Frage
Ich bin neu in ASP.NET, aber nicht auf die Programmierung. Ich bin die Migration unsere aktuelle Website von PHP / MySQL zu ASP.NET (3.5) / SqlServer. Ich habe hier gelauert seit der Start der Website, so dass ich bin zuversichtlich, dass ein (oder mehr) von euch kann mir helfen. Hier ist das Szenario:
Dies ist eine Schulungsabteilung Stelle und die Abteilung. hat einen Kurskatalog in der Tabelle course
gespeichert. Jeder Kurs kann viele Voraussetzung Kurse aufweisen, beispielsweise A und B sind die Voraussetzungen für C. I normalerweise diese entweder als kommagetrennte Spalte in course
oder in einer separaten Tabelle course_prereq
oder course_course
als rekursive Beziehung speichern würde. Dieser Teil kann ich tun.
Allerdings erfordern die Geschäftsregeln, dass jeder Kurs mehrere Sätze von Voraussetzungen haben. Fore Beispiel erfordert N
A
, B
und C
oder N
erfordert X
und Y
. Dies ist, wo ich bin stecken.
Bisher habe ich diese Informationen in einer Spalte für die Zeile N
als A,B,C|X,Y
gespeichert, analysiert die IDs in eine PHP 2D-Array, vorgelegt wurde eine zweite Abfrage für alle Zeilen, deren ID in diesem Array, dann verwendet PHP die Zeilen zu trennen in ihre jeweiligen Gruppen. Sobald all diese Verarbeitung durchgeführt wird, werden die Gruppen von Voraussetzungen als separate Tabellen auf der Webseite angezeigt werden, etwa so:
| A | A's information goes here |
| B | B's information goes here |
| C | C's information goes here |
- - - - - - - OR - - - - - - - -
| X | X's information goes here |
| Y | Y's information goes here |
Wie würde ich erreichen dies mit ASP.NET?
Lösung
Fügen Sie eine Tabelle Prerequisite Sets
zu halten. Diese Tabelle enthält eine Reihe ID und Schlüssel zurück in die Kurse Tabelle für jeden Kurs in der Menge. Die Tabelle kann mehrere Zeilen für einen bestimmten Satz-ID, so dass Ihr Primärschlüssel wird die Set-ID sein und der Kurs-ID. Dann in Ihrer course_prereq
Tabelle beziehen Sie Kurse zu den verschiedenen Voraussetzung Sätzen. Eine OR
Beziehung angenommen es werden kann, weil alle AND
s in den Sätzen themsevles durchgesetzt werden.
Andere Tipps
Haben Sie eine Tabelle PrerequisiteSet: zu FKs zu jedem prereq genannt. Dann haben ein Course_PrerequisiteSet viele zu viele Tabelle, die FKs auf Kurs und PrerequisiteSet. Die meiste Zeit wird es nur in Course_PrerequistieSet einen Eintrag, aber wenn es mehr als eine gibt, dann wird es eine OR-Beziehung sein.
Sowohl die Antworten oben waren sehr hilfreich. Ich landete nur eine Datenbanktabelle anstelle der vorgeschlagenen zwei zu verbrauchen. Die Tabelle enthält eine course_id
, prereq_id
und set_id
, die alle zusammen die Primärschlüssel bilden.
In der ASP.NET-Seite, verwende ich einen Repeater zu Schleife über die SqlDataSource gespeicherte Prozedur, die einen Kurses der Voraussetzung Mengen zurückgibt, und eine Gridview innerhalb dieser Repeater, der die einzelnen Voraussetzung Informationen von einer zweiten SqlDataSource gespeicherten Prozedur liest. Wie folgt aus:
RepeaterSqlDataSource
(kehrt zurück ids)
Repeater
. . .GridViewSqlDataSource
(gibt natürlich Informationen für jeden prereq_id im Set
. . .GridView
Hope Dies ist hilfreich, um jemand anderes zu einem ähnlichen Szenario suchen.