Hallo Frank,
hat ein wenig gedauert, aber ich lasse das natürlich nicht auf mir sitzen
ich habe deine Lösung getestet und dazu noch meine aufgebaut.
Es ist bei 147k Datensätzen ein Unterschied von 6/100Sek
festzustellen.
Die Composite-Index-Lösung ist schneller.
Das noch als objectiv schneller zu bezeichnen müsste Dir aber schon auch selbst schwer fallen, oder?
Dein Problem mit dem Gleichartikeit(1) von Objekten ist
Definitionssache
wenn ich definiere, das dass Wohnobjekt in einer Tabelle
gespeichert wird ist das eben so(In einem
Warenwirtschaftssystem würdest du doch auch Häuser und
Kühlschränke im Artikelstamm aufnehmen, wenn diese verkauft
werden, wo ist da die Gleichheit? Oder legst du für jede
Artikelgruppe eine neue Tabelle an?).
Nein, ich lege natürlich nicht für jede Artikelgruppe eine eigene Tabelle an. Dass allerdings Häuser und Viertel das Gleiche sind hast Du definiert, nicht der OP. Ohne also mehr über das eigentliche Datenmodell zu wissen tun wir uns da schwer.
Spätestens wenn die zwei Tabellen so aussehen finde ich Deinen Ansatz wirklich uneingeschränkt falsch:
GEBAEUDE
id
adresse1
adresse2
viertel\_id
VIERTEL
id
bezeichnung
plz
Das einzige, was in Deiner Mischtabelle dann immer gefüllt wäre ist der Primary Key - ein mehr als deutlicher Hinweis, dass da was schief läuft. Der sähe dann ja so aus:
GEBAEUDE\_VIERTEL
typ
id
adresse1
adresse2
viertel\_id
bezeichnung
plz
Wie Du da verhinderst, dass jemand ein Viertel löscht an dem noch Gebäude hängen (oder ein Gebäude einfügt, das auf ein nicht existentes Viertel verweist) wäre übrigens auch interessant.
Bleibt nur noch Punkt 3, ich könnte dein System auch nicht
intuitiv bedienen.
Na schön. Uns fehlt noch die Tabelle, die sich auf Gebäude/Viertel bezieht. So sähe die bei mir aus:
PERSON
id
vorname
nachname
viertel\_id
gebaeude\_id
und bei Dir
PERSON
id
vorname
nachname
gebviertel\_id
fk\_typ
Wenn Du mir mit diesen Informationen für dein Modell den SELECT hinschreiben kannst, der alle Personen im Gebäude 4711 zurückliefert, dann bist Du ziemlich gut. Ich könnte es nicht. In meinem Modell ist das eher trivial, finde ich zumindest.
Wie kann ich mir die Applikation
vorstellen, die mit dem Datenmodell arbeitet, wie sieht die
Erfassungsmaske aus und wie viel Programmierlogik steck da
drin(kannst du mit APEX eine Enduser-Anwendung generieren oder
muß du da noch Programmieraufwand reingestecken?
Also ich schätze mal grob: Bei mir leichter als bei Dir.
Gruß
Martin