Zum Hauptinhalt springen

Datenbankschema

Tabellen-Übersicht

Auth (Auth.js)

TabelleBeschreibungRLS
usersAuth.js User-TabelleNein
accountsOAuth-Provider-AccountsNein
sessionsAuth.js Sessions (nicht aktiv bei JWT)Nein
verification_tokensE-Mail-VerifikationNein

Foundation

TabelleBeschreibungRLS
tenantsMulti-Tenant-WurzelJa
profilesUser-Tenant-Zuordnung mit RolleJa
tenant_settings1:1 Konfiguration pro TenantJa
order_sequencesAtomare NummernvergabeJa

Produktion

TabelleBeschreibungRLS
suppliersRohkaffee-LieferantenJa
green_coffee_lotsRohkaffee-LotsJa
machinesRöstmaschinenJa
roast_profilesRöstrezepteJa
roast_log_entriesEinzelne RöstungenJa
roasted_barrelsTonnen-SessionsJa
product_variantsProdukt-Varianten (SKUs)Ja
packing_positionsAbpackpositionenJa
maintenance_tasksWartungsaufgabenJa

Commerce

TabelleBeschreibungRLS
b2b_customersGeschäftskundenJa
b2b_ordersBestellungenJa
b2b_order_positionsBestellpositionenJa
b2b_invoicesRechnungenJa
b2b_invoice_positionsRechnungspositionenJa
pricing_agreementsPreisvereinbarungenJa
forecast_positionsNachfrage-OverridesJa
subscriptionsKaffee-AbonnementsJa
fixed_costsFixkosten für GuVJa

Versand

TabelleBeschreibungRLS
shipmentsDHL-SendungenJa
shipment_labelsPDF-LabelsJa
dhl_tracking_eventsTracking-HistorieJa

Dealer-Portal

TabelleBeschreibungRLS
order_form_customersPortal-KundenJa
order_form_customer_variantsSichtbare Varianten pro KundeJa

Platform Admin (PROJ-31)

TabelleBeschreibungRLS
admin_impersonation_sessionsAdmin-ImpersonationNein
admin_audit_logsAdmin-AktionsprotokollNein

Shopify (Mirror)

TabelleBeschreibungRLS
shopify_productsProdukt-MirrorJa
shopify_product_variantsVarianten-MirrorJa
shopify_ordersBestellungs-MirrorJa
shopify_fulfillmentsFulfillment-MirrorJa
shopify_customersKunden-MirrorJa
shopify_variant_mappingRoestify ↔ Shopify ZuordnungJa

System

TabelleBeschreibungRLS
team_invitationsTeam-EinladungenJa
notificationsIn-App BenachrichtigungenJa
usage_metricsNutzungszähler pro MonatJa

Computed Fields (Views / Query-Time)

FeldBerechnungQuelle
lot_remaining_kgraw_weight_kg − SUM(roast_raw_weight_g)/1000VIEW
lot_remaining_pctremaining_kg / raw_weight_kg × 100VIEW
machine_kg_counterkg_counter_offset + SUM(roasted_weight_g)/1000VIEW
roast_loss_pct(raw − roasted) / raw × 100RPC (auto)
barrel_statusOpen/Resting/Ready/Empty LogicQuery-Time
barrel_available_gtotal_roasted_g − packed_gQuery-Time
forecast_intervalMedian(delivery intervals)Query-Time

RPC Functions (SECURITY DEFINER)

FunktionBeschreibung
get_tenant_id()Tenant-ID des aktuellen Users
next_order_number()Lückenlose Bestellnummer (B2B-YYYY-NNNN)
next_invoice_number()Lückenlose Rechnungsnummer (RE-YYYY-NNN)
create_roast_log_entry()Atomare Röstanlage (Session + Barrel + Warnings)
update_roast_log_entry()Atomares Röst-Update
soft_delete_roast_log_entry()Soft-Delete mit Restbestands-Wiederherstellung
resolve_or_create_barrel_session()Session finden oder erstellen
close_barrel_session()Session schließen (Open → Resting)
create_packing_position()Packposition mit Gewichtsberechnung
increment_usage()Atomarer Usage-Counter

Trigger

TriggerTabelleAktion
set_updated_atAlleAuto-Update von updated_at
prevent_tenant_id_changeAlleImmutable tenant_id
validate_*_fk_tenantsDiverseCross-Tenant FK-Prüfung
auto_barrel_statusroasted_barrelsStatus-Transitions

Indizes

Alle Tabellen haben mindestens:

  • PK auf id
  • Index auf tenant_id
  • Partial Index WHERE deleted_at IS NULL (für Soft-Delete-Tabellen)
  • Unique Constraint auf natürliche Schlüssel (z.B. lot_number pro Tenant)