Announcement

Collapse
No announcement yet.

Empfehlung für Datenbank

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Empfehlung für Datenbank

    Hallo zusammen,

    Ich möchte gerne ein neues Green Field Programmierprojekt angehen. Dabei möchte ich gerne Dart-Spiele (und später auch Turniere, verschiedene Spielformen, Spieler, Ranglisten,...) erfassen.

    Das ganze soll in Python geschehen und anfangen möchte ich mit dem Standard: 501.
    Hierbei wird von 501 Punkten heruntergezählt. Geworfen werden immer abwechselnd 3 Darts; diese 3 Würfe nennt man "Aufnahme".
    Das geht so lange bis einer die 501 Punkte in Summe getroffen hat ; dann ist die Runde (Leg) vorbei und dir nächste beginnt. Man kann hierbei unterschiedliche Zählweisen einsetzen:

    Mit welcher Datenbanktechnik / Produkt würdet Ihr das anfangen? SQL? NoSQL?
    Für z. B. Postgres oder MySQL spricht ja z. B. das Frameworks wie Django diese voraussetzen.
    Aber evtl. ist man aufgrund der vielen verschieden Zählweisen und spielformen beim Dart mit einer flexibleren Lösung wie MongoDB oder CouchDB besser beraten?

    Ich würde hier gerne einfach mal ein paar Meinungen hören

    Danke schon mal für Eure Antworten!

  • #2
    Kann jetzt nicht erkennen, was nun die Zählweise bei Dart mit der Auswahl einer Datenbank zu tun hat. Du wirst doch nicht nach jedem Wurf Daten in die Datenbank speichern wollen. Da erscheint es doch sinnvoll das Endergebnis abzuspeichern.
    Im Vordergrund sollten folgende Fragen stehen:

    Lokale DB oder ServerDB?
    Webanwendung oder Desktopanwendung?
    Wer / wieviele sollen die Anwendung nutzen?
    Wenn Webanwendung, was stellt dein Provider zur Verfügung?
    Christian

    Comment


    • #3
      Ja - vielleicht bin ich da noch zu blauäugig unterwegs; ich kann zwar ganz gut Python, aber wie genau man eine größere Applikation konzipiert, das lerne ich gerade durch Projekte wie dieses Vorhaben erst:
      Der Plan ist, das man auf der einen Seite eine App oder Website hat, auf der man die Würfe erfasst. In der Regel gibt man entweder jeden der 3 geworfenen Darts nach jeder Aufnahme (nach 3 geworfenen Darts) einzeln ein oder die in dieser Aufnahme erreichte Summe; also: Entweder 3 einzelne Werte oder einen Gesamtwert.
      Auf der anderen Seite soll es eine Ansicht geben, bei der man Life ein Spiel verfolgen kann.

      In dieser Beschreibung stecken mehrere Anforderungen, die Einfluss auf eine DB haben könnten:

      1. Es gibt für Spiele verschiedene Formate um Aufnahmen zu erfassen:
      a) Summe (1x Zahl)
      b) Einzelwürfe (3x Zahlen)
      c) Einzelwürfe mit Modifikatoren für Double und Tripple - Treffer (3x Zahl + optionalem Modifikator)

      Diese Form von unterschiedlichen Strukturen beim Erfassen gleicher Elemente (Spiele) jedoch mit unterschiedlichen Datenstrukturen spricht nach meinem Verständnis für Datenbanken mit dynamischeren Strukturen wie NoSQL.

      2. Da die "Zuschauer" das Spiel ja Live verfolgen sollen und weil das Spiel ja nicht abgebrochen werden soll, wenn irgendwie die Verbindung abgerissen ist oder so, dachte ich schon das es eine gute Idee ist die Werte nach jeder Aufnahme, wenn der Spieler ans Board tritt um seine Darts zu holen und die Punkte einzugeben, gespeichert werden.

      Es soll eine ServerDB sein; die Spiele sollen auf Eingabegeräten erfasst werden, die jedoch an einen zentralen Server die Ergebnisse übermitteln.
      Es soll auch eine Webanwendung sein, in der man durch Spiele, Turnierpläne, Tabellen, ... usw. browsen kann und die man, zusätzlich zu einer Tablet/Handy-App nutzen kann, um sowohl die Würfe einzugeben, wie auch um Spiele Live zu verfolgen.
      Es soll auch irgendwann mal eine Android-App geben; zunächst aber reine Webseiten-App.
      Nutzen sollen die App hoffentlich irgendwann mal hunderte parallel. Provider bin ich selbst. Ich bin DevOps Engineer und betreibe eine Reihe Server selbst.
      Ich bin also kein kompletter Anfänger; nur was diese Wahl einer Datenbank für eine bestimmte Art von Applikation angeht fehlt mir Erfahrung.

      Comment


      • #4
        Diese Form von unterschiedlichen Strukturen beim Erfassen gleicher Elemente (Spiele) jedoch mit unterschiedlichen Datenstrukturen spricht nach meinem Verständnis für Datenbanken mit dynamischeren Strukturen wie NoSQL.
        Sicher nicht. Da würde bedeuten, dass alle die SQL-DBs nutzen keine strukturierten, dyn. Daten haben. Kann jetzt such nicht erkennen, wo ein Dartspiel unterschiedliche Strukturen hat.
        Ein Spiel besteht vermutlich aus einer Tabelle Grunddaten wie Datum, Nachname, Vorname ...Dann kommen Tabellen für die Würfe hinzu. Diese nehmen die unterschiedlichen Daten auf und werden zu den Grunddaten gejoint. Das ist dann die Datenbasis für ein Spiel.
        Wenn du lieber NoSQL nutzen willst tu es. Die Daten sind aber kein Grund dafür

        Bei den minimalen Daten kannst du jede Datenbank nehmen.
        Schau dich nach kostenlosen Server DBs um (MariaDB, Firebird, Postgres)

        Die Anwendung sollte eine Client/Server Struktur haben
        Als Client erstmal der Browser. Serverseitig eine Komponente, die die Daten verwaltet, die Persitienzschicht abbildet und die Daten für den Client aufbereitet. Der Client stellt diese dann nur dar. Je "dümmer" der Client desto einfacher die Portierung auf andere Clients (APP).
        Im Falle des Browsers wäre das dann

        Client(Browser) ->Server(Apache) ->PHP->Datenbank

        Wenn du alles selbst machst kannst du auch Tomcat, JBOSS, Glassfish als Server nutzen und das serverseitig mit Java (JSF, Primefaces) programmieren. Für die Datenbank kannst du dann OR-Mapper wie Hibernate o.a. nutzen.
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Sicher nicht. Da würde bedeuten, dass alle die SQL-DBs nutzen keine strukturierten, dyn. Daten haben. Kann jetzt such nicht erkennen, wo ein Dartspiel unterschiedliche Strukturen hat.
          Das verstehe ich jetzt nicht ganz ...
          Also erstmal: Ich kenne MariaDB, MySQL, Postgres usw. aus Administrativer Sicht ziemlich gut; kann die auch betreiben usw. - alles kein Problem!
          Aus DB Struktursicht kenne ich die nur so lala; und eben das würde ich gerne ändern! Ich betreibe z.B. mehrere WordPress und suche mir aus den Datenbanken dann auch hier und da mal was raus; navigieren und Daten ziehen kann ich also.
          Ich habe auch schonmal simple Daten aus Tutorials selbst erzeugt - keine Ahnung: Eine Tabelle für Personen mit Adressdaten, Geburtstagen, usw. Aber halt alles nur zum üben.

          Aber es wäre mir neu, wenn man bei herkömlichen SQL RDBMS Tabellen mit dynamischen Strukturen hätte. Zum Beispiel:
          Wenn ich die erste und zweite Aufnahme als "Summe" erfasse und mir dann überlege, das ich eigentlich lieber Einzelwurferfassung machen möchte. Dann habe ich ja, in JSON dargestellt, in etwa folgende Datenstruktur:

          Code:
          "scores": {
              "player1": [
                  [60],
                  [100],
                  ["t5", "s20", "s20"]
              ],
              "player2": [
                  ...
              ]
          }
          Mit Dokumentenbasierten NoSQL DBs kann man das ja einfach switchen, soweit ich weiß. (Wie) geht sowas auch mit SQL?

          Als Programmiersprache wird komplett Python zum Einsatz kommen; also ich denke ein gUnicorn+nginx Servergemisch.

          Comment


          • #6
            Habe ich versucht oben zu beschreiben. Ich kenne Dart nicht und weiß nicht was eine Aufnahme oder Summe in dem Zusammenhang ist

            Tabelle 1
            ID (Auto/Sequence,PK)
            NAME (player1)
            ZAHL1 (60)
            ZAHL2 (100)

            Tabelle 2
            ID (Auto/Sequence,PK)
            TABELLE1_ID (Referenz auf Tabelle 1,Foreign Key)
            ZAHL3
            (ZAHL3=je einen Datensatz für t5 s20 s20)

            select * from tabelle1 a left join tabelle2 b on a.ID=b.TABELLE1_ID

            würde alle zu einem Spiel gehörenden Daten sammeln

            EDIT
            Nicht alle CDs haben die gleiche Anzahl von Titeln
            https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
            Zuletzt editiert von Christian Marquardt; 09.09.2023, 17:05.
            Christian

            Comment

            Working...
            X