1. hab ich gleich mal eine Gegenfrage (*g*): Mit welchem Programm hast denn deine Planung erstellt?
2. Kann man das so machen, spricht nichts gegen, aber wo ist eigentlich bei "team_user" dein Primary Key??
3. würde ich bei matches das in teamid_a und teamid_b umbenennen, damit sofort klar ist das es sich hier nicht
um das team, also den namen, handelt sondern um die ID des entsprechenden teams
4. wenn du nicht mehr als gerundet 65000 user bzw teams hast reicht ein SMALLINT für deine Primary Keys und für
die user_ids bzw. team_ids vollkommen aus
5. überall wo du keine Vorzeichen brauchst, also nur positive Zahlen, wie z.B. bei den PrimaryKeys oder bei den team_ids
bzw. user_ids ( weil du wirst ja wohl kaum nen User mit der ID "-5" haben, oder?? ) benutzt du am besten "unsigned" als
zusätzliches Attribut für deine Spalte...
signed (standard) -> mit Vorzeichen, bei SMALLINT dann z.B. -32.000 bis 32.000 (gerundet)
unsigned -> ohne Vorzeichen, bei SMALLINT dann z.B. 0 bis 65.000 (gerundet)
6. Ja, das Ranking würde man jetzt NICHT in einer Tabelle machen sondern per PHP die Daten auslesen und dann sortieren...
Allerdings, wenn du jetzt sagen wir mal 200 Teams hast und die haben 5000 Matches gespielt, dann würde das wohl ein bisschen
dauern, jedes Mal die "Punktzahl" von jedem Team neu auszulesen, also wäre die schlauste Idee wohl wenn du dir in deiner Teamtabelle
noch eine Spalte mehr machst namens "punkte" oder "score" oder so und da speicherst du immer die Punktzahl des Teams ab.
Dazu kannst du dir dann ja auch ein PHP-Skript schreiben, welches beim eintragen eines neuen Matches auch gleich die neuen Punktzahlen
für die beiden Teams ausrechnet...
Hast du aber sagen wir mal sowieso nur 10-20 Teams und die spielen im Jahr vielleicht 100 Matches und auf deine Seite gehen täglich nur
10 Leute, dann kannst es auch so lassen und jedes Mal die Punktzahl einfach aus den Punkten der einzelnen Matches generieren...
Musst du wissen, neue Spalte für Punktzahl in der Teamtabelle ist die elegantere Lösung, die besonders gewählt werden sollte wenn es auf
Perfomance ankommt...und einfach die Punktzahl aus der Match-Tabelle "summieren" ist die schnellere Lösung ( vom Aufwand her ) aber eben
auch die deutlich langsamere (besonders bei vielen leuten die sich das angucken bzw. Vielen Teams/Matches)
Abgesehen davon würde ich vielleicht noch bei "User" auf "vorname" sowie "nachname" und bei "teams" auf "name" einen Index legen, falls man mal
tatsächlich irgendwann einige Einträge in der DB hat und du mal nach Vornamen, Nachnamen oder Teamnamen suchen willst...
gruß,
Ascer
__________________
-------------------------------------------------------
Alle Angaben sind wie immer ohne Gewähr ;)
Für Korrekturen bin ich -immer- offen
--------------------------------------
Wer ist der größere Tor?
Der Tor, oder der, der dem Tor folgt?
--------------------------------------
-> Mein PC <-
-------------------------------------------------------
Vielen Dank für Deine super ausführliche Antwort. Ich werde mir Deine Verbesserungen jetzt zur Brust nehmen und mein Schema verbessern.
Zu Deiner Frage: MYSQL Workbench ;)
EDIT: Muss ich bei einer assoziativen Tabelle einen primary key festlegen? Laut normalisierung ja... aber macht das da überhaupt Sinn?
Zitat:
Zitat von ascer
Hi,
1. hab ich gleich mal eine Gegenfrage (*g*): Mit welchem Programm hast denn deine Planung erstellt?
2. Kann man das so machen, spricht nichts gegen, aber wo ist eigentlich bei "team_user" dein Primary Key??
3. würde ich bei matches das in teamid_a und teamid_b umbenennen, damit sofort klar ist das es sich hier nicht
um das team, also den namen, handelt sondern um die ID des entsprechenden teams
4. wenn du nicht mehr als gerundet 65000 user bzw teams hast reicht ein SMALLINT für deine Primary Keys und für
die user_ids bzw. team_ids vollkommen aus
5. überall wo du keine Vorzeichen brauchst, also nur positive Zahlen, wie z.B. bei den PrimaryKeys oder bei den team_ids
bzw. user_ids ( weil du wirst ja wohl kaum nen User mit der ID "-5" haben, oder?? ) benutzt du am besten "unsigned" als
zusätzliches Attribut für deine Spalte...
signed (standard) -> mit Vorzeichen, bei SMALLINT dann z.B. -32.000 bis 32.000 (gerundet)
unsigned -> ohne Vorzeichen, bei SMALLINT dann z.B. 0 bis 65.000 (gerundet)
6. Ja, das Ranking würde man jetzt NICHT in einer Tabelle machen sondern per PHP die Daten auslesen und dann sortieren...
Allerdings, wenn du jetzt sagen wir mal 200 Teams hast und die haben 5000 Matches gespielt, dann würde das wohl ein bisschen
dauern, jedes Mal die "Punktzahl" von jedem Team neu auszulesen, also wäre die schlauste Idee wohl wenn du dir in deiner Teamtabelle
noch eine Spalte mehr machst namens "punkte" oder "score" oder so und da speicherst du immer die Punktzahl des Teams ab.
Dazu kannst du dir dann ja auch ein PHP-Skript schreiben, welches beim eintragen eines neuen Matches auch gleich die neuen Punktzahlen
für die beiden Teams ausrechnet...
Hast du aber sagen wir mal sowieso nur 10-20 Teams und die spielen im Jahr vielleicht 100 Matches und auf deine Seite gehen täglich nur
10 Leute, dann kannst es auch so lassen und jedes Mal die Punktzahl einfach aus den Punkten der einzelnen Matches generieren...
Musst du wissen, neue Spalte für Punktzahl in der Teamtabelle ist die elegantere Lösung, die besonders gewählt werden sollte wenn es auf
Perfomance ankommt...und einfach die Punktzahl aus der Match-Tabelle "summieren" ist die schnellere Lösung ( vom Aufwand her ) aber eben
auch die deutlich langsamere (besonders bei vielen leuten die sich das angucken bzw. Vielen Teams/Matches)
Abgesehen davon würde ich vielleicht noch bei "User" auf "vorname" sowie "nachname" und bei "teams" auf "name" einen Index legen, falls man mal
tatsächlich irgendwann einige Einträge in der DB hat und du mal nach Vornamen, Nachnamen oder Teamnamen suchen willst...
beim beutzen meines sql scripts tritt folgender Fehler auf:
you have an error in your sql syntax: check the manual to your mysql server version for the right syntax to use near ') , CONSTRIANT 'teams_team_id_fk1' FOREIGN KEY ('team_id_a')
REFER' at line 9
das scirpt ist anbei, allerdings steht da .doc statt .sql da cih sonst ciht hätte hochladen können.