2.5 KiB
Executable File
RoggioApp - Events, Aufgaben & Relationen
1. Die Universalität der Entitäten
Nicht nur die physische Welt (Räume, Zirkuswagen), sondern alles ist eine grundlegende Entität, die über Eigenschaften (Traits) und Verknüpfungen definiert wird.
- Personen als Entitäten: Können Rollen in Gruppen übernehmen.
- Dynamische Relationen (Verknüpfungen mit Eigenschaften): Eine Person ist nicht einfach "in" einer Gruppe. Die Verbindung selbst hat eine Eigenschaft!
- Person A ist über die Eigenschaft
is_comm_contactmit Gruppe X verbunden. - Person B ist über die Eigenschaft
is_finance_contactmit Gruppe X verbunden.
- Person A ist über die Eigenschaft
2. Buchungen und Aufgaben = "Events"
Die höchste Form der Abstraktion betrifft die Zeit und die Aktionen. Es gibt keine starren Tabellen für "Buchungen" und "Putzpläne". Beide sind im Kern Events.
Was ist ein Event?
Ein Event ist ein Knotenpunkt in der Zeit, der andere Entitäten miteinander verbindet und einen Zustand hat.
-
Beispiel A: Die Buchung (Event-Typ: Rental)
- Eigenschaften des Events: Zeitraum (14.08 - 21.08), Status (Bestätigt).
- Relation 1: Verknüpft mit Entität "Gruppe Familie Rossi" (Wer?).
- Relation 2: Verknüpft mit Entität "Haus A" + "Zirkuswagen" (Wo?).
- Relation 3: Finanzen/Rechnung (Geld).
-
Beispiel B: Das Putzen (Event-Typ: Task/Maintenance)
- Eigenschaften des Events: Fälligkeitsfenster (21.08 10:00 - 15:00), Status (Offen).
- Relation 1: Verknüpft mit Entität "Haus A" (Was muss geputzt werden?).
- Relation 2: Verknüpft mit Entität "Kollektiv-Mitglied Sarah" (Wer putzt?).
- Spezial-Relation (Event -> Event): Getriggert durch / Abhängig von "Event A (Buchung Ende)".
Claras architektonische Ableitung
Das gesamte System besteht eigentlich nur aus drei riesigen Säulen:
- Nodes (Entitäten): Die Bausteine der Welt (Personen, Einheiten, etc.).
- Edges (Relationen/Traits): Wie die Nodes verbunden sind und was sie können.
- Events (Zeitliche Knoten): Das Klebeband, das Nodes auf einer Zeitachse zusammenführt (Buchungen, Aufgaben, Wartung).
Herausforderung für die Datenbank: So etwas baut man idealerweise mit einer Graphendatenbank (wie Neo4j) oder in PostgreSQL mit JSONB-Feldern für die Traits und extrem klugen Pivot-Tabellen (Edge-Tables) für die Beziehungen, damit man nicht den Verstand beim Queries-Schreiben verliert. Wir müssen einen Weg finden, das in Prisma sauber und typsicher zu modellieren, ohne die Performance zu töten.