Datenbankschema für Versionierung der Tabellen

icrystaltm

Mitglied
Hallo zusammen,

Ich versuche eine Anwendung zu entwickeln, mit denen Schüler sich für verschiedene Kurse in der Schule für das Abitur registrieren können. Aktuell hänge ich an der Datenbankmodellierung.

Viele Schulen bieten verschiedene Kurse an, aber die Schulen haben wiederum, wieder viele gleiche Kurse. Ein Beispiel wäre hierfür die Fächer: Mathematik, Englisch, Geografie. Diese Fächer werden an allen Schulen angeboten, in Form von Leistungskurs und Grundkurs, aber einige Schulen wiederum bieten unter anderem einzelne Fächer, wie "Studium und Beruf" oder etwas anderes, die nicht an allen Schulen angeboten werden.

Mein Lösungsansatz war, dass ich eine allgemeine Tabelle: "course" modelliere, in der gleichbleibende Daten enthalten sind, mit den folgenden Spalten:
- ID (Primärschlüssel)
- Fachname
- Kurstyp (Advanced course / basic course)

und anschließend eine versionierte Tabelle: "course_version", in der dann folgende Spalten auftauchen:
- ID (Primärschlüssel)
- kurs_id (Fremdschlüssel)
- schul_id (Fremdschlüssel)
- Beschreibung
- Semester

Was haltet ihr von diesem Ansatz? Habt ihr eventuell einen besseren Lösungsvorschlag?
 

mihe7

Top Contributor
Du willst eine n:m-Beziehung zwischen Schule und Kurs. Diese Beziehung wird mit einer Tabelle beschrieben, die bei Dir course_version heißt. Alles gut.

Die ID in course_version ist nicht notwendig, da kurs_id und schul_id einen Satz bereits eindeutig identifizieren (zusammengesetzter Primärschlüssel). Je nach der Bedeutung von "Beschreibung" und "Semester" könnte eine Tabelle hierfür sinnvoll sein aber das wirst Du schon bedacht haben.

Alternativ kann man beispielsweise auch eine 1:n-Beziehung zwischen Schule und Kurs modellieren und einen zentralen Kurskatalog verwalten, aus dem die Kursdaten kopiert werden.
 

icrystaltm

Mitglied
Vielen Dank, für deine Antwort.

Wie stellst du dir das mit einem zentralen Kurskatalog ungefähr vor?

Außerdem ist bei mir die Spalte: "Semester: eine Tabelle: "semester_tbl" mit den folgenden Spalten:

- ID (Primärschlüssel)
- Semester,

wobei dann die Spalte ID als Fremdschlüssel in course_version auftaucht.

Mein Problem hierbei ist, dass die Spalte: "Beschreibung" lediglich ein LOB ist, in der dann beschrieben wird, was in dem Kurs unternommen wird , welche abhängig vom Semester ist. In jedem Semester werden unterschiedliche Themen behandelt.

Mein Ziel ist es, keine redundante Daten zu speichern, denn wie gesagt das Fach: "Mathematik" taucht zum Beispiel in allen Schulen auf mit den selben Themen, die in jedem Semester an allen Schulen gleich behandelt werden. Ich hätte dann zum Beispiel so etwas in die Richtung:

Schule:
ID: 1 | Name: Musterfrau Schule
ID: 2 | Name: Mustermann Schule
ID: 3 | Name: Musterkind Schule

Semester:
ID: 1 | Semester: 2021/22
ID: 2 | Semester: 2022
ID: 3 | Semester: 2022/23

Allgemeine Kursdaten (kurs):
ID: 1 | Name: Mathematik | Typ: Leistungskurs | ...
ID: 2 | Name: Mathematik | Typ: Grundkurs | ...

Spezifischer Kurs (kurs_version):
kurs_id: 1 (FK) | school_id: 1 (FK) | semester_id: 1 (FK) | Beschreibung: Ableitungen von Funktionen...
kurs_id: 1 (FK)| school_id: 1 (FK) | semester_id: 2 (FK) | Beschreibung: Integralrechnung...
kurs_id: 1 (FK) | school_id: 1 (FK) | semester_id: 3 (FK) | Beschreibung: Stochastik
kurs_id: 1 (FK) | school_id: 2 (FK) | semester_id: 1 (FK) | Beschreibung: Ableitungen von Funktionen...
kurs_id: 2 (FK) | school_id: 3 (FK) | semester_id: 1 (FK) | Beschreibung: Ableitungen von Funktionen...

Wie man hier sehen kann, ist die 1. Zeile und die letzten beiden Zeilen redundant, es werden nämlich unabhängig vom Kurstyp gleiche Themen behandelt nur, dass im Leistungskurs eben der Schwierigkeitsgrad höher ist.

