Datenbankmodell erstellen

k4ll4rkind

Neuer Benutzer
Beiträge
4
Hallo! Ich habe folgendes Problem und hoffe, ihr könnt mir helfen!!

Ich muss für mein Studium eine Webseite mit Bundesliga-Spielplan und zugehöriger Tabelle erstellen. Momentan bin ich dabei ein Datenbankmodell zu erstellen.

Ich habe folgende Tabellen erstellt (Primärschlüssel ist jeweils unterstrichen):

Verein (Name, Gründung, Stadion, Trainer)
Spieler (Lizenznr., Vorname, Nachname, Geburtsdatum, Nationalität, Position, Trikotnummer, Verein)
Trainer (Lizenznr., Vorname, Nachname, Geburtsdatum, Nationalität)
Schiedsrichter (Lizenznr., Vorname, Nachname, Geburtsdatum, Nationalität)
Stadion (Name, Straße, Ort, Baujahr, Sitzplätze, Stehplätze)

Jetzt habe ich allerdings ein Problem mit den Toren. Ich habe folgende 2 Tabellen erstellt, bin mir aber nicht sicher, ob die so sinnvoll sind:

Spiel (Gastmannschaft, Heimmannschaft, Tore Gast, Tore Heim, Spieltag, Datum, Uhrzeit, Schiedsrichter)
Tore (Gastmannschaft, Heimmannschaft, Spieler, Zeit, Tor_Heim-Gast)

Da unser Dozent keine ID's haben will, habe ich z.B. Lizenznummern als PK vergeben oder zusammengesetzte Schlüssel erstellt.

Der Plan sieht bisher folgendermaßen aus:

Da die Konstellation von Gast und Heim nur einmal vorkommt, habe ich dies bei Spiel als PK definiert. Für jedes Spiel wird das Spielergebnis eingetragen. Dann wird programmiertechnisch ein Aufruf gestartet, der die Anzahl der Tore addiert und jeweils abfragt, wann diese von wem geschossen wurden. Dies wird in die Tabelle Tore eingetragen. Die letzte Spalte "Tor_Heim-Gast" enthält dabei ein H oder ein G um zu erkennen, für welche Mannschaft das Tor geschossen wurde, denn es könnte ja auch ein Eigentor geschossen worden sein. Natürlich könnte man die Tore auch nur in der Tabelle Tore eingeben, damit wäre vorerst auch klar, welche Mannschaft das Tor geschossen hat. Das funktioniert aber nur so lange wie kein Spieler zu einem anderen Verein wechselt. Und es müsste für die Tabellenplatzierung zur Punkteberechnung jedes Mal die gesamte Torliste zusammengerechnet werden, was zu viel Zeit in Anspruch nimmt, wenn die Liste zu lang wird.

Bisher sieht mein Ergebnis also wie oben aus, aber ob das alles so funktioniert oder sinnvoll ist, weiß ich nicht. Ich habe bereits Stundenlang gegrübelt, wie man das besser realisieren kann, komme aber zu keinem besseren Ergebnis.
Könntet ihr mir vielleicht bei dem Problem helfen? Ich wäre sehr dankbar für Verbesserungsvorschläge!!

Noch eine weitere Frage:

Macht es Sinn, eine Tabelle für den Spieltag zu erstellen oder ist das überflüssig? Diese würde ich so aufbauen:

Spieltag (Datum, Spieltag)

So könnte der Spieltag aus der Tabelle Spiel ausgegliedert werden, aber ich bin mir nicht sicher, ob das einen Unterschied macht.

So das war jetzt ne ganze Menge Text, ich hoffe ihr steigt da gut durch. ;)

Vielen Dank schon mal im Voraus für die Hilfe!!!
 
Werbung:
Soweit erstmal gut nachvollziehbar.

