Hallo!
Ich komme aus der Oracle-Welt, arbeite aber jetzt in einem Projekt (oder eigentlich in mehreren Projekten… siehe weiter unten) mit Postgres. Dieses Projekt wird langsam immer grösser und ich wollte einfach schon mal hier nachfragen, wie ich die Datenbank am besten strukturiere.
Die Situation ist folgende: wir wollen mehrere alte Systeme nun an einer Stelle zusammenfassen, teils auch mit neuer Funktionalität. Allen Projekten gemeinsam ist das “Containersystem” welches eigentlich nur besagt, dass wir 3 Ebenen haben, die untereinander via ETL verbunden sind: Staging-DB, Produktions-DB und Liefer-DB - erstere als erster Anlaufplatz der Daten (raw data), die 2. mit den gewaschenen, als korrekt angesehenen Daten und die 3. mit gerade den Informationen, die für verschiedene Verwendungen benötigt werden. Also ungefähr so:
Staging —ETL—> Produktion —ETL—> Lieferung
So weit, so gut. Aber wir haben nun mal mehrere Projekte parallel und teils müssen die auch auf gemeinsame Daten (z.B. Kundenregister) zugreifen können, was die Sache leider etwas verkompliziert - und skalierbar soll alles natürlich auch noch sein. Zudem bin ich kein DBA sondern eher DB-Entwickler (früher PL/SQL Transaktions-DB, mittlerweile mehr ETL/Data Warehousing). Deshalb will ich nun, bevor wir uns hier unwiederruflich verrannt haben, kurz fragen ob meine Ideen in Ordnung oder total daneben sind.
Bisher dachte ich also daran, dass jedes Projekt eine neue Datenbank bekommt. In jeder Datenbank dann 3 Schemata (Staging, Produktion, Lieferung) und 3 oder 4 User (einer pro Schema plus einer pro DB). Jetzt ist mir aber aufgefallen, dass User wohl über den gesamten Server existieren, was diese Aufteilung wieder in Frage stellt… (sonst habe ich am Ende dutzende User und keinen Überblick)
Also etwa so:
Staging(Proj. 1) —ETL—> Produktion(Proj. 1) —ETL—> Lieferung(Proj. 1)
Staging(Proj. 2) —ETL—> Produktion(Proj. 2) —ETL—> Lieferung(Proj. 2)
Staging(Proj. 3) —ETL—> Produktion(Proj. 3) —ETL—> Lieferung(Proj. 3)
Meine Frage also: wie kann man das Ganze ordentlich strukturieren? Ich weiss, dass das ne sehr allgemeine Frage ist und ich will natürlich nicht, dass hier einer meine Arbeit macht. Nurr paar Tips oder Denkanstösse wären schon super. Braucht es eine DB pro Projekt oder ist das sinnlos? Reicht nicht ein User pro DB (und damit dann evtl. pro Projekt)? Wie leicht ist es später, auf Daten in einer anderen DB zuzugreifen (also besagte allgemein nötigen Daten)? Hier weiss ich von Oracle, dass es nicht sonderlich schwer, aber performance-mässig totaler Mist ist. Wie leicht ist es, das Ganze dann später evtl. auf mehreren Servern zu verteilen?
Bin wirklich für jede Idee, jeden Tip dankbar!
Beste Grüsse,
Daniel