Ich könnte die Spalte, Beschreibung eventuell auch in die Tabelle "Allgemeine Kursdaten (kurs)" aufnehmen, jedoch kommt dann die Problematik, die ich zuvor erwähnt habe, dass z.B. das Fach "Studium und Beruf" an verschiedenen Schulen zwar auftauchen kann (kein Muss) und diese Schulen, aber dann wiederum unterschiedliche Themen behandeln, dann kann ich die Spalte: Beschreibung nicht mehr als zentrale Daten verwenden.

Könnte man mir bei dieser Problemstellung einen Denkansatz geben? :)
 
Y

yfons123

Gast
also ich würde zuerst mal die eifnachen tabellen machen ( ich kann die basics von tabellen aufbau also geht 100% besser )


Java:
KURSTYP:
    ID     TYP
    1     Leistungskurs
    2    Leistungsnachweis
    3     Wahlfach
    
KURSARTEN
    ID    ART
    1    Mathe
    2    Englisch
    3    Java
einfach um die möglcihkeiten mal festzulegen was denn geht als kursus wahl

Code:
ANGEBOTSPAKET:
    SCHULE    KURS_TYP KURS_ART
    Bob        1         2
    Bob        2         3
    
SCHULE:
    NAME(PK)     ORT(PK)
    Bob            Javahausen
    
    
STUDENT:
    STUDENTENNUMMER(PK)    NAME     SCHULE_NAME    SCHULE_ORT    AUSWAHLPAKET
    123456789            Lobster    Bob            Javahausen    1      Bob                      Javahausen
    
AUSWAHLPAKET:
    ID         PAKETNUMMER    KURS_TYP    KURS_ART
    1        1            2            1
    2        1            1            3
somit hätte der Lobster an der Hochscshule bob in javahausen die fächer 2 und 1 mit den jewiligen typen

so als flotter gedanke... wenns scheiße ist bitte melden :D
 

icrystaltm

Mitglied
Hey, ebenfalls danke für deine Antwort.

So in die Richtung hatte ich, das auch überlegt, aber bei mir ist der Use Case so geregelt, dass der Student sich für ein Kurs 2 oder 4 Semester registrieren muss. Mein Ansatz wäre ungefähr so:
Code:
SCHULE
ID    NAME
1    Musterfrau Schule
2    Mustermann Schule

SEMESTER
BEZEICHNUNG (PK)
2022
2022/23
2023
2023/24

KURSART
NAME (PK)
Leistungskurs
Grundkurs
Sport

KURS
ID    NAME        KURSART (FK)
1    Mathematik    Leistungskurs
2    Mathematik    Grundkurs
3    Deutsch          Leistungskurs
4    Deutsch          Grundkurs
5    Englisch          Leistungskurs
6    Englisch          Grundkurs

KURS_VERSION
ID    KURS_ID (FK)        SCHUL_ID (FK)  SEMESTER (FK)        BESCHREIBUNG
1    1                            1            2022         Ableitung von Funktionen...
2    1                            1            2022/23       Integralrechnung
3    1                            1            2023           Stochastik
4    1                             1          2023/24      Geometrie
5    2                              1            2022        Ableitung von Funktionen...
6    2                              1            2022/23     Integralrechnung
7    2                               1            2023       Stochastik
8    2                             1            2023/24       Geometrie
9    1                            2            2022              Ableitung von Funktionen...
10  1                            2            2022/23       Integralrechnung
11  1                            2            2023             Stochastik
12  1                          2            2023/24            Geometrie
13  3                        1            2022                 Gedichtsanalyse
14  4                      1            2022/23            Erörterung lernen

STUDENT
ID    SCHUL_ID VORNAME        NACHNAME
1    1            Max            Mustermann

KURS_REGISTRIERUNG
ID    KURS_VERSION_ID        STUDENT_ID
1    1                    1
2    2                    1
3    3                    1
4    4                    1
5    13                  1
6    14                  1
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
und anschließend eine versionierte Tabelle: "course_version", in der dann folgende Spalten auftauchen:
- ID (Primärschlüssel)
- kurs_id (Fremdschlüssel)
- schul_id (Fremdschlüssel)
- Beschreibung
- Semester

Tu dir selbst eine Gefallen, und mach' alles Deutsch. Ein Mischmasch wird furchtbar fuer dich, und wenn das ohnehin den deustchen Ruam bedient, kann auch das Modell Deutsch sein.
 

icrystaltm

