Hilfe: Datenbankstrucktur

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Hilfe: Datenbankstrucktur

    Hallo Forum,

    ich plane eine Webseite für einen kleinen Badminton-Club in dem ca. 12 Stammspieler und ca. 10 Ersatzspieler dabei sind.

    Das Problem ist das die Stammspieler nicht immer Spielen können und sich ein Ersatzspieler suchen müssen. Bequem würde das natürlich über eine Webseite gehen über die man sich einlogt und gleich sieht ob ein Ersatzspieler zur Verfügung steht oder nicht. Das setzt natürlich vorraus das sich alle Spieler noch vor dem wöchentlichen Spiel "Frei" oder "Belegt" melden.
    Variabel sind auch die Spielfelder die man Buchen muss. Jeh nach dem wie viele Spieler spielen muss man die Plätze reservieren.

    Jetzt kommt mein Problem: Ich weis nicht wie ich die Datenbank aufbauen soll.

    Toll wäre auch: Je nachdem wie viele Spieler sich gemledet haben wird eine Verteilung auf die Plätze gemacht. Also wer mit wem spielen soll (darf). Und wenn man schon dabei ist könnte man ja noch eine Statistik mit einbringen.

    Danke schon mal für eure Hilfe.

  • #2
    *VERSCHIEB* nach BS
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Mhn...

      spieler_id, spieler_name, spieler_istersatz, spieler_frei


      Spieler_id = Klar, die ID des Spielers
      Spieler_Name = Der Name (auch klar)
      Spieler_istErsatz = 1 wenn der Spieler ein ersatzspieler ist, -1 wenn nicht
      Spieler_Frei = Nur bei Ersatzspielern, 1 = Der Ersatzspieler muss keinen Spieler ersetzen. -1 = Der Spieler ist für das Spiel nicht mehr frei.


      Wegen den Plätzen:

      Vielleicht eine Tabelle mit Teams, ich mach mal die Struktur

      team_id, team_spieler1, team_spieler2, team_gewonnen, team_verloren, team_unentschieden

      Team_ID = Klar
      Team_Spierel1 = Die ID des Spieler Nr. 1, (mit den Spielerdatenbank zusammenarbeiten)
      Team_Spieler2 = Die ID vom Spieler 2
      Team_gewonnen = Die Anzahl der Gewonnenen Spiele
      Team_verloren = brauch ich nicht zu erklären
      Team_unentschieden = (GIbt es das überhaupt bei Badminton? )

      Du könntest aber auch in der Spielertabelle per Spieler_TeamID auf die Teamtabelle leiten, das ist glaub ich besser...


      MfG Floriam
      PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

      Kommentar


      • #4
        @Abraxax

        Danke, wusste nicht wohin damit und hab einfach mal in den Raum geschriehen.

        ---

        Für die Spieler-Tabelle dachte ich mir:
        id,
        name,
        vorname,
        email,
        telefon_priv,
        telefon_ges,
        mobil,
        passwort,
        geburtstag,
        level_id, (Stamm-, Erstatzspieler)
        feldkonto (Spielgebühren)

        Für die Tabelle level (als unterscheidung ob Stamm-, Ersatzspieler oder eventuelle andere Leute)
        id,
        level, ...

        Für die Tabelle Felderbestellung
        id,
        felder_anzahl, (Benötigte Spielfelder)
        fuer_datum,
        timestamp, (Wann ging die Bestellung raus)

        Tabelle Config

        spielgebuehr_stamm,
        spielgebuehr_ersatz,
        platzgebuehr,
        club_name, adressdaten
        platzbestellung_nötig ja-nein,
        usw....

        Jetzt brauch ich noch Tabellen für die Benachrichtigung aller eingetragenen Spieler, es soll also gleich nach einem Spieletermin eine Email raus gehen die bis zu einem definierten Zeitraum beantwortet werden muss, ob ein Spieler zum nächsten Termin Spielen kann oder nicht. Kann er nicht, so bekommt er eine Email mit allen Ersatzspielern die noch nicht gebucht worden sind.
        Hat der Spieler dann einen Ersatz gefunden, müssen beide in einem Formular eintragen, noch am selben tag sonst gelten beide noch als frei und nicht als bebucht.

        puh


        Es braucht noch Tabellen für "Wer spielt mit wem und welche Ergebnisse wurden gemacht"

        Kommentar


        • #5
          Ok,


          Tabelle Games, mit den Zeilen game_id, game_ergebnis, game_players (in irgendeinem Format, welches zu dann mit explode zerlegen kannst)


          MfG Floriam
          PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

          Kommentar


          • #6
            @Floriam

            Das Prob ist das nicht immer die gleichen Spieler in einem Team sind. Ich denke da an eine Hilfstabelle. Z.B. so:

            @ALL
            Tabelle_Spiel_Aufteilung:
            ID
            Feld_NR
            Am_Uhr_Datum
            Team_A_ID
            Team_B_ID

            Für die Team_Hilfstabelle:
            ID
            Team_Spieler_1_ID
            Team_Spieler_2_ID

            Für die Ergebnisstabelle
            ID
            Tabelle_Spiel_Aufteilung_ID
            Satz_1_gewonnen_team_ID
            Satz_1_ergebniss
            Satz_2_gewonnen_team_ID
            Satz_2_ergebniss
            Satz_3_gewonnen_team_ID
            Satz_3_ergebniss

            Ich denke so kann man noch nen haufen Statistiken machen.
            Oder kann man das noch einfacher machen????


            Gruss
            Freesbie

            Kommentar


            • #7
              Also ich meinte das auch anders...

              Wenn spieler a & b gegeneinander Spielen (ich hab keine Ahnung wie Badminton geht ) dann wird eine neue Spalte gemacht wo bei Game_Spieler dann eben a | b steht...

              Wenn aber a & c zusammenspielen, dann wird wieder eine neue Tabelle gemacht bei Game_Spieler steht dann eben a | c.


              MfG Floriam
              PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

              Kommentar


              • #8
                Ok, zu deiner Lösung:

                Ich blick bei Tabelle_Spiel_Aufteilung_ID nicht ganz durch, was das heißt..
                PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                Kommentar


                • #9
                  Ich versuche das mal zu erklären.

                  Vor einem Spiel stehen ca 12 Leute im Club. Es geht dann hin und her wer mit wem spielt. Das dauert dann immer und es geht viel Zeit verloren. Am besten ist es wenn schon im vornherein fest steht wer mit wem zu spielen hat.

                  Ein Spiel geht bis zu 3 Sätzen, Wenn du 2 gewonnen hast, hast du das Match gewonnen. ein Satz geht bis zu 15 Punkte. Fast wie bei Volleyball.

                  Zu der Tabelle "Tabelle_Spiel_Aufteilung_ID" ist eigentlich die Ergebniss-Tabelle
                  Soll Daten aus der Tabelle "Tabelle_Spiel_Aufteilung" und Daten aus der Tabelle "Team_Hilfstabelle" beinhalten und die dazugehörenden Ergebnisse.

                  Aber wenn ich mir das so ansehe ist das ziemlich verworren.

                  Das muss doch auch einfacher gehen. Nur wie???

                  Und wie kann man die automatische Aufteilung realisieren?
                  Zuletzt geändert von freesbie; 25.01.2004, 17:05.

                  Kommentar


                  • #10
                    Zur Aufteilung:

                    1. User zählen
                    2. Spieler cachen (aber nur welche die Spielen)
                    3. Per rand() Spieler Nr.1 herausfinden
                    4. Den Spieler Nr.1 aus dem Array löschen
                    5. Spieler Nr.2 herausfinden

                    So in etwa (würd ich jedenfalls so machen)...


                    Floriam
                    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                    Kommentar


                    • #11
                      Na das ist doch schon mal was.

                      Dann könnte man ja z.B auch einen halben Tag vor dem Spiel ( Point of no return) alle gebuchten Spieler aus der DB holen.
                      In ein Array laden und dann Deine Methode anwenden.

                      aber wie könnte das genau aussehen?

                      # Hole alle Datensätze aus der Tabelle 'Gebucht-Spieler' mit dem gleichen Datum wie in Tabelle 'Spiele'

                      Tabelle Spiele (erstellt durch ein Skript, zB an jedem Mittwoch)
                      | id | spiele_am |
                      ---------------------
                      | 1 | 27.01.2004|
                      -----------------------
                      | 2 | 08.01.2004|

                      Kommentar


                      • #12
                        ich fasse mal zusammen was ich an Tabellen alles habe:

                        Code:
                        #
                        # Table structure for table `config`
                        #
                        
                        CREATE TABLE `config` (
                          `club_name` char(20) NOT NULL default '',
                          `felder_abo` int(11) NOT NULL default '0'
                        ) TYPE=MyISAM;
                        
                        # Table structure for table `level`
                        #
                        
                        CREATE TABLE `level` (
                          `id` int(11) NOT NULL auto_increment,
                          `level` varchar(20) NOT NULL default '',
                          PRIMARY KEY  (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=3 ;
                        
                        # Table structure for table `spiel_aufteilung`
                        #
                        
                        CREATE TABLE `spiel_aufteilung` (
                          `id` int(11) NOT NULL auto_increment,
                          `feld_nr` int(11) NOT NULL default '0',
                          `am_datum` date NOT NULL default '0000-00-00',
                          `team_a_id` int(11) NOT NULL default '0',
                          `team_b_id` int(11) NOT NULL default '0',
                          PRIMARY KEY  (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=1 ;
                        
                        # Table structure for table `spiele_datum`
                        #
                        
                        CREATE TABLE `spiele_datum` (
                          `id` int(11) NOT NULL auto_increment,
                          `datum` date NOT NULL default '0000-00-00',
                          PRIMARY KEY  (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=1 ;
                        
                        # Table structure for table `spieler`
                        #
                        
                        CREATE TABLE `spieler` (
                          `id` int(11) NOT NULL auto_increment,
                          `name` varchar(20) NOT NULL default '',
                          `vorname` varchar(20) NOT NULL default '',
                          `emailadresse` varchar(30) NOT NULL default '',
                          `telefon_priv` varchar(20) NOT NULL default '',
                          `telefon_ges` varchar(20) NOT NULL default '',
                          `mobil` varchar(20) NOT NULL default '',
                          `geburtstag` date NOT NULL default '0000-00-00',
                          `level_id` int(11) NOT NULL default '0',
                          `konto` varchar(6) NOT NULL default '',
                          `admin` int(11) NOT NULL default '0',
                          PRIMARY KEY  (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=1 ;
                        
                        # Table structure for table `spieler_buchung`
                        #
                        
                        CREATE TABLE `spieler_buchung` (
                          `id` int(11) NOT NULL auto_increment,
                          `spiel_datum_id` int(11) NOT NULL default '0',
                          `spieler_id` int(11) NOT NULL default '0',
                          `gebucht` int(11) NOT NULL default '0',
                          PRIMARY KEY  (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=1 ;
                        
                        # Table structure for table `teams`
                        #
                        
                        CREATE TABLE `teams` (
                          `id` int(11) NOT NULL auto_increment,
                          `spieler_a_id` int(11) NOT NULL default '0',
                          `spieler_b_id` int(11) NOT NULL default '0',
                          `spiele_datum_id` int(11) NOT NULL default '0',
                          PRIMARY KEY  (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=1 ;

                        EOF


                        EDIT:
                        [code]-tags by Abraxax
                        Zuletzt geändert von Abraxax; 25.01.2004, 20:49.

                        Kommentar


                        • #13
                          OffTopic:
                          Original geschrieben von freesbie
                          ich fasse mal zusammen was ich an Tabellen alles habe:
                          und das nächste mal bitte mit den code-tags des forums.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            >> aber wie könnte das genau aussehen?


                            Naja, ich mach das mal als Code

                            PHP-Code:
                            $sql "Select abfrage mit überprüfung, lass ich hier mal weg (sollst ja auch noch was machen :p)";

                            $query mysql_query($sql) or die(mysql_error());

                            $spieler_cache = array();

                            while(
                            $result mysql_fetch_array()) {
                              
                            array_push($result[spieler_id]);
                            }

                            //Spieler #1
                            $spieler_id array_rand($spieler_cache);
                            $spieler_1 $spieler_cache[$spieler_id];
                            $spieler_cache array_slice($spieler_cache$spieler_id);

                            //$spierl_1 = Die ID des Spielers oder sollte die sein :D

                            //Das ganze macht man auch noch mit Spieler #2, das mach ich jetzt allerdings nicht :D 

                            Hoffe es klappt, ist ungetestet


                            MfG Floriam
                            PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                            Kommentar


                            • #15
                              @Floriam
                              Great THX; hast mir ein Licht aufgehen lassen;

                              Am rande: Habe gestern gelesen das es über 19.800 eingetragene Badminton AmateurClub's in Deutschland gibt. Ob sich da ein Open-Source Project Lohnt und ich einfach mal bei sourceforge.net was ins leben rufen sollte? Macht sowas Sinn?

                              gruss
                              Freesbie

                              Kommentar

                              Lädt...
                              X