Kunci Utama dan Kunci Asing di SQLite dengan Contoh

SQLite kendala

Batasan kolom menerapkan batasan dan aturan pada nilai yang disisipkan pada kolom untuk memvalidasi data yang disisipkan. Batasan kolom ditentukan saat membuat tabel, dalam definisi kolom.

SQLite Kunci utama

Semua nilai pada kolom kunci utama harus unik dan bukan nol

Kunci utama dapat diterapkan hanya pada satu kolom atau pada kombinasi kolom, dalam kasus terakhir, kombinasi nilai kolom harus unik untuk semua baris tabel.

sintaks:

Ada banyak cara berbeda untuk mendefinisikan kunci utama pada tabel seperti:

  • Di kolom definisi itu sendiri:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Sebagai definisi tersendiri:
    PRIMARY KEY(ColumnName);
  • Untuk membuat kombinasi kolom sebagai kunci utama:
    PRIMARY KEY(ColumnName1, ColumnName2);

Bukan batasan nol

SQLite Batasan bukan nol mencegah kolom memiliki nilai nol:

ColumnName INTEGER  NOT NULL;

Batasan DEFAULT

SQLite Batasan default jika Anda tidak memasukkan nilai apa pun ke dalam kolom, nilai default akan dimasukkan.

Untuk Contoh:

ColumnName INTEGER DEFAULT 0;

Jika Anda menulis pernyataan penyisipan, dan Anda tidak menentukan nilai apa pun untuk kolom tersebut, kolom tersebut akan memiliki nilai 0.

SQLite Batasan UNIK

SQLite Batasan unik ini akan mencegah nilai duplikat di antara semua nilai kolom.

Sebagai contoh:

EmployeeId INTEGER NOT NULL UNIQUE;

Ini akan menegakkan "Identitas pegawai" nilai harus unik, nilai duplikat tidak diperbolehkan. Perhatikan bahwa ini berlaku pada nilai kolom "Identitas pegawai" saja.

SQLite PERIKSA batasan

SQLite check kendala suatu kondisi untuk memeriksa nilai yang dimasukkan, jika nilai tidak sesuai dengan kondisi, maka tidak akan dimasukkan.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Anda tidak dapat memasukkan nilai kurang dari 10 ke dalam "Kuantitas" kolom.

SQLite Kunci asing

SQLite kunci asing adalah batasan yang memverifikasi keberadaan nilai yang ada dalam satu tabel ke tabel lain yang memiliki relasi dengan tabel pertama di mana kunci asing tersebut didefinisikan.

Saat bekerja dengan beberapa tabel, ketika ada dua tabel yang berhubungan satu sama lain dengan satu kolom yang sama. Dan jika Anda ingin memastikan bahwa nilai yang disisipkan pada salah satu tabel tersebut harus ada pada kolom tabel lainnya, maka sebaiknya gunakan “Foreign key Constraint” pada kolom yang sama.

Dalam hal ini, ketika Anda mencoba memasukkan nilai pada kolom tersebut, maka kunci asing akan memastikan bahwa nilai yang dimasukkan ada di kolom tabel.

Perhatikan bahwa batasan kunci asing tidak diaktifkan secara default di SQLite, Anda harus mengaktifkannya terlebih dahulu dengan menjalankan perintah berikut:

PRAGMA foreign_keys = ON;

Batasan kunci asing diperkenalkan pada tahun 2017 SQLite mulai dari versi 3.6.19.

Contoh SQLite Kunci asing

Misalkan kita memiliki dua tabel; Mahasiswa dan Departemen.

Tabel Siswa berisi daftar siswa, dan tabel departemen berisi daftar departemen. Setiap siswa termasuk dalam suatu departemen; yaitu, setiap siswa memiliki kolom departmentId.

Sekarang, kita akan melihat bagaimana batasan kunci asing dapat berguna untuk memastikan bahwa nilai id departemen di tabel siswa harus ada di tabel departemen.

SQLite Kunci asing

Jadi, jika kita membuat batasan kunci asing pada DepartmentId di tabel Siswa, setiap departmentId yang dimasukkan harus ada di tabel Departemen.

CREATE TABLE [Departments] (
	[DepartmentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
	[DepartmentName] NVARCHAR(50)  NULL
);
CREATE TABLE [Students] (
	[StudentId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
	[StudentName] NVARCHAR(50)  NULL,
	[DepartmentId] INTEGER  NOT NULL,
	[DateOfBirth] DATE  NULL,
	FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId)
);

Untuk memeriksa bagaimana batasan kunci asing dapat mencegah elemen atau nilai yang tidak ditentukan dimasukkan dalam tabel yang memiliki relasi dengan tabel lain, kita akan melihat contoh berikut.

Dalam contoh ini, tabel Departments mempunyai batasan Foreign key pada tabel Students, sehingga setiap nilai departmentId yang dimasukkan ke dalam tabel Students harus ada di tabel departments. Jika Anda mencoba memasukkan nilai departmentId yang tidak ada di tabel departemen, batasan kunci asing akan mencegah Anda melakukannya.

Mari masukkan dua departemen "SAYA T" dan “Seni” ke dalam tabel departemen sebagai berikut:

INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');

Kedua pernyataan tersebut harus memasukkan dua departemen ke dalam tabel departemen, Anda dapat memastikan bahwa kedua nilai tersebut dimasukkan dengan menjalankan kueri “PILIH * DARI Departemen” Setelah itu:

SQLite Kunci asing

Kemudian coba masukkan siswa baru dengan departmentId yang tidak ada di tabel departemen:

INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);

Baris tidak akan disisipkan, dan Anda akan mendapatkan pesan kesalahan yang mengatakan bahwa: Batasan FOREIGN KEY gagal.