Mitglied
Tu dir selbst eine Gefallen, und mach' alles Deutsch. Ein Mischmasch wird furchtbar fuer dich, und wenn das ohnehin den deustchen Ruam bedient, kann auch das Modell Deutsch sein.
Danke für deine Anmerkung.
Eigentlich habe ich alles auf Englisch, da hier aber auf Deutsch geschrieben wird, habe ich alles übersetzt und dabei habe ich einiges vergessen. Sorry.
 

Robert Zenz

Top Contributor
Bei den Semestern wuerde ich direkt die Beschreibung als PK nehmen. Ebenso bei Kursart. Umbenennen wirst du die wahrscheinlich ohnehin nie, und es macht die restliche Datenbank leichter zu lesen:

Code:
KURS
ID    NAME        KURSTYP (FK)
1     Mathematik  Grundkurs
2     Mathematik  Leistungskurs

KURS_VERSION
ID    KURS_ID        SCHOOL_ID     SEMESTER    BESCHREIBUNG
1     1              1             2022        Ableitung von Funktionen...
2     1              1             2022/23     Integralrechnung

Eventuell willst du auch eine lesbare ID fuer die Schulen und die Kurse. Aber das kommt auch darauf an wie oft du mit dem DB-Modell direkt zutun hast im Gegensatz zu irgendeiner Schicht welche das alles fuer dich aufloest.

Eigentlich habe ich alles auf Englisch, da hier aber auf Deutsch geschrieben wird, habe ich alles übersetzt und dabei habe ich einiges vergessen. Sorry.

Wenn du nur deutsche "Kunden" hast, und nur Daten von deutschen Schulen verwaltest, ist es vermutlich Sinnvoll das Modell ebenfalls in Deutsch zu haben. Dann musst du dir keinen Glossar malen wo du wie welchen Begriff uebersetzt. Bei "course_version" rollt es mir zum Beispiel schon die Zaehennaegel hoch.
 
Y

yfons123

Gast
Kurs 2 oder 4 Semester
das kannst du doch im nachhinein rein backen

MEINES ERACHTENS ist dein haupt problem dass du gerade zu viele probleme auf einmal lösen willst

dh ich würde jetzt erstmal die ganzen tabellen aufbauen die unabhängig sind dh nru von anderen referenziert zb die semester möglichkeiten kannst du immer ausfüllen ( unis haben unterschieldliche semester zeiten das ist dir schon bewusst )

die kursarten kannst du auch immer ausfüllen

wenn du das hast machst du es schritt für schritt fertig, im mometn siehts aus als ob du deine datenbank komplett ausdenken willst und dann hinklatschen und so lassen für die nächsten 20 jahre

aber erst beim programmieren und erstellen wird dir auffallen wenn du was komplett dämliches gemacht hast und dann kannst dein ganzes modell zusammen schmeißen weil gar nix mehr geht

dh eig parallel modell und datenbank entwickeln


