Skip to main content
Docs

9. Datenbank-Modell

PostgreSQL via Drizzle-ORM. Schema in packages/db/src/schema/index.ts.

9.1 Relationen (Foreign Keys)#

ParentChildCardinalityOn Delete
usersprojects1 : Nset null (ownerId)
projectspages1 : Ncascade (projectId)
pagespageTranslations1 : Ncascade (pageId)
projectsdeployments1 : Ncascade (projectId)
projectsmediaAssets1 : Ncascade (projectId)
pagespages1 : N (self)set null (parentId)
llmCachestandalonekeyed on mdHash

9.2 Tabellen im Detail#

users — Accounts

  • id (uuid), email (unique), passwordHash, displayName, createdAt, updatedAt

projects — Sites/Projekte

  • id, ownerId → users
  • name, slug
  • designPack (string, default minimal)
  • languages (csv string, z.B. "de,en,fr")
  • defaultLanguage
  • projectType (landing | product | conference | docs | wiki | portfolio | courses | blog | blank)
  • docsConfig (jsonb — logo, topNavLinks, githubRepo)
  • componentVariants (jsonb — Layout-Primitive-Defaults)
  • Cloudflare-Felder: cfProjectName, customDomain, domainStatus, zoneTag, liveUrl, lastDeployedAt

pages — Markdown-Seiten

  • id, projectId → projects
  • title, slug (unique pro Projekt)
  • sortOrder, isHomePage, parentId (self-ref für Hierarchie), showInNav
  • mdContent (text)
  • mdHash (sha256 für Cache-Invalidation)
  • generatedJson (ComponentMapping)
  • componentVariants (jsonb — Page-Level Content-Primitive-Overrides)

pageTranslations — Übersetzte Inhalte

  • id, pageId → pages, language
  • mdContent, mdHash, generatedJson
  • translatedAt, isManuallyEdited

llmCache — Mapping-Cache

  • mdHash (unique key)
  • mappingJson
  • Wenn ein User ein bereits gemappte MD-Section nochmal generiert → Cache-Hit, kein LLM-Call

mediaAssets — Hochgeladene Files

  • id, projectId → projects
  • filename, storagePath, mimeType, sizeBytes, width, height, alt
  • status (pending | active) — pending = upload begonnen aber nicht bestätigt; cleanup nach 1h

deployments — Cloudflare-Deploy-Records

  • id, projectId → projects
  • cfDeploymentId — Cloudflare-Pages-ID
  • status (queued | building | success | failure | canceled)
  • url, completedAt, errorMessage
  • createdByUserId, filesUploaded, filesCached