?
Mechanics schrieb:
sqlc schrieb:
Aber doch nur, wenn ich userübergreifend eine Abfrage machen will, oder? Der einzelne User hat ja mit den Daten anderer User nichts am Hut.
Aber woher weißt du, wie die Tabelle des Benutzers heißt? Du brauchst zumindest zusätzlichen Code, um das zu verwalten und herauszufinden und dann musst du das in deine Queries einbeziehen. Dann brauchst du wahrscheinlich auch eine Benutzerverwaltung, die Benutzer anlegen und löschen kann? Also brauchst du DAL Statements zum Anlegen/Löschen von Tabellen.
Und dass du jetzt keine userübergreifenden Funktionen hast, heißt ja nicht, dass es so bleiben wird. Irgendwann will man doch Statistiken usw. einbauen.
Da stimme ich prinzipiell ja zu. Ich schildere aber nochmal kurz, wie ich mir das gedacht habe:
In der Online-Variante gibt es eine Datenbank, die nutzerübergreifende Informationen speichert (Login-Daten, etc.). In dieser Datenbank steht neben den Nutzern auch die jeweils zugeordnete Nutzer-Datenbank (ausgehend davon, dass jeder Nutzer eine eigene Datenbank hat). Ich muss jeder Nutzer-DB bei der Erstellung eh einen Namen verpassen, da ist es dann kein Problem, diesen Namen in der System-DB nutzerbezogen zu speichern. Die Tabellen in den Nutzer-DBs sind namenstechnisch identisch (in meinem Fall 'References', 'Records' und 'RecordFacets').
So stelle ich mir nach diesem Schema ein Login vor:
Eingabe Login-Daten -> Zugriff auf System-DB -> Bei erfolgter Verifizierung: Ermitteln der Nutzer-DB und Erstellen der Session -> Connect mit der Nutzer-DB -> Nutzer kann loslegen
Hätte ich für jeden Nutzer extra Tabellen wäre das natürlich umständlich, da ich jeden Tabellen-Namen speichern müsste und bei Bedarf den dann ermitteln muss. Alternativ könnte ich (wenn ich für jeden Nutzer extra Tabellen anlegen würde) auch immer die gleichen Namen nehmen und dann die User-Tabellen einfach mit der UserID (im Beispiel '1' und '2') prä- oder suffixen.
Also Anstatt:
SystemDB
UserInfo
- Id: "1", Name: "Karl", Password: "hashash", UserDb: "UserDB1"
- Id: "2", Name: "Peter", Password: "hsahsah", UserDb: "UserDB2"
UserDB1
References
Records
RecordFacets
UserDB2
...
hätte ich dann sowas
SystemDB
UserInfo
- Id: "1", Name: "Karl", Password: "hashash"
- Id: "2", Name: "Peter", Password: "hsahsah"
UserDB
user1_References
user1_Records
user1_RecordFacets
user2_References
user2_Records
user2_RecordFacets
...
Das wäre glaube ich sogar die bessere Lösung, da ich so immer zur gleichen DB connecten kann, die Daten immer noch strikt getrennt sind und auch ein Export kaum aufwendiger sein wird, als mit der "eine-db-pro-nutzer"-Variante. Die Präfixe kann man ja in der Session speichern und einfach bei einer Query vorne ranhängen.
Kann man auf meine Datei eigentlich zugreifen? Weil dort hatte ich auch eine UserInfo-Tabelle abgebildet, weswegen ich glaube ich etwas irritiert war. Also die Nutzerverwaltung ist ja schon eingeplant (für Online).
Danke nochmals für die Anregungen