du entwickelst ja auch nicht call of duty in dem du mit den skins anfängst 1000 animationen erstellst usw ... nein du machst erstmal grund funktionalität dass überhaupt mal was geht und dann baust du deine features drauf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Plugins entwickeln für ein CMS welches unter der GPL V3 steht Softwareentwicklung 1
R Datenstruktur für einen rätselhaften Namen Softwareentwicklung 10
Rahim Post Conditions für InsertAt und remove Softwareentwicklung 1
P Thema für meine Projektarbeit die etwas mit Webautomatisierung zu tuen haben soll? Softwareentwicklung 1
H Entwurfsmuster für den Client der Rest API Softwareentwicklung 0
D Welche Technologien für App und web? Softwareentwicklung 3
Thallius oAuth2 und ClientCredentials für API sinnvoll? Softwareentwicklung 3
S Welche Programmiersprache für eine 3D-Software? Softwareentwicklung 6
N Technologie Grundlagen für eine "App" Softwareentwicklung 12
OnDemand Welches Tool für Planung Softwareentwicklung 2
B Sprache für 3D Physics Engine? Softwareentwicklung 3
K Maßnahmen für Softwarequalität Softwareentwicklung 2
N Graphenalgorithmen: Best Practice für Knoten-/Kanten-Attribute Softwareentwicklung 5
Z Analysemuster - Welches nehme ich für diese Problem? Softwareentwicklung 0
L Softwareentwicklung für Embedded Systems Softwareentwicklung 1
T Gibt es eine Software die Texte für Skype automartisch (automassage) sendet ? Softwareentwicklung 4
R Online-Plattform für Essensbestellungen mit der momentanen Bestellverfolgung Softwareentwicklung 1
S Suche: (Versionierungs)Tool für Klassenaustausch mit Kollegen, die auch an dem Projekt arbeiten Softwareentwicklung 5
R UML-Diagramm für mehrere JFrames Softwareentwicklung 0
S Algorithmus für perfekte Kombination Softwareentwicklung 2
U Individualsoftware - eine Gefahr für Kunden oder die günstigere Alternative? Softwareentwicklung 7
J Grafiken für eigene Apps ? Softwareentwicklung 2
V [Klassendesgin] Verhalten von Subklassen für Aufgabenteilung benutzen. Softwareentwicklung 2
KranzKrone Architektur für einfaches Gui Programm Softwareentwicklung 6
R freie Engine für IOS, Android, Blackberry Softwareentwicklung 11
T SMART für USB Sticks? Softwareentwicklung 9
BinaryLogic Software für Projektplanung und -Entwicklung Softwareentwicklung 19
A MVC & getter für GUI Komponenten Softwareentwicklung 5
S Abstractes/Schnittstellen für Objekte Softwareentwicklung 8
fastjack Welches Tool für Agile Softwareentwicklung? Softwareentwicklung 6
C Wiki für ein Uni - High Level Design Softwareentwicklung 5
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
Mike90 Lizenz für eigene software Softwareentwicklung 9
V Welche Programmisprache für den Desktop? Softwareentwicklung 17
V Zeitplanung für JUnit-Tests? Softwareentwicklung 9
Jay_030 Checkstyle: Lösungsvorschläge für Design for Extension Softwareentwicklung 7
B Allgemeine Fragen für eigenes Projekt Softwareentwicklung 4
P Sensibilität für Codequalität fördern Softwareentwicklung 17
B Empfehlung für Datenbankschulung? Softwareentwicklung 2
D Beispiele für Patterns Softwareentwicklung 3
K Aufwandsabschätzung für User Stories Softwareentwicklung 8
Torres SDK für automatische Bildkorrektur Softwareentwicklung 3
martin82 Tool für IT-Requests Softwareentwicklung 5
Z Welche Software für Web Anwendungen/Spiel Softwareentwicklung 3
Quaxli Suche Tutorial für Jasper Report - speziell iReport Softwareentwicklung 8
Outsourcer Webservertechnologie für Objekterkennung Softwareentwicklung 7
Landei SSH für VMware GSX mit Windows? Softwareentwicklung 2
ARadauer jetzt wirds zeit für Delphi Softwareentwicklung 6
X JavaScript Plugin für Eclipse Softwareentwicklung 3
sparrow Welche Lizenz für ein offenes Programm Softwareentwicklung 2
ARadauer Code Konvention für Datenbanken Softwareentwicklung 5
G Suche Programm für Masken Design für Pflichtenheft Softwareentwicklung 5
S Wie weiter gehen und tutorial für MVC Softwareentwicklung 20
G Pattern für Datenbank Anwendung Softwareentwicklung 22
m@nu Anti-Spam-System für Blog bauen Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
N Brauche Hilfe für Onlineshop Aufgabe für OOP Grundlagen Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G 1 Benutzeroberfläche für 3 einzelne Programme! Softwareentwicklung 9
D Programme für UML Softwareentwicklung 3
A Was ist die richtige Lizenz für mich? Softwareentwicklung 2
R Tool für Anforderungsermittlung, Bugtracking und Test Softwareentwicklung 4
V Antwort bewerten (Nur etwas für Experten!) Softwareentwicklung 15
D cheat für ein spiel fixen Softwareentwicklung 19
F IDE für VB Softwareentwicklung 4
K Design Pattern für einen simple Rechenmaschine Softwareentwicklung 18
S Beispiel für MVC gesucht Softwareentwicklung 53
F Kleines Programm für Windows Softwareentwicklung 2
K Buch oder Online-Tutorium für Programmentwicklung (Anfänge) Softwareentwicklung 5
G Bitte Hilfe für mySQL in einem Query Softwareentwicklung 7
J Beispiel für Besuchermuster Softwareentwicklung 6
M Übersetzer für Programmhilfe gesucht Softwareentwicklung 2
M Disclaimer für eigene Programme? Softwareentwicklung 3
U Geeignete Plattform für Projekt (JSP, PHP, Java-Anwendung) Softwareentwicklung 7
S Open Source Software für UML Softwareentwicklung 8
R Ein Thread für eine Methode Softwareentwicklung 2
S Hilfe für anfänger Softwareentwicklung 7
I regualar expression für Konstruktoren Softwareentwicklung 4
T Brauche für meinen Java-Code dringend Hilfe Softwareentwicklung 4
B Wo bekommt man fertige Java-Programme (z.B. für Lsg LGS) Softwareentwicklung 3
OnDemand Versionierung einführen Softwareentwicklung 5
S Versionierung im Web? Softwareentwicklung 7

Ähnliche Java Themen

Neue Themen


Oben