Masalah:
Anda ingin mengetahui nama default batasan dalam tabel di PostgreSQL.
Contoh:
Dalam database kami, kami membuat dua tabel, country
dan student
, dengan batasan berikut:PRIMARY KEY
(kolom id
di tabel country
dan student
), FOREIGN KEY
(kolom country_id
dalam tabel student
), DEFAULT
(kolom name
dalam tabel student
), UNIQUE
(kolom name
dalam tabel country
dan kolom personal_number
dalam tabel student
), dan CHECK
(kolom age
dalam tabel student
).
Solusi:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Mari kita tampilkan bagaimana PostgreSQL menamai batasan tabel ini secara default. Gunakan kueri ini untuk melihatnya:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Ini hasilnya:
nama samaran | konteks |
---|---|
country_pkey | p |
kunci_nama_negara | u |
pemeriksaan_usia_siswa | c |
mahasiswa_pkey | p |
kunci_nomor_pribadi_siswa | u |
siswa_negara_id_fkey | f |
Diskusi:
Saat kami membuat tabel kami, kami menetapkan batasan untuk beberapa kolom. Namun, kami tidak menentukan nama untuk batasan ini, sehingga diberi nama secara default di PostgreSQL. Bagaimana nama default untuk batasan dihasilkan?
Di PostgreSQL, tipe batasan default adalah p
, f
, u
, dan c
.
PRIMARY KEY
diberi nama secara default dengan nama tabel, garis bawah (‘_
’), dan ‘pkey
'. Pada tabel hasil kami di atas, Anda dapat melihat dua PRIMARY KEY
nama (ketik ‘p
’) – satu dengan nama country_pkey
di country
tabel dan lainnya dengan nama student_pkey
di student
tabel.
FOREIGN KEY
ditunjukkan oleh jenis kendala 'f
'. Namanya dihasilkan oleh nama tabel saat ini, garis bawah (‘_
’), nama kolom, garis bawah lainnya (‘_
’), dan ‘fkey
'. Dalam contoh kita, nama batasan kunci asing adalah student_country_id_fkey
, karena kolom country_id
dalam tabel student
adalah kunci asing.
Nama default untuk CHECK
batasannya mirip dengan kunci asing, hanya saja batasannya bertipe ‘c
'. Dalam contoh kita, kolom age
dalam tabel student
memiliki batasan ini, jadi nama batasan default adalah student_age_check
.
Nama default untuk UNIQUE
kendala (ketik 'u
’) adalah nama tabel, garis bawah (‘_
’), nama kolom, garis bawah lainnya (‘_
’), dan ‘key
'. Dalam contoh kita, tabel student
memiliki UNIQUE
batasan bernama student_personal_number_key
. Untuk beberapa kolom dalam batasan, namanya mengikuti konvensi yang sama tetapi berisi nama semua kolom dalam definisi batasan.