Datenbank Architektur für eine Android App

andrejedd

Benutzer
Beiträge
9
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 :)
 
Werbung:
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.
 
@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.
 
Werbung:
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.
 
Zurück
Oben