2009-03-20 21 views
0

Ich bin neu in ASP.NET, aber nicht in der Programmierung. Ich migriere unsere aktuelle Seite von PHP/MySQL nach ASP.NET (3.5)/SqlServer. Ich lauerte hier seit dem Start der Seite, also bin ich zuversichtlich, dass einer (oder mehrere) von Ihnen mir helfen können. Hier ist das Szenario:ASP.NET und ein Eins-zu-viele-zu-viele-Szenario

Dies ist eine Trainingsabteilung Website und die Abteilung. hat einen Kurskatalog in der Tabelle course gespeichert. Jeder Kurs kann viele vorausgesetzte Kurse haben. Zum Beispiel sind A und B Voraussetzungen für C. Ich würde dies normalerweise entweder als durch Kommas getrennte Spalte in course oder in einer separaten Tabelle course_prereq oder course_course als rekursive Beziehung speichern. Diesen Teil kann ich machen.

Die Geschäftsregeln erfordern jedoch, dass jeder Kurs mehrere Sätze von Voraussetzungen haben kann. Zum Beispiel erfordert N erfordert A, B und C oder N erfordert X und Y. Hier stecke ich fest.

Zuvor ich diese Informationen in einer Spalte für Zeile gespeichert N als A,B,C|X,Y, analysiert die IDs in eine PHP 2D-Array, eine zweite Abfrage für alle Zeilen, deren ID vorgelegt war in diesem Array, verwendet dann PHP diejenigen zu trennen, Zeilen 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 dies mit ASP.NET erreichen?

Antwort

1

Fügen Sie eine Tabelle hinzu, die Prerequisite Sets enthält. Diese Tabelle enthält eine Set-ID und einen Schlüssel für jeden Kurs im Set in der Kurstabelle. Die Tabelle kann mehrere Zeilen für eine gegebene Set-ID haben, so dass Ihr Primärschlüssel die Set-ID plus der Kurs-ID ist. Dann beziehen Sie in Ihrer course_prereq Tabelle Kurse zu den verschiedenen Voraussetzungen. Eine OR Beziehung kann dort angenommen werden, da alle s in den Sets themsevles erzwungen werden.

+0

Ich mag das Datenbankmodell. Nun, wie würde ich es in der ASP.NET-Seite angezeigt bekommen, so dass jeder 'prereq_set' eine eigene Gridview ist? Kann ein Repeater die zurückgegebenen Zeilen gruppieren oder muss ich dafür ein benutzerdefiniertes Steuerelement erstellen? – dneaster3

+0

Sie können eine Gridview und sqldatasource in einen Repeater einfügen, aber das würde bedeuten, dass mehrere Anfragen an die Datenbank gesendet werden müssen. Vielleicht möchten Sie stattdessen einen Repeater mit benutzerdefiniertem HTML erstellen - es gibt viele verschiedene Möglichkeiten, wie Sie damit umgehen können. –

1

Haben Sie eine Tabelle mit der Bezeichnung PrerequisiteSet, die für jede Bedingung FKs ist. Dann haben Sie eine Course_PreequisiteSet viele zu viele Tabelle, die FKs zu Kurs und PrerequisiteSet. Die meiste Zeit wird es nur einen Eintrag in Course_PrerequisticeSet geben, aber wenn es mehr als eins gibt, wird es eine OR-Beziehung sein.

+0

(siehe Kommentar zu Joel Coehoorns Antwort.) – dneaster3

0

Beide Antworten waren sehr hilfreich. Ich verwendete am Ende nur eine Datenbanktabelle anstelle der vorgeschlagenen zwei. Die Tabelle enthält course_id, prereq_id und set_id, die alle zusammen den Primärschlüssel bilden. In der ASP.NET-Seite verwende ich einen Repeater, um eine Schleife über die gespeicherte Prozedur sqldatasource durchzuführen, die die Voraussetzungensätze eines Kurses zurückgibt, und eine Gridview innerhalb dieses Repeaters, der die einzelnen vorausgesetzten Informationen aus einer zweiten gespeicherten Prozedur sqldatasource liest. Wie folgt aus:

RepeaterSqlDataSource (kehrt zurück ids)
Repeater
. . . GridViewSqlDataSource (gibt die Kursinformationen für jede prereq_id im Satz zurück
...GridView

Ich hoffe, dies ist hilfreich für jeden anderen Blick auf ein ähnliches Szenario.