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
CREATE TABLE nome_tabella (
colonna TIPO [vincoli_colonna],
…,
[vincoli_tabella]
);Contoh: daftar keinginan yang menghubungkan pelanggan dan produk:
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
| Ketik | Apa yang dimilikinya |
|---|---|
INTEGER / INT | Bilangan bulat (-2.1B … +2.1B) |
BIGINT | Bilangan bulat besar |
NUMERIC(p, s) | Desimal tepat — uang, persentase |
TEXT | String dengan panjang variabel |
VARCHAR(n) | String dengan panjang maksimal n |
BOOLEAN | TRUE / FALSE / NULL |
DATE | Hanya tanggal |
TIMESTAMP | Tanggal + waktu (tanpa zona waktu) |
TIMESTAMPTZ | Tanggal + waktu dengan zona waktu |
SERIAL | INTEGER dengan urutan penambahan otomatis |
Kendala
Batasan adalah aturan yang diterapkan PostgreSQL secara otomatis: jika an
INSERT/UPDATE melanggarnya, operasi gagal.
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 fornitoBatasan dapat dideklarasikan sebaris pada kolom atau sebagai tingkat tabel
batasan (di bawah kolom). Contoh gabungan UNIQUE:
UNIQUE (customer_id, product_id) -- niente coppia (cliente, prodotto) duplicataPERIKSA batasan
CHECK menerapkan aturan khusus:
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
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
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).
Tunjukkan petunjuk
UNIK (id_pelanggan, id_produk) sebagai batasan tingkat tabel di bagian bawah.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Tambahkan ke tabel pelanggan kolom buletin bertipe BOOLEAN, BUKAN NULL, dengan DEFAULT false. Gunakan pernyataan ALTER TABLE tunggal.
Tunjukkan petunjuk
Tanpa DEFAULT, ALTER akan gagal karena baris sudah ada dan kolom baru BUKAN NULL.
Solusi tersedia setelah 3 upaya