Lompati ke konten utama
Modul 9 · Pelajaran 1 dari 433/57 dalam kursus~10 min
Pelajaran modul (1/4)

Tipe data tingkat lanjut dan ENUM

Pada pelajaran sebelumnya kita melihat perintah dasar CREATE TABLE. Sekarang mari kita jelajahi beberapa tipe data tingkat lanjut yang ditawarkan PostgreSQL untuk memodelkan domain kita dengan cara yang lebih tepat dan aman.

Tipe numerik dan teks

PostgreSQL memiliki beberapa tipe untuk angka dan teks. Memilih yang tepat membantu validasi dan ruang penyimpanan.

SQL
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
);
  • TEXT vs VARCHAR(n): Di Postgres, kinerjanya identik. Anda menggunakan VARCHAR(n) hanya ketika Anda ingin membatasi secara eksplisit panjang yang disisipkan di tingkat database.
  • NUMERIC(10, 2): Sempurna untuk uang atau presisi aritmatika. Di sini diperbolehkan paling banyak 8 digit bilangan bulat dan 2 desimal (total 10). Jika Anda memasukkan 10.555, Postgres membulatkannya menjadi 10.56.

Tipe UUID

Untuk pengidentifikasi aman yang terekspos di web (seperti ID publik di URL), UUID sering kali lebih disukai daripada penambahan SERIAL klasik.

SQL
CREATE TABLE public_orders (
  id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  customer    TEXT NOT NULL,
  total       NUMERIC(10, 2)
);

ENUM (Enumerasi)

Seringkali kolom harus berisi hanya satu dari beberapa nilai yang telah ditentukan (misalnya status pesanan: "baru", "dibayar", "dikirim"). Salah satu pendekatannya adalah dengan menggunakan kata kunci CHECK, tetapi PostgreSQL menawarkan jenis ENUM khusus.

SQL
-- 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'
);

Hal ini menjamin bahwa tidak seorang pun dapat memasukkan status yang tidak valid, sehingga melindungi konsistensi data.

Cobalah

Latihan#sql.m9.l1.e1
Upaya: 0Memuat…

Buat tabel 'user_reviews' dengan: id (SERIAL pk), test_id (UUID dengan gen_random_uuid() default), score (integer bukan null), dan content (TEXT). Tidak ada bidang lain yang memerlukan batasan eksplisit di luar tipenya.

Memuat editor…
Tunjukkan petunjuk

Tulis CREATE TABLE user_reviews (...) dan kemudian berbagai bidang. Ingat koma.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#sql.m9.l1.e2
Upaya: 0Memuat…

Pertama buat tipe ENUM 'user_role' dengan nilai 'admin' dan 'user'. Kemudian buat tabel 'enum_users' dengan id (SERIAL pk) dan role (tipe yang baru saja Anda buat, BUKAN NULL).

Memuat editor…
Tunjukkan petunjuk

Jangan lupa; untuk memisahkan dua pernyataan (CREATE TYPE dan CREATE TABLE).

Solusi tersedia setelah 3 upaya