PostgreSQL - KENDALA
Batasan adalah aturan yang diberlakukan pada kolom data pada tabel. Ini digunakan untuk mencegah data yang tidak valid dimasukkan ke dalam database. Ini memastikan keakuratan dan keandalan data dalam database.
Batasan dapat berupa tingkat kolom atau tingkat tabel. Batasan tingkat kolom diterapkan hanya untuk satu kolom sedangkan batasan tingkat tabel diterapkan ke seluruh tabel. Mendefinisikan tipe data untuk kolom merupakan kendala tersendiri. Misalnya, kolom tipe DATE membatasi kolom ke tanggal yang valid.
Berikut ini adalah batasan yang umum digunakan yang tersedia di PostgreSQL.
NOT NULL Constraint - Memastikan bahwa kolom tidak boleh memiliki nilai NULL.
UNIQUE Constraint - Memastikan bahwa semua nilai dalam kolom berbeda.
PRIMARY Key - Secara unik mengidentifikasi setiap baris / record dalam tabel database.
FOREIGN Key - Membatasi data berdasarkan kolom di tabel lain.
CHECK Constraint - Batasan PERIKSA memastikan bahwa semua nilai dalam kolom memenuhi kondisi tertentu.
EXCLUSION Constraint - Batasan EXCLUDE memastikan bahwa jika ada dua baris yang dibandingkan pada kolom atau ekspresi yang ditentukan menggunakan operator yang ditentukan, tidak semua perbandingan ini akan mengembalikan TRUE.
NOT NULL Constraint
Secara default, kolom dapat menampung nilai NULL. Jika Anda tidak ingin kolom memiliki nilai NULL, maka Anda perlu mendefinisikan batasan tersebut pada kolom ini dengan menetapkan bahwa NULL sekarang tidak diizinkan untuk kolom itu. Batasan NOT NULL selalu ditulis sebagai batasan kolom.
NULL tidak sama dengan tidak ada data; sebaliknya, ini mewakili data yang tidak diketahui.
Contoh
Misalnya, pernyataan PostgreSQL berikut membuat tabel baru bernama COMPANY1 dan menambahkan lima kolom, tiga di antaranya, ID dan NAMA dan AGE, tentukan untuk tidak menerima nilai NULL -
CREATE TABLE COMPANY1(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
Kendala UNIK
Batasan UNIQUE mencegah dua rekaman memiliki nilai yang identik dalam kolom tertentu. Dalam tabel PERUSAHAAN, misalnya, Anda mungkin ingin mencegah dua orang atau lebih memiliki usia yang sama.
Contoh
Misalnya, pernyataan PostgreSQL berikut membuat tabel baru bernama COMPANY3 dan menambahkan lima kolom. Di sini, kolom USIA diatur ke UNIK, sehingga Anda tidak bisa memiliki dua catatan dengan usia yang sama -
CREATE TABLE COMPANY3(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL UNIQUE,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00
);
Kendala KUNCI UTAMA
Batasan PRIMARY KEY secara unik mengidentifikasi setiap record dalam tabel database. Bisa ada lebih banyak kolom UNIK, tapi hanya satu kunci utama dalam sebuah tabel. Kunci utama penting saat mendesain tabel database. Kunci utama adalah ID unik.
Kami menggunakannya untuk merujuk ke baris tabel. Kunci utama menjadi kunci asing di tabel lain, saat membuat hubungan antar tabel. Karena 'pengawasan pengkodean yang sudah berlangsung lama', kunci utama dapat berupa NULL di SQLite. Ini tidak terjadi dengan database lain
Kunci utama adalah bidang dalam tabel, yang secara unik mengidentifikasi setiap baris / catatan dalam tabel database. Kunci utama harus berisi nilai unik. Kolom kunci utama tidak boleh memiliki nilai NULL.
Tabel hanya dapat memiliki satu kunci utama, yang mungkin terdiri dari satu atau beberapa bidang. Ketika beberapa bidang digunakan sebagai kunci utama, mereka disebut acomposite key.
Jika tabel memiliki kunci utama yang ditentukan di bidang mana pun, Anda tidak dapat memiliki dua rekaman yang memiliki nilai yang sama dari bidang itu.
Contoh
Anda sudah melihat berbagai contoh di atas di mana kami telah membuat tabel COMAPNY4 dengan ID sebagai kunci utama -
CREATE TABLE COMPANY4(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
Kendala KUNCI ASING
Batasan kunci asing menentukan bahwa nilai dalam kolom (atau sekelompok kolom) harus cocok dengan nilai yang muncul di beberapa baris tabel lain. Kami mengatakan ini mempertahankan integritas referensial antara dua tabel terkait. Mereka disebut kunci asing karena pembatasnya asing; yaitu, di luar meja. Kunci asing terkadang disebut kunci referensi.
Contoh
Misalnya, pernyataan PostgreSQL berikut membuat tabel baru bernama COMPANY5 dan menambahkan lima kolom.
CREATE TABLE COMPANY6(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
Misalnya, pernyataan PostgreSQL berikut membuat tabel baru bernama DEPARTMENT1, yang menambahkan tiga kolom. Kolom EMP_ID adalah kunci asing dan mereferensikan bidang ID dari tabel COMPANY6.
CREATE TABLE DEPARTMENT1(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT references COMPANY6(ID)
);
PERIKSA Kendala
Batasan PERIKSA memungkinkan kondisi untuk memeriksa nilai yang dimasukkan ke dalam catatan. Jika kondisi bernilai false, record melanggar batasan dan tidak dimasukkan ke dalam tabel.
Contoh
Misalnya, pernyataan PostgreSQL berikut membuat tabel baru bernama COMPANY5 dan menambahkan lima kolom. Di sini, kami menambahkan kolom CHECK with SALARY, sehingga Anda tidak dapat memiliki GAJI sebagai Nol.
CREATE TABLE COMPANY5(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL CHECK(SALARY > 0)
);
PENGECUALIAN Kendala
Batasan pengecualian memastikan bahwa jika ada dua baris yang dibandingkan pada kolom atau ekspresi yang ditentukan menggunakan operator yang ditentukan, setidaknya salah satu dari perbandingan operator ini akan mengembalikan false atau null.
Contoh
Misalnya, pernyataan PostgreSQL berikut membuat tabel baru bernama COMPANY7 dan menambahkan lima kolom. Di sini, kami menambahkan batasan KECUALIKAN -
CREATE TABLE COMPANY7(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT,
AGE INT ,
ADDRESS CHAR(50),
SALARY REAL,
EXCLUDE USING gist
(NAME WITH =,
AGE WITH <>)
);
Di sini, MENGGUNAKAN inti adalah jenis indeks yang akan dibuat dan digunakan untuk penegakan.
Anda perlu menjalankan perintah CREATE EXTENSION btree_gist , satu kali per database. Ini akan menginstal ekstensi btree_gist, yang mendefinisikan batasan pengecualian pada tipe data skalar biasa.
Karena kami telah memberlakukan usia harus sama, mari kita lihat ini dengan memasukkan catatan ke tabel -
INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Paul', 42, 'California', 20000.00 );
Untuk dua pernyataan INSERT pertama, catatan ditambahkan ke tabel COMPANY7. Untuk pernyataan INSERT ketiga, kesalahan berikut ini ditampilkan -
ERROR: conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL: Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).
Menghilangkan Kendala
Untuk menghilangkan batasan, Anda perlu mengetahui namanya. Jika namanya dikenal, mudah untuk dihilangkan. Lain, Anda perlu mencari tahu nama yang dihasilkan sistem. Perintah psql \ d nama tabel dapat membantu di sini. Sintaks umumnya adalah -
ALTER TABLE table_name DROP CONSTRAINT some_name;