Lompati ke konten utama
Modul 8 · Pelajaran 3 dari 431/57 dalam kursus~12 min
Pelajaran modul (3/4)

Membuat tabel dan batasan: DDL

Sejauh ini Anda telah mengerjakan tabel yang sudah ada (customers, orders…). DDL ("Bahasa Definisi Data") mengacu pada pernyataan itu membuat dan memodifikasi skema itu sendiri: tabel, kolom, batasan, indeks.

BUAT TABEL: sintaksis

SQL
CREATE TABLE nome_tabella (
  colonna  TIPO  [vincoli_colonna],
  …,
  [vincoli_tabella]
);

Contoh: daftar keinginan yang menghubungkan pelanggan dan produk:

SQL
CREATE TABLE wishlists (
  id           SERIAL PRIMARY KEY,
  customer_id  INTEGER NOT NULL REFERENCES customers(id),
  product_id   INTEGER NOT NULL REFERENCES products(id),
  added_on     DATE NOT NULL DEFAULT CURRENT_DATE,
  note         TEXT,
  UNIQUE (customer_id, product_id)
);

Mari kita uraikan sepotong demi sepotong.

Jenis yang paling umum

KetikApa yang dimilikinya
INTEGER / INTBilangan bulat (-2.1B … +2.1B)
BIGINTBilangan bulat besar
NUMERIC(p, s)Desimal tepat — uang, persentase
TEXTString dengan panjang variabel
VARCHAR(n)String dengan panjang maksimal n
BOOLEANTRUE / FALSE / NULL
DATEHanya tanggal
TIMESTAMPTanggal + waktu (tanpa zona waktu)
TIMESTAMPTZTanggal + waktu dengan zona waktu
SERIALINTEGER dengan urutan penambahan otomatis

Kendala

Batasan adalah aturan yang diterapkan PostgreSQL secara otomatis: jika an INSERT/UPDATE melanggarnya, operasi gagal.

SQL
PRIMARY KEY                         -- identifica univocamente la riga, non NULL
NOT NULL                            -- vieta NULL
UNIQUE                              -- vieta duplicati su questa colonna
REFERENCES tabella(colonna)         -- foreign key
CHECK (espressione_booleana)        -- es. CHECK (price > 0)
DEFAULT espressione                 -- valore di default se non fornito

Batasan dapat dideklarasikan sebaris pada kolom atau sebagai tingkat tabel batasan (di bawah kolom). Contoh gabungan UNIQUE:

SQL
UNIQUE (customer_id, product_id)   -- niente coppia (cliente, prodotto) duplicata

PERIKSA batasan

CHECK menerapkan aturan khusus:

SQL
CREATE TABLE stock_alerts (
  product_id   INTEGER PRIMARY KEY REFERENCES products(id),
  threshold    INTEGER NOT NULL CHECK (threshold >= 0),
  notify_email TEXT    NOT NULL,
  active       BOOLEAN NOT NULL DEFAULT true
);

threshold harus ≥ 0; jika seseorang mencoba INSERT … threshold = -5, itu gagal dengan kesalahan kendala.

Menjatuhkan dan mengubah

SQL
DROP TABLE wishlists;                                 -- elimina la tabella (e i dati!)
DROP TABLE IF EXISTS wishlists;                       -- senza errore se non esiste
ALTER TABLE customers ADD COLUMN newsletter BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE customers DROP COLUMN newsletter;

Giliranmu

Latihan#sql.m8.l3.e1
Upaya: 0Memuat…

Buat tabel wishlist dengan kolom berikut: id (SERIAL PRIMARY KEY), customer_id (INTEGER NOT NULL REFERENCES pelanggan(id)), product_id (INTEGER NOT NULL REFERENCES produk(id)),added_on (DATE NOT NULL dengan DEFAULT CURRENT_DATE). Tambahkan batasan UNIK pada pasangan (id_pelanggan, id_produk).

Memuat editor…
Tunjukkan petunjuk

UNIK (id_pelanggan, id_produk) sebagai batasan tingkat tabel di bagian bawah.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#sql.m8.l3.e2
Upaya: 0Memuat…

Tambahkan ke tabel pelanggan kolom buletin bertipe BOOLEAN, BUKAN NULL, dengan DEFAULT false. Gunakan pernyataan ALTER TABLE tunggal.

Memuat editor…
Tunjukkan petunjuk

Tanpa DEFAULT, ALTER akan gagal karena baris sudah ada dan kolom baru BUKAN NULL.

Solusi tersedia setelah 3 upaya