Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankstruktur

Einklappen

Neue Werbung 2019

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

  • Datenbankstruktur

    Hey liebe Community!

    Folgende Fragestellung an euch, da das Netz diesbezüglich sehr unterschiedliche Infos liefert.

    Angenommen, ich möchte eine Seite erstellen, mit der ich bundesweit Tennisplätze reservieren kann. Wie würdet ihr die Tabellen aufteilen. Meiner Ansicht nach, wäre es am einfachsten, wenn beim Anlegen eines neuen Vereins beispielsweise mit fünf Plätzen auch eine Tabelle mit in der Datenbank angelegt wird, in der dann die fünf Plätze stehen. Ist natürlich sehr vereinfacht. Der nächste Verein bekommt dann wieder eine neue Tabelle mit seinen Plätzen. Oder aber eine Riesentabelle, in der dann beispielsweise Verein 1 (bzw. die ID des Vereins 1) steht und diese halt fünf Einträge bekommt (Platz 1-5). Das gleiche dann mit Verein zwei.

    Im Netz findet man öfters Aussagen, dass Tabellen auf keinen Fall zur Laufzeit generiert werden dürfen. Das seh ich prinzipiell auch so, die Frage ist nur, ob auch das Anlegen eines neuen Vereins durch einen Admin zur Laufzeit zählt.

    Ich freu mich auch eure Antworten und vielen Dank schonmal in vorraus

  • #2
    Zitat von michiman Beitrag anzeigen
    ..., die Frage ist nur, ob auch das Anlegen eines neuen Vereins durch einen Admin zur Laufzeit zählt.
    Kannst du das etwas besser beschreiben? Klingt als hättest du die Mission nicht richtig verstanden...

    Kommentar


    • #3
      Welche Mission???

      Ich geb echt mein bestes...

      Also, die Frage, die ich mir stelle ist Folgende. Nehmen wir an ich entwickle eine Seite auf der man zentral auf alle Tennisplätze bundesweit reservieren kann. Dafür muss ja nach und nach jeder Verein mit seinen X Plätzen angelegt werden. Diesen Job übernimmt der Admin. So weit, so gut... Angenommen, es gibt dann einen Adminbereich, in dem der Admin Infos zum Verein eintragen kann. Name, Strasse, Öffnungszeiten, Preise und Anzahl der Plätze.

      Nun hab ich zwei Möglichkeiten. Entweder es gibt mehrere große Tabellen. Eine Tabelle für alle Vereine, mit den IDs 1 bis n, eine Tabelle Plätze, in der dann jeder Platz mit den IDs 1 bis m einer der IDs aus 1 bis n zugewiesen wird usw...

      oder

      Es wird für jeden Verein beim Anlegen des neuen Vereins eine neue Tabelle in der Datenbank erzeugt, die dann eben zu einem der Vereine gehört und nur diese X Plätze beinhaltet.

      Ist meine Frage nun deutlicher formuliert?

      Kommentar


      • #4
        Zitat von michiman Beitrag anzeigen
        ... Meiner Ansicht nach, wäre es am einfachsten, wenn beim Anlegen eines neuen Vereins beispielsweise mit fünf Plätzen auch eine Tabelle mit in der Datenbank angelegt wird, in der dann die fünf Plätze stehen. ...
        Nein, bitte keinesfalls für "sowas" neue Tabellen. Ich wiederhole mich hier gerne: Eine Datenbank ist kein Excel!

        Schau mal hier - Stichwort "Normalisierung" http://www.peterkropff.de/site/mysql/normalisierung.htm
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von michiman Beitrag anzeigen
          oder

          Es wird für jeden Verein beim Anlegen des neuen Vereins eine neue Tabelle in der Datenbank erzeugt, die dann eben zu einem der Vereine gehört und nur diese X Plätze beinhaltet.
          Und dieses Oder begründest du wie?
          [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

          Kommentar


          • #6
            Zitat von michiman Beitrag anzeigen
            Meiner Ansicht nach, wäre es am einfachsten, wenn beim Anlegen eines neuen Vereins beispielsweise mit fünf Plätzen auch eine Tabelle mit in der Datenbank angelegt wird, in der dann die fünf Plätze stehen. Ist natürlich sehr vereinfacht. Der nächste Verein bekommt dann wieder eine neue Tabelle mit seinen Plätzen.
            Nein.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von michiman Beitrag anzeigen
              Welche Mission???

              Ich geb echt mein bestes...

              Also, die Frage, die ich mir stelle ist Folgende. Nehmen wir an ich entwickle eine Seite auf der man zentral auf alle Tennisplätze bundesweit reservieren kann. Dafür muss ja nach und nach jeder Verein mit seinen X Plätzen angelegt werden. Diesen Job übernimmt der Admin. So weit, so gut... Angenommen, es gibt dann einen Adminbereich, in dem der Admin Infos zum Verein eintragen kann. Name, Strasse, Öffnungszeiten, Preise und Anzahl der Plätze.

              Nun hab ich zwei Möglichkeiten. Entweder es gibt mehrere große Tabellen. Eine Tabelle für alle Vereine, mit den IDs 1 bis n, eine Tabelle Plätze, in der dann jeder Platz mit den IDs 1 bis m einer der IDs aus 1 bis n zugewiesen wird usw...

              oder

              Es wird für jeden Verein beim Anlegen des neuen Vereins eine neue Tabelle in der Datenbank erzeugt, die dann eben zu einem der Vereine gehört und nur diese X Plätze beinhaltet.

              Ist meine Frage nun deutlicher formuliert?
              Wie bereits angetönt: Das ist kein Excel. In der Datenbankwelt modelliert man Entitäten. Entitäten sind (vereinfacht) Dinge, wie z.B. ein Tennisplatz oder eine Spielzeit. Danach modellierst du Beziehungen untereinander. Bsp.: Ein Benutzer hat eine oder mehrere Spielzeit(en) auf jeweils einem Tennisplatz, der zu einer Tennishalle in einem Bundesland gehört.

              Wenn du so etwas hast, musst du für neue Informationen immer nur neue Zeilen erstellen. Das ist das Ziel.
              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

              Kommentar


              • #8
                Zitat von michiman Beitrag anzeigen
                Hey liebe Community!

                Folgende Fragestellung an euch, da das Netz diesbezüglich sehr unterschiedliche Infos liefert.

                Angenommen, ich möchte eine Seite erstellen, mit der ich bundesweit Tennisplätze reservieren kann. Wie würdet ihr die Tabellen aufteilen.
                Vereinfacht so

                Code:
                test=# create table verein (id int primary key, name text);
                CREATE TABLE
                Time: 12,009 ms
                test=*# create table plaetze (id int primary key, verein int references verein, name text);
                CREATE TABLE
                Time: 54,306 ms
                test=*# create table platz_reservierung(platz int references plaetze, dauer tsrange, exclude using gist (platz with =, dauer with &&));
                CREATE TABLE
                Time: 111,459 ms
                So kann kein Platz doppelt reserviert werden.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Vielen Dank für eure Beiträge, damit weiß ich schon mal, in welche Richtung die Reise gehen wird.
                  @akretschmer: auch für den Fall, dass ihr mich jetzt als totalen Anfänger abstempelt, aber was hat es mit Deiner Schreibweise auf sich? test=# und test =*# hab ich noch nie gesehen und was macht die Time-Angabe in Deiner Ausführung?

                  Danke

                  Kommentar


                  • #10
                    Zitat von michiman Beitrag anzeigen
                    Vielen Dank für eure Beiträge, damit weiß ich schon mal, in welche Richtung die Reise gehen wird.
                    @akretschmer: auch für den Fall, dass ihr mich jetzt als totalen Anfänger abstempelt, aber was hat es mit Deiner Schreibweise auf sich? test=# und test =*# hab ich noch nie gesehen und was macht die Time-Angabe in Deiner Ausführung?

                    Danke
                    Das "test=#" ist der Prompt der DB, wenn ich nicht in einer Transaktion bin, "test =*#" dann innerhalb einer Transaktion. Die Time-Angaben: wie lange die Aktion gedauert hat.

                    Also: das sind Dinge, die ich nicht schreibe. Die Datenbank ist interaktiv, sie redet mit mir ...
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar

                    Lädt...
                    X