Natürlich könnte man die Tore auch nur in der Tabelle Tore eingeben, damit wäre vorerst auch klar, welche Mannschaft das Tor geschossen hat. Das funktioniert aber nur so lange wie kein Spieler zu einem anderen Verein wechselt.
Ich würde sagen durch die Spalte Tor_Heim-Gast (könnte ein BIT sein) wird auch dieser Umstand mit abgedeckt. Wechselt ein Spieler den Verein funktioniert die Berechnung also immernoch. Auch dürfte sie, mit dieser Spalte, keinen so großen Rechenaufwand darstellen. Vieleicht sollte man das mal an Testdaten nachvollziehen.
Ich will nicht sagen das der Endstand in der Spiele Tabelle nicht stehen sollte. Aber der Aufgabensteller will ja auch keine künstlichen IDs, ist also irgendwo idealist in Sachen Normalisierung :)

Auch wäre zu Überlegen, Beziehnungen zwischen Spieler und Verein nicht 1:n sondern n:m in einer Zwischentabelle abzubilden und dort mit Datum von/bis zu versehen. So kann man Vertragsverhältnisse genau abbilden. (Gleiches gilt für Trainer)


Macht es Sinn, eine Tabelle für den Spieltag zu erstellen oder ist das überflüssig?
Ich würde sagen nein, da ein Spieltag dann ein Zeitraum und kein Datum haben müsste. Es werden aber auch Spiele verschoben / nachgeholt, die dann nicht in diesem Zeitraum liegen. Das Datum muss also in der Spiel Tabelle bleiben. Wenn man jetzt nicht grade offiziellen Spieltag von verspätet durchgeführten Spielen unterscheiden will scheint mir die Tabelle überflüssig.
 
Danke für die schnelle Antwort!

Ich würde sagen durch die Spalte Tor_Heim-Gast (könnte ein BIT sein) wird auch dieser Umstand mit abgedeckt. Wechselt ein Spieler den Verein funktioniert die Berechnung also immernoch.

Stimmt, daran habe ich nicht gedacht, danke für den Hinweis! Dann sollte das soweit funktionieren.

Auch wäre zu Überlegen, Beziehnungen zwischen Spieler und Verein nicht 1:n sondern n:m in einer Zwischentabelle abzubilden und dort mit Datum von/bis zu versehen. So kann man Vertragsverhältnisse genau abbilden. (Gleiches gilt für Trainer)

Das ist ne gute Idee, das werde ich gleich mal umsetzen.

Dass das Auslagern des Spieltages nicht so viel Sinn macht, habe ich mir schon fast gedacht, zumal ich kein Nachholen von verspäteten Spielen berücksichtigen werde. Danke auch für diese Bestätigung!!
 
Ich habe noch eine weitere Frage:

Und zwar hatte ich die Idee, die Nationalität der einzelnen Personen in eine Extra-Tabelle auszulagern. Das Problem ist natürlich, dass ich keine IDs verwenden darf. Deshalb dachte ich daran, Ländercodes zu benutzen, also eine Tabelle zu erstellen, in denen ich die Ländercodes den einzelnen Ländern zuordne und dann in den Personen-Tabellen nur Ländercodes zu verwenden. Ich bin mir nur nicht sicher, wieviel Sinn das wirklich macht?!?

Meine Idee dabei war folgende:
So könnte zum Einen Platz gespart werden, da nicht für jede Zeile ein großes Feld erstellt werden müsste, sondern nur ein kleines für 3 Zeichen. Ich weiß aber nicht ob das so viel ausmacht bei nur ca. 500-600 Datensätzen. Zum anderen könnte man aber bei Dateneingaben Rechtschreibfehlern vorbeugen, da nur bestimmte Ländercodes zugelassen sind. So kann es nicht passieren, dass gleiche Länder mit verschiedenen Bezeichnungen auftauchen.
 
