@northware/database
Wie die Neon Database von Northware genutzt und mit Drizzle ORM verwaltet werden kann
Innerhalb von @northware/database wird die Verbindung zu den Neon Databases hergestellt. Außerdem sind hier die Drizzle Schema-Dateien der Datenbank gespeichert.
Verbindung zur Datenbank herstellen
Das Package exportiert die Variable db unter der Adresse @northware/database/connection womit die Verbindung zur Datenbank hergestellt werden kann.
Drizzle Administration
Innerhalb des Packages werden auch allen Dateien gespeichert, die mit Drizzle das Schema der Datenbank definieren.
Alle Schema-Definitionen werden in dem Ordner /schema gespeichert. Das gesamte Database-Schema wird auf mehrere Dateien verteilt,
um eine möglichst hohe Übersichtlichkeit zu erreichen.
Damit wird diesem Ansatz gefolgt.
Das Schma soll folgendermaßen aufgeteilt werden:
- Jede größere Datenbanktabelle erhält eine eigene Schema-Datei
- Schema-Dateien können Schemata für mehrere Tabellen enthalten, wenn sie gemeinsam für ein Feature benötigt werden (Das Schema der Haupttabelle wird in der gleichen Datei definiert wie kleinere Tabellen, die Relationen zur Haupttabelle haben).
Das Drizzle Kit wird verwendet, um das Datenbank-Schema der Neon Database mit den Schema-Definitionen in der Codebase abzustimmen.
Der Workflow mit Drizzle Kit und die Verbindung zur Datenbank in diesem Workflow wird in der drizzle.config.ts konfiguriert.
Hier ist definiert, dass alle Schema-Dateien im ./schema Ordner abgelegt sind. Außerdem ist hier definiert, dass die von Drizzle generierten Migrations-Dateien im
Ordner ./drizzle-migrations abgelegt werden sollen.
Die drizzle.config.ts greift auf die Environment-Variable DATABASE_URL zu. Diese Variable muss innerhalb einer ./.env.local im @northware/database Package oder in einem anderen Environment-Kontext
definiert werden und die Verbindungs-URL zur Datenbank enthalten.
Drizzle Kit
Die Drizzle Migrationen werden mit der Console mithilfe von drizzle-kit durchgeführt und können nicht alle über das Package-Root ausgeführt werden.
Im Package-Root wurden zwei häufige Commands hinterlegt und können von dort ausgeführt werden.
drizzle-generatenavigiert in den Ordner./packages/databaseund führt dortdrizzle-kit generateaus.drizzle-migratenavigiert in den Ordner./packages/databaseund führt dortdrizzle-kit migrateaus.
Es gibt weitere drizzle-kit Commands zur Kommunikation zwischen Codebase und Database, die nur unter ./packages/database ausgeführt werden können.
drizzle-kit generate: Generiert eine.sqlDatei, die das Datenbank-Schema als SQL-Code enthält.drizzle-kit migrate: Migriert das SQL-Schema, das mitdrizzle-kit generateerstellt wurde in die Datenbank.drizzle-kit pull: Lädt das aktuelle Schema der Datenbank alsschema.tsDatei in dendrizzle-migrationsOrdner. So kann sichergestellt werden, dass Datenbank und Codebase das selbe Schema enthalten. Dadurch, dass das Schema automatisch erstellt wird, wird das Schema ggf. nochmal verbessert definiert. Dieschema.tsenthält alle Tabellen und sollte in eine Javascript-Datei umgewandelt werden, bevor sie in den/schemaOrdner aufgenommen wird. Mit einigen Konfigurationen kann beeinflusst werden, welcher Output mitdrizzle-kit pullerstellt wird.drizzle-kit push: Kombiniertdrizzle-kit generateunddrizzle-kit migrateohne SQL-Dateien zu generieren. Dieser Command kann verwendet werden, wenn ein Schema Update mal schnell gehen muss.drizzle-kit studio: Startet Drizzle Studio lokal unter local.drizzle.studio. Drizzle Studio ist der Database Browser von Drizzle.drizzle-kit check: Überprüft die Konsistenz (Einheitlichkeit) der generierten SQL Migrationendrizzle-kit up: Upgrade des Drizzle Schema, wenn es eine neue Version von Drizzle gibt