Hi all, ich bin ein Postgresql-Neuling und möchte für ein OpenSource-Programm, das ich entwickle, Postgresql einsetzen (nachdem mir MySQL mittlerweile tierisch auf den Keks geht, seitdem ich mich mal intensiver mit SQL beschäftige).
Das Ganze wird ein Geocaching-Programm sein (damit User die gefundenen Caches, Photos dazu, etc. verwalten). Für einen einzigen User ist natürlich ein Datenbankserver Overkill, im “Single-User-Modus” wird das Programm (in Java) Derby verwenden, reicht ja völlig aus.
Ich möchte jedoch auch einen Modus machen, wo verschiedene User ihre Daten gemeinsam in einer Datenbank (hier: Postgresql) verwalten; daraus lassen sich dann auch wunderbar mit PHP , JSP/Servlets oder was auch immer Webseiten/Geoblogs erzeugen (nach dem Motto: “Ich habe den und den Cache dann und dann gefunden…”).
Damit sich die Leute nicht ins Gehege kommen, müssen nicht einzelne Tabellen an sich per User geschützt werden, sondern die Datensätze in den Tabellen selbst. Die Frage ist: wie mache ich das am besten? Meine Idee wäre den Datensätzen ein ownerOID zuzuordnen (und den Zugriff auf die Tabellen nur per views zuzulassen), ich habe aber keine Funktion gefunden, die die OID des current_users der aktuellen Verbindung zurückgibt. Den current_user als varchar() in der Tabelle zu speichern, halte ich für Platzverschwendung. Abgesehen davon scheint mir die OID eher intern zu sein.
Alternativ dachte ich mir eine Hilfstabelle einzurichten: userID als serial, username (der identisch mit current_user ist), und ownerID auf den Tabellen als Foreign Key auf die userID. Hat auch den Vorteil, dass bei Löschen des Users automatisch alle Datensätze, die dem User gehören, gelöscht werden (bei on delete cascade).
Gibt es einen anderen, eleganteren Weg?
Danke + Gruß,
Mark