Data Anda hanya bagus jika Anda dapat mempercayainya. Gunakan batasan database untuk memastikan database akurat, andal, dan tidak merusak model data Anda.
Poin Penting
- Gunakan batasan SQL untuk menjaga integritas data dan memastikan keseragaman dalam database Anda. Batasan NOT NULL memaksa kolom untuk menolak nilai NULL.
- Menerapkan batasan kunci utama untuk memastikan keunikan nilai dalam kolom atau kumpulan kolom. Ini mencegah duplikasi catatan dalam tabel database.
- Batasan kunci asing membangun hubungan antar tabel dan mencegah tindakan yang akan merusak hubungan antar tabel. Mereka memastikan bahwa catatan di tabel anak mereferensikan tabel induk.
Basis data sangat penting untuk banyak aplikasi, namun bisa menjadi berantakan jika Anda tidak memiliki pedoman untuk menyimpan dan memproses data.
Batasan SQL menentukan aturan untuk menyimpan data dalam tabel. Saat Anda menetapkan batasan, database akan menampilkan kesalahan jika Anda mencoba menyimpan data yang melanggar aturan ini. Batasan membantu menjaga integritas data dan memastikan keseragaman dalam database Anda.
Ada beberapa jenis batasan SQL yang bisa Anda gunakan; inilah beberapa yang paling berguna.
1. BUKAN Batasan NULL
Kolom database, secara default, menerima data dengan nilai NULL. NULL pada dasarnya berarti tidak ada nilai. Batasan NOT NULL memaksa kolom untuk menolak nilai NULL.
Batasan ini memastikan bahwa setiap kolom harus berisi nilai. Anda tidak dapat menambahkan catatan ke database tanpa menyediakan data untuk kolom apa pun dengan batasan NOT NULL.
Ambil contoh a Pelanggan meja. Ada beberapa detail penting tentang setiap pelanggan yang ingin Anda catat, seperti nama mereka. Tambahkan batasan NOT NULL ke kolom wajib untuk memastikan bahwa pelanggan memberikan informasi ini.
Berikut ini contoh yang menunjukkan bagaimana Anda dapat menggunakan batasan NOT NULL di a Basis data PostgreSQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Jika Anda mencoba memasukkan catatan pelanggan tanpa Usia bidang, database akan menerimanya tanpa kesalahan:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Namun, jika Anda mencoba memasukkan catatan tanpa Nama depan bidang, database akan menolaknya dengan pesan kesalahan:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. Kendala KUNCI UTAMA
KUNCI adalah atribut unik yang disetel ke kolom atau bidang yang mengidentifikasi tuple (atau catatan) tabel dalam sistem database. Batasan PRIMARY KEY memastikan keunikan nilai dalam kolom atau kumpulan kolom. Ini bertindak sebagai pengidentifikasi unik dalam satu baris, mencegah duplikat catatan dalam tabel database.
Kunci utama berisi nilai unik dan tidak boleh berisi nilai NULL. Setiap tabel basis data SQL harus hanya memiliki satu kunci utama. PRIMARY KEY dapat memiliki satu atau beberapa kolom.
Misalnya, Anda membuat database catatan pelanggan. Anda memerlukan setiap pelanggan untuk memasukkan nomor ID mereka secara berbeda dari orang lain. Anda dapat menerapkan batasan kunci utama untuk memastikan tidak ada pelanggan Anda yang memiliki nomor ID yang sama.
Kode berikut menunjukkan bagaimana Anda dapat memperkenalkan batasan kunci utama dalam database MySQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Basis data tidak akan menerima nilai tersebut jika pengguna memasukkan catatan lain dengan ID serupa. Sebaliknya, ini akan memunculkan kesalahan yang menunjukkan duplikasi. Pengguna mencoba memasukkan dua catatan dengan ID yang sama dalam contoh berikut:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Basis data akan menampilkan pesan kesalahan:
Duplicate entry '1' for key 'PRIMARY'
Tetapi jika Anda mengubah ID pelanggan kedua, database akan menerima entri tersebut. Oleh karena itu, kunci utama memastikan tidak ada duplikat ID dalam catatan pelanggan Anda.
3. Kendala KUNCI ASING
Kunci asing membangun hubungan antara dua tabel. Anda dapat menambahkan kunci asing ke bidang/kolom dalam satu tabel yang mereferensikan kunci utama di tabel lain.
Tabel dengan kunci utama adalah tabel induk, sedangkan tabel dengan kunci asing adalah tabel anak. Sebuah record tidak bisa ada di tabel anak tanpa referensi ke tabel induk.
Batasan kunci asing mencegah tindakan yang akan merusak hubungan antar tabel. Misalnya, Anda tidak bisa MENJATUHKAN satu tabel jika ditautkan ke tabel lain dengan kunci asing. Anda harus menghapus kedua tabel sekaligus.
Berbeda dengan kunci utama, Anda dapat menduplikasi kunci asing dan memiliki lebih dari satu kunci dalam satu tabel. Nilai kunci asing juga bisa BATAL. Dalam contoh berikut, Anda harus menggunakan ID Pelanggan untuk membuat pesanan.
CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');
INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');
Jika Anda mencoba membuat pesanan tanpa pesanan yang sudah ada ID Pelanggan, database menampilkan pesan kesalahan:
Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))
4. Kendala UNIK
Batasan ini memastikan bahwa tidak ada dua baris yang memiliki nilai yang sama untuk kolom tertentu. Seperti kunci utama, batasan unik menjaga integritas data dan mencegah entri duplikat. Jika Anda bekerja dengan database yang dirancang dengan buruk tanpa batasan UNIK, Anda mungkin harus melakukannya temukan dan hapus duplikatnya.
Tidak seperti kunci utama, Anda dapat memiliki banyak batasan UNIK dalam satu tabel. Misalnya, saat membuat a Pelanggan tabel, Anda mungkin ingin memiliki ID dan nomor telepon unik. Untuk menambahkan batasan menggunakan server MySQL, gunakan sintaks ini:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Jika Anda memasukkan catatan dengan nomor ponsel yang sama ke dalam database, maka akan muncul pesan kesalahan.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Pesan kesalahannya akan seperti ini:
Duplicate entry '254000000' for key 'Mobile_No'
Batasan UNIK ini memastikan database tidak memiliki pelanggan dengan ID atau nomor ponsel yang sama.
5. PERIKSA Kendala
Batasan CHECK membatasi rentang nilai yang dimasukkan ke dalam kolom. Menambahkan batasan CHECK pada kolom hanya akan memperbolehkan nilai tertentu untuk kolom tersebut. Ini menegakkan integritas data dengan memastikan pengguna hanya memasukkan data yang valid ke dalam tabel.
Batasan CHECK harus mengevaluasi nilai sebagai TRUE atau UNKNOWN untuk setiap entri baris atau tabel tertentu. Jika nilainya FALSE, database menampilkan pesan kesalahan.
Misalnya, dalam tabel Pelanggan, Anda mungkin hanya ingin melayani pelanggan di atas 18 tahun. Anda dapat menambahkan batasan CHECK untuk memastikan Anda tidak melayani pelanggan di bawah umur. Anda dapat menambahkan batasan dalam database PostgreSQL, seperti yang ditunjukkan pada kode berikut:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Sekarang jika Anda mencoba memasukkan usia pelanggan di bawah 18 tahun:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Database akan menampilkan pesan error seperti ini:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Cara Menambah dan Menghapus Batasan SQL Dari Database
Batasan SQL tidak diterapkan begitu saja. Anda dapat menambah atau menghapus batasan pada tabel yang ada menggunakan pernyataan ALTER TABLE. Pernyataan ALTER memungkinkan Anda bekerja dengan batasan untuk memenuhi kebutuhan data Anda.
Masih banyak lagi batasan SQL yang bisa Anda pelajari untuk mendesain database sesuai keinginan Anda. Anda bisa mulai dengan yang tercantum di artikel ini.