2.9 KiB
Executable File
RoggioApp - Units & Hierarchie (Beispiel: Wohnung im 1. Stock)
1. Die Hierarchie (Der Tree)
Die Macht unseres Node-Graphen zeigt sich in der Hierarchie. Wir legen nicht eine fette Zeile in einer Tabelle "Wohnung" an, sondern stapeln Units ineinander (parentId).
Beispiel-Baum:
- Unit 1: Haus A (Parent: Null)
- Unit 2: 1. Stock (Parent: Unit 1)
- Unit 3: Wohnung Sonnenaufgang (Parent: Unit 2,
is_rentable: true)- Unit 4: Küche (Parent: Unit 3)
- Unit 5: Bad (Parent: Unit 3)
- Unit 6: Wohnzimmer (Parent: Unit 3)
- Unit 7: Terrasse (Parent: Unit 3)
- Unit 8: Schlafzimmer 1 (Parent: Unit 3)
- Unit 9: Doppelbett (Parent: Unit 8,
capacity: 2)
- Unit 9: Doppelbett (Parent: Unit 8,
- Unit 10: Schlafzimmer 2 (Parent: Unit 3)
- Unit 11: Einzelbett A (Parent: Unit 10,
capacity: 1) - Unit 12: Einzelbett B (Parent: Unit 10,
capacity: 1)
- Unit 11: Einzelbett A (Parent: Unit 10,
- Unit 13: Schlafzimmer 3 (Parent: Unit 3)
- Unit 14: Einzelbett (Parent: Unit 13,
capacity: 1)
- Unit 14: Einzelbett (Parent: Unit 13,
- Unit 3: Wohnung Sonnenaufgang (Parent: Unit 2,
- Unit 2: 1. Stock (Parent: Unit 1)
2. Die Eigenschaften (Traits im JSONB)
Wie unterscheiden wir nun ein Schlafzimmer von einem Bad, ohne für jedes eine eigene Datenbanktabelle zu bauen? Über das JSONB-Feld traits.
Beispiele für das traits-Feld (JSON):
-
Bei Unit 3 (Wohnung Sonnenaufgang):
{ "type": "apartment", "is_rentable": true, "base_price": 85.00, "cleaning_fee": 40.00 }(Hinweis: Fläche und Kapazität stehen hier absichtlich NICHT drin. Sie werden später live aus den Kindern berechnet!)
-
Bei Unit 8 (Schlafzimmer 1):
{ "type": "room", "room_category": "bedroom", "area_sqm": 18.5, "features": ["Meerblick", "Verdunkelungsrollos"] } -
Bei Unit 9 (Doppelbett):
{ "type": "inventory", "inventory_category": "bed_double", "sleep_capacity": 2, "width_cm": 180 } -
Bei Unit 5 (Bad):
{ "type": "room", "room_category": "bathroom", "area_sqm": 8.0, "features": ["Dusche", "Badewanne", "Bidet", "Fenster"] } -
Bei Unit 4 (Küche):
{ "type": "room", "room_category": "kitchen", "area_sqm": 12.0, "inventory": ["Kühlschrank", "Herd", "Kaffeemaschine", "Töpfe"] }
3. Claras Fazit zur Flexibilität
Wir müssen in Postgres nur EINE einzige Tabelle Unit abfragen, um das gesamte Gebäude zu kennen.
Wenn jemand wissen will: "Wie groß ist die Wohnung und wie viele Leute können dort schlafen?"
Dann fragt unser Backend: "Summiere alle area_sqm von allen Units, deren direkter oder indirekter Parent die 'Wohnung Sonnenaufgang' ist. Und summiere alle sleep_capacity der Kinder."
Ergebnis: Fläche = 38.5qm, Schlafplätze = 5.