Skip to main content
Die Datenebene einer Twenty-App umfasst die Daten, die Ihre App zu einem Workspace hinzufügt – die neuen Datensatztypen, die sie deklariert, die Spalten, die sie zu bestehenden Objekten hinzufügt, und wie diese Datensätze miteinander verknüpft sind.

In diesem Abschnitt

Objekte

defineObject – deklarieren Sie neue Datensatztypen mit eigenen Feldern.

Objekte erweitern

defineField – fügen Sie Standardobjekten oder Objekten anderer Apps Felder hinzu.

Beziehungen

Bidirektionale MANY_TO_ONE- / ONE_TO_MANY-Verbindungen zwischen Objekten.

Entitäten im Überblick

Das SDK erkennt diese zur Build-Zeit über eine AST-Analyse, sodass die Dateiorganisation Ihnen überlassen ist – die Konvention ist src/objects/, src/fields/ und src/indexes/. Stabile universalIdentifier-UUIDs verknüpfen alles über Deploys hinweg.

Indizes (optional)

Apps können Indizes gemeinsam mit ihren Objekten ausliefern, um wiederkehrende Abfragen schnell zu halten. Der häufigste Fall ist eine Status- oder Fremdschlüsselspalte, die Sie häufig lesen.
src/indexes/post-card-status.index.ts

Eindeutige Indizes

defineIndex akzeptiert isUnique: true sowohl für Einspalten- als auch Mehrspalteneindeutigkeit. Dies ist das empfohlene Primitive – defineField({ isUnique: true }) ist veraltet und wird in einer zukünftigen Version entfernt.

Andere Einschränkungen

  • Partielle WHERE-Klauseln bleiben unter Kontrolle der Administratoren – Apps können sie nicht deklarieren.
  • Jedes Objekt ist auf 10 benutzerdefinierte Indizes begrenzt (die Indizes des Frameworks selbst werden nicht mitgezählt).
Ordnen Sie das fields-Array so an, wie Postgres es verwenden soll – die ganz linke Spalte zuerst, wie in einem Telefonbuch. Indizes sind nicht kostenlos: Jeder Schreibvorgang in die Tabelle aktualisiert sie. Fügen Sie einen nur dann hinzu, wenn Sie eine Abfrage haben, die ihn benötigt.
Suchen Sie nach Application Config oder Roles & Permissions? Diese beschreiben die App selbst und nicht die Daten, die sie hinzufügt – sie befinden sich unter Config. Suchen Sie nach Connections (Linear, GitHub, Slack OAuth)? Diese existieren, um von Logikfunktionen aufgerufen zu werden, und befinden sich unter Logic.