# 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 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 13:** Schlafzimmer 3 (Parent: Unit 3) * **Unit 14:** Einzelbett (Parent: Unit 13, `capacity: 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):** ```json { "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):** ```json { "type": "room", "room_category": "bedroom", "area_sqm": 18.5, "features": ["Meerblick", "Verdunkelungsrollos"] } ``` * **Bei Unit 9 (Doppelbett):** ```json { "type": "inventory", "inventory_category": "bed_double", "sleep_capacity": 2, "width_cm": 180 } ``` * **Bei Unit 5 (Bad):** ```json { "type": "room", "room_category": "bathroom", "area_sqm": 8.0, "features": ["Dusche", "Badewanne", "Bidet", "Fenster"] } ``` * **Bei Unit 4 (Küche):** ```json { "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.