Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datenbank Architektur für eine Android App

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von andrejedd, 14 September 2016.

  1. andrejedd

    andrejedd Benutzer

    Hallo zusammen

    Ich benutze MySql schon seid Jahren aber nie für grössere Projekte da ich dies nur für die eigene und private Entwicklung verwende und nicht für Beruflicheprojekte.

    Da ich kein Datenbankspezialist bin sondern ein Java-Developer, bräuchte ich da bezüglich der Architektur einer MySql-Datenbank.

    Ich bin daran eine Android-App zu entwickeln indem Freunde untereinander einige Spiele spielen können.
    Die Datenbank enthält folgende Tabellen und folgende Spalte.

    users
    • id (PK)
    • name
    • email
    • password
    • androiduniqueid
    • created_at
    friends
    • fid (PK)
    • userid1 (FK auf users.id)
    • userid2 (FK auf users.id)
    • request (1=freunde, 0=freundschaftsanfrage offen)
    gamerequest
    • grId (PK)
    • userid1 (FK auf users.id)
    • userid2 (FK auf users.id)
    • request (0=wenn spielanfrage noch offen ist)
    game
    • gId (PK)
    • grId (FK auf gamerequest.grId)
    • userid1 (FK auf users.id)
    • userid2 (FK auf users.id)
    • gameunique
    • resultUid1 (Endpunktestand des Spiel vom ersten User)
    • resultUid2 (Endpunktestand des Spiel vom zweiten User)
    • timeResultId1 (Wie lange erster User hatte)
    • timeResultId2 (Wie lange zweiter User hatte)
    • game (welches spiel)
    • startetGame (timestamp)

    Dies wärs. Aktuell funktioniert das so jedoch weiss ich nicht ob dies für mein Vorhaben der perfekte Ansatz und die perfekte Architektur wäre? Oder schlägt mir jemand sonst noch eine andere Datenbank vor für bestimmte Abspeicherungen (als Beispiel NoSql für users oder was auch immer um die performance zu steigern?)

    Bitte um Ratschlag und kritik, dankeschön :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Die Tabellen sehen soweit ganz okay aus. Von welchen Datenmengen reden wir?

    Ich würde allerdings eher zu PostgreSQL raten, je nach dem, was Du später auswerten willst hast Du da bessere Möglichkeiten. Vielleicht willst Du auch diverse Constraints nutzen (z.B. daß in der friends-Tabelle nicht (Max,Susi) und (Susi,Max) drinne stehen können. Solche und andere Dinge kannst Du in PG deutlich einfacher abbilden.
     
  3. andrejedd

    andrejedd Benutzer

    @akretschmer Danke für deine schnelle Rückmeldung. Kenne PostgreSQL gar nicht. Die App sollte dann man in den Store sobald sie den letzten Feinschliff noch kriegt also rechne ich mal mit dem schlimmsten und zwar von X-Tausenden Daten. Natürlich kommt dann noch das Clustering was bei MySQL nichts kostet. Und wie siehts aus mit dem Indexieren, welche Spalten davon würdest du Indexieren? Oder würdest du die gar nicht indexieren, da ja dann scheinbar das Insert, Delete, Update langsamer sein wird? Und von diesen hat es genug in der datenbank da bei einem spiel und sonst so überwas reingeschrieben, angepasst oder gelöscht wird.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    schwere Wissenslücke ;-)

    PostgreSQL: The world's most advanced open source database

    Indexe richten sich nach den Abfragen (bzw. sind nötig für Constraints, werden also teilweise impliziet erstellt). Ohne Abfragen zu kennen kann ich nicht sagen, welche explizieten Indexe zu setzen sind.
     
  5. andrejedd

    andrejedd Benutzer

    akretschmer gefällt das.
  6. akretschmer

    akretschmer Datenbank-Guru

    Du könntest u.U. Spalten einsparen, hier mal ganz grob:

    Code:
    test=# create table users(id int primary key, name text);
    CREATE TABLE
    test=*# create table friends (u1 int references users, u2 int references users, primary key(u1,u2), check (u1 < u2));
    CREATE TABLE
    test=*# create table game(u1 int references users, u2 int references users, foreign key(u1,u2) references friends);
    CREATE TABLE
    test=*#
    
    In der game-tabelle kannst Du die 2 User-Angaben gleichzeitig als FK in die users-Tabelle nehmen und, beide zusammen, als FK in die friends-Tabelle. Diese hat auch einen Check-Constraint, daß nicht ein Freunde-Paar doppelt da eingetragen werden kann.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden