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)