Das kann man machen, aber: Bei 500-600 Datensätzen ist der Mehrverbrauch an "Platz" marginal. Demgegenüber steht Geschwindigkeit wohl in den meisten realen Projekten an erster Stelle. Auch hier ist der Unterschied banal (ohne es je getestet zu haben), aber wenn du nicht mehr Informationen zu Ländern erfassen willst (z.B. Hauptstadt, etc.) würde ich darauf verzichten.

Wenn nur bestimmte Ländercodes zugelassen sind, kannst du genausogut nur bestimmte Länder zulassen. Ich denke mal die Auswahl erfolgt in jedem Fall über ein Dropdown Menü oder dergleichen. Um das Menü zu befüllen könnte man tatsächlich eine Tabelle nutzen, je nach Menge.
 
Vielen Dank für die Antworten, das hat mich sehr viel weitergebracht!

Eine Frage hätte ich jetzt aber doch noch :)

Ich habe mich dazu entschieden, auch noch eine Tabelle für Karten zu erstellen, in die für jedes Spiel eingetragen wird, welcher Spieler in welcher Minute welche Karte bekommen hat.

Die Tabelle habe ich mir etwa folgendermaßen vorgestellt:

PK = unterstrichen

Karten(Heimmannschaft, Gastmannschaft, Spieler, Minute, Karte)

oder

Karten(Heimmannschaft, Gastmannschaft, Spieler, Minute, Sekunde, Karte)

Da es sein kann, dass in der selben Minute zwei Spieler eine Karte bekommen, habe ich entweder daran gedacht, den Spieler, der pro Spiel nur einmal vorkommt und die Karte, die ein Spieler pro Spiel auch nur einmal erhalten kann, als Teil des Primärschlüssels zu erstellen. Die Alternative wäre, zwei Felder für die Zeit zu erstellen, einmal Minute und einmal Sekunde, da gleichzeitig nicht 2 Spieler eine Karte erhalten werden. Nun bin ich mir nicht ganz sicher, welche Variante sinnvoller ist und ob es überhaupt sinnvoll ist einen so großen zusammengesetzten Primärschlüssel zu verwenden. Ich wüsste aber auch nicht, wie ich diesen ohne IDs kleiner bekomme.

Da ich noch keinerlei Programmierkenntnisse habe und dies erst in den 2 folgenden Semestern erlernen werde, in denen ich das Projekt weiterbearbeite, kann ich noch nicht absehen, welche Probleme/Schwierigkeiten später entstehen könnten, deshalb meine Frage, ob ein so großer Primärschlüssel irgendwelche Nachteile oder Probleme mit sich bringt oder man dies besser lösen könnte/sollte.

Auch stört mich, dass bereits in der Tabelle Spiel, Tore und jetzt auch noch Karten die Heimmannschaft und Gastmannschaft auftauchen. Die Tabellen Tore und Karten sehen sich schon sehr ähnlich durch Heimmannschaft, Gastmannschaft, Spieler. Auch da die Frage, ob das schlimm ist und man dies besser anders lösen sollte oder ist das okay? Sorry, aber ich bin noch recht neu auf dem Gebiet ;-)
 
Werbung:
Also erstmal würde ich Zeit nie in 2 Spalten schreiben wenn das nicht grade irgendwelche Vorteile bietet. Normalerweise gibt es den Datentyp DATETIME bzw. nur TIME, der speichert auch Sekunden.

Wenn ich aber mal davon ausgehe das es nur 3 Karten Typen gibt (Gelb, Gelb/Rot und Rot) wäre das der schönere Schlüssel, er verhindert das z.B. 2 Gelbe Karten doppelt eingetragen werden könnten. In der Realität würde man allerdings eh immer mit künstlichen Schlüsseln arbeiten und eventuell denkt man sich ja auch, man macht irgendwann eine Tabelle Ereignisse in der Sachen wie Tor, Karte, Elfmeter, Ecke, Freistoß, Abstoß, Vorlage etc. erfasst werden können. Das führt dann Tabelle Tore / Karten etc zusammen...
 
Zurück
Oben