Lektionen des Moduls (1/4)
Fortgeschrittene Datentypen und ENUMs
In der vorherigen Lektion haben wir den grundlegenden CREATE TABLE-Befehl gesehen. Lassen Sie uns nun einige erweiterte Datentypen erkunden, die PostgreSQL bietet, um unsere Domänen präziser und sicherer zu modellieren.
Numerische und Texttypen
PostgreSQL verfügt über mehrere Typen für Zahlen und Text. Die richtige Auswahl hilft sowohl bei der Validierung als auch beim Speicherplatz.
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXTvs.VARCHAR(n): In Postgres ist die Leistung identisch. Sie verwendenVARCHAR(n)nur, wenn Sie die eingefügte Länge auf Datenbankebene explizit begrenzen möchten.NUMERIC(10, 2): Perfekt für Geld oder arithmetische Präzision. Hier sind höchstens 8 Ganzzahlen und 2 Dezimalstellen (insgesamt 10) zulässig. Wenn Sie10.555einfügen, rundet Postgres es auf10.56.
Der UUID-Typ
Für sichere Identifikatoren, die im Web offengelegt werden (z. B. öffentliche IDs in URLs), wird UUID häufig dem klassischen SERIAL-Inkrement vorgezogen.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (Aufzählungen)
Oftmals darf eine Spalte nur einen von wenigen vordefinierten Werten enthalten (z. B. Bestellstatus: „neu“, „bezahlt“, „versendet“). Ein Ansatz besteht darin, das Schlüsselwort CHECK zu verwenden, PostgreSQL bietet jedoch benutzerdefinierte ENUM-Typen.
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);Dadurch wird gewährleistet, dass niemand jemals einen ungültigen Status einfügen kann, was die Datenkonsistenz gewährleistet.
Probieren Sie es aus
Erstellen Sie eine „user_reviews“-Tabelle mit: ID (SERIAL pk), test_id (UUID mit Standard gen_random_uuid()), Punktzahl (Ganzzahl nicht Null) und Inhalt (TEXT). Keines der anderen Felder benötigt über den Typ hinausgehende explizite Einschränkungen.
Hinweis anzeigen
Schreiben Sie CREATE TABLE user_reviews (...) und dann die verschiedenen Felder. Denken Sie an die Kommas.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Erstellen Sie zunächst den ENUM-Typ „user_role“ mit den Werten „admin“ und „user“. Erstellen Sie dann die Tabelle „enum_users“ mit der ID (SERIAL pk) und der Rolle (der Typ, den Sie gerade erstellt haben, NICHT NULL).
Hinweis anzeigen
Vergessen Sie nicht das ; um die beiden Anweisungen (CREATE TYPE und CREATE TABLE) zu trennen.
Lösung nach 3 Versuchen verfügbar