Schema als Code
Die Kernidee
Abschnitt betitelt „Die Kernidee“In Rebase sind Ihre TypeScript-Sammlungsdefinitionen die einzige Quelle der Wahrheit. Aus einem Satz von TypeScript-Objekten generiert Rebase:
- PostgreSQL-Tabellen über die Drizzle ORM-Schemaerzeugung
- CRUD-Benutzeroberfläche — Formulare, Tabellen, Validierung, Feldtypen
- REST-API-Endpunkte mit Filterung, Sortierung und Paginierung
- Client-SDK — typsichere Datenoperationen
- RLS-Richtlinien — Zeilenebenen-Sicherheit in Postgres
Das bedeutet, Ihr Schema ist:
- Versionskontrolliert — jede Änderung ist ein Git-Commit
- Typsicher — TypeScript fängt Fehler zur Kompilierzeit ab
- Überprüfbar — Schemaänderungen durchlaufen Pull-Requests
- Portabel — dieselbe Definition funktioniert über Frontend, Backend und CLI hinweg
Visuelle Bearbeitung mit AST-Manipulation
Abschnitt betitelt „Visuelle Bearbeitung mit AST-Manipulation“Rebase bietet auch einen visuellen Sammlungseditor im Studio-Modus. Wenn ein Nicht-Entwickler den visuellen Editor verwendet, um ein Feld hinzuzufügen:
- Das Studio modifiziert die Datenbank nicht direkt
- Stattdessen verwendet es ts-morph, um Ihre TypeScript-Quelldatei als AST zu parsen
- Es fügt die neue Eigenschaftsdefinition präzise in den
properties-Block ein - Alle vorhandenen Code, Callbacks und benutzerdefinierte Logik bleiben unberührt erhalten
- Die Datei wird gespeichert, wodurch ein Hot-Reload ausgelöst wird
Dieser Ansatz „UI als Code-Generator“ bedeutet, dass visuelle Bearbeitungen dasselbe saubere TypeScript erzeugen, das ein Entwickler von Hand schreiben würde.
Schema-Generierungs-Pipeline
Abschnitt betitelt „Schema-Generierungs-Pipeline“TypeScript Collections │ ▼ rebase schema generate │ ▼ Drizzle Schema (schema.generated.ts) │ ▼ rebase db generate │ ▼ SQL Migration Files │ ▼ rebase db migrate │ ▼ PostgreSQL TablesBeispiel
Abschnitt betitelt „Beispiel“Gegeben diese Sammlung:
const productsCollection: EntityCollection = { slug: "products", table: "products", properties: { name: { type: "string", name: "Name", validation: { required: true } }, price: { type: "number", name: "Price", columnType: "numeric" }, active: { type: "boolean", name: "Active", defaultValue: true }, created_at: { type: "date", name: "Created", autoValue: "on_create" } }};Rebase generiert dieses Drizzle-Schema:
// schema.generated.tsimport { pgTable, varchar, numeric, boolean, timestamp } from "drizzle-orm/pg-core";
export const products = pgTable("products", { id: serial("id").primaryKey(), name: varchar("name").notNull(), price: numeric("price"), active: boolean("active").default(true), created_at: timestamp("created_at").defaultNow()});Das ergibt diese SQL:
CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, price NUMERIC, active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT NOW());Sicherheit und nicht gemappte Datenbankobjekte
Abschnitt betitelt „Sicherheit und nicht gemappte Datenbankobjekte“Wenn Rebase das Datenbankschema aktualisiert, ordnet es TypeScript-Sammlungsdefinitionen Datenbanktabellen zu. Um sicherzustellen, dass nicht gemappte Datenbankobjekte (z. B. Tabellen, Sichten, Enums) niemals gelöscht oder geändert werden, implementiert Rebase mehrere Sicherheitsebenen:
- Strikte Tabellenfilterung (
tablesFilter): Die generierte Drizzle-Konfiguration beschränkt die Synchronisierung dynamisch auf die im generierten Schema exportierten Tabellen. Alle nicht erkannten Tabellen oder Tabellen aus Legacy-Systemen, die in der Datenbank vorhanden sind, werden von der Synchronisierungs-Engine ignoriert. - Schema-Einschränkungen (
schemaFilter): Die DB-Synchronisierung ist ausschließlich auf daspublic-Schema beschränkt. Interne Datenbanktabellen, benutzerdefinierte Schemata und erweiterungsspezifische Tabellen bleiben unberührt. - Rollen- und Erweiterungsschutz: Drizzle ist so konfiguriert, dass es keine Datenbankrollen (
entities.roles: false) oder Hilfstabellen von Erweiterungen wie PostGIS verwaltet. - Interaktive Bestätigung im Entwicklungsmodus: Beim Ausführen von
rebase db pushin der Entwicklung wird die CLI mit den Flags--strictund--verboseausgeführt. Dies stellt sicher, dass Entwickler alle destruktiven SQL-Aktionen vor der Ausführung explizit überprüfen und genehmigen müssen.
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Sammlungen — Vollständige Referenz zur Sammlungs-Konfiguration
- Eigenschaften — Detaillierte Spaltentyp-Zuordnungen