Files
RoggioApp/Brainstorm/260426/14_Units_und_Hierarchie_Beispiel.md
2026-04-26 19:42:42 +02:00

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 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):

    {
      "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.