Hallo,
ich habe ein Problem, für das ich einfach keine Lösung finde.
Ich habe folgene Ausgangslage:
Ich habe einen Chef, dem mindestens eine Firmen unterstellt ist. Diese Firmen haben jeweils mindestens eine Filiale. Nun habe ich Arbeiter, die für den Chef, die Firma und/oder für eine Filiale arbeiten. Sie führen für die besagten Objekte/den Chef Tätigkeiten aus, die sich von Objekt zu Objekt unterscheiden können. Ich habe das mal in einer Grafik dargestellt.
Das besondere ist, dass wenn ein Arbeiter dem Chef mit einer bestimmten Tätigkeit zugewiesen ist, er auch implizit in allen Firmen und Filialen die besagte Tätigkeit ausübt. Falls er mit einer bestimmten Tätigkeit einer Firma zugewiesen ist, er die Tätigkeit ebenfalls in allen Filialen der Firma ausübt. Im Falle von Arbeiter 1 bedeutet dies, dass er in allen Filialen (Filiale 1 - 6) die Tätigkeit 3 (die Tätigkeiten stehen im Kreis) ausübt, in allen Filialen der Firma 3 (Filiale 4 - 6) die Tätigkeit 1 ausübt, in Filiale 1 die Tätigkeit 1 ausübt und in Filiale 3 die Tätigkeit 2 ausübt.
Es interessieren nur die Filialen. Die Firmen und der Chef sind als abstrakte Objekte anzusehen, in denen man nicht arbeiten kann.
Als Resultat hätte ich gerne (arbeiterpezifisch) etwas wie:
Für Arbeiter 1
Filiale Tätigkeit
1 1
1 3
2 3
3 2
3 3
4 1
4 3
5 1
5 3
6 1
6 3
Mein Problem ist, wie ich das vernünftig in der Datenbank abbilden kann ohne allzu komplizierte Abfragen zu erhalten. Mein bisheriger Ansatz war von der Form:
Der Chef, die Firmen und die Filialen hängen wie folgt zusammen
Ich bin jetzt die ..._hat_arbeiter_in_taetigkeit-Tabellen von oben nach unten durchgegangen und habe nach dem arbeiter gesucht. Anschließend die nächste ge-JOINt und geprüft, ob der Eintrag NULL war, so konnte ich davon ausgehen, dass er nur in der 'höheren' Tabelle vorkommt. Als letztes habe ich mir dann sämtliche Filialen geholt. Mit dieser Herangehensweise benötige ich nur sehr viele JOINs und UNIONs und krieg eine sehr unübersichtliche Query, die ich nichit einmal auf Richtigkeit prüfen kann.
Hat jemand eine Idee, wie ich das Umsetzen kann? Ich möchte eine möglichst einfache und übersichtliche Struktur und Abfrage erhalten, also das komplette Gegenteil vom bisherigen Stand.
Viele Grüße
Michael
ich habe ein Problem, für das ich einfach keine Lösung finde.
Ich habe folgene Ausgangslage:
Ich habe einen Chef, dem mindestens eine Firmen unterstellt ist. Diese Firmen haben jeweils mindestens eine Filiale. Nun habe ich Arbeiter, die für den Chef, die Firma und/oder für eine Filiale arbeiten. Sie führen für die besagten Objekte/den Chef Tätigkeiten aus, die sich von Objekt zu Objekt unterscheiden können. Ich habe das mal in einer Grafik dargestellt.
Das besondere ist, dass wenn ein Arbeiter dem Chef mit einer bestimmten Tätigkeit zugewiesen ist, er auch implizit in allen Firmen und Filialen die besagte Tätigkeit ausübt. Falls er mit einer bestimmten Tätigkeit einer Firma zugewiesen ist, er die Tätigkeit ebenfalls in allen Filialen der Firma ausübt. Im Falle von Arbeiter 1 bedeutet dies, dass er in allen Filialen (Filiale 1 - 6) die Tätigkeit 3 (die Tätigkeiten stehen im Kreis) ausübt, in allen Filialen der Firma 3 (Filiale 4 - 6) die Tätigkeit 1 ausübt, in Filiale 1 die Tätigkeit 1 ausübt und in Filiale 3 die Tätigkeit 2 ausübt.
Es interessieren nur die Filialen. Die Firmen und der Chef sind als abstrakte Objekte anzusehen, in denen man nicht arbeiten kann.
Als Resultat hätte ich gerne (arbeiterpezifisch) etwas wie:
Für Arbeiter 1
Filiale Tätigkeit
1 1
1 3
2 3
3 2
3 3
4 1
4 3
5 1
5 3
6 1
6 3
Mein Problem ist, wie ich das vernünftig in der Datenbank abbilden kann ohne allzu komplizierte Abfragen zu erhalten. Mein bisheriger Ansatz war von der Form:
Code:
chef_hat_arbeiter_mit_taetigkeit
chef_id | arbeiter_id | taetigkeit_id
firma_hat_arbeiter_mit_taetigkeit
firma_id | arbeiter_id | taetigkeit_id
filiale_hat_arbeiter_mit_taetigkeit
filiale_id | arbeiter_id | taetigkeit_id
Der Chef, die Firmen und die Filialen hängen wie folgt zusammen
Code:
chef
id | name
firma
id | chef_id | name
filiale
id | firma_id | name
Ich bin jetzt die ..._hat_arbeiter_in_taetigkeit-Tabellen von oben nach unten durchgegangen und habe nach dem arbeiter gesucht. Anschließend die nächste ge-JOINt und geprüft, ob der Eintrag NULL war, so konnte ich davon ausgehen, dass er nur in der 'höheren' Tabelle vorkommt. Als letztes habe ich mir dann sämtliche Filialen geholt. Mit dieser Herangehensweise benötige ich nur sehr viele JOINs und UNIONs und krieg eine sehr unübersichtliche Query, die ich nichit einmal auf Richtigkeit prüfen kann.
Hat jemand eine Idee, wie ich das Umsetzen kann? Ich möchte eine möglichst einfache und übersichtliche Struktur und Abfrage erhalten, also das komplette Gegenteil vom bisherigen Stand.
Viele Grüße
Michael