SQLite mendukung hubungan sama seperti sistem manajemen basis data relasional lainnya.
SQLite adalah relasional sistem manajemen basis data (RDBMS). Ia menggunakan model relasional yang sama dengan DBMS populer lainnya (seperti MySQL, Oracle, SQL Server, MS Access).
Artinya, Anda dapat membuat beberapa tabel, lalu menghubungkannya satu sama lain melalui hubungan .
hubungan adalah tempat Anda memiliki beberapa tabel yang berisi data terkait, dan data tersebut ditautkan oleh nilai umum yang disimpan di kedua tabel.
Diagram berikut menggambarkan konsep ini:
Jadi, mari tambahkan tabel lain yang disebut Album , lalu tautkan itu ke Artis kami tabel melalui hubungan.
Melakukan ini akan memungkinkan kami untuk mencari artis mana yang dimiliki oleh album tertentu.
Buat Tabel Baru
Jadi mari kita lanjutkan dan buat Album tabel:
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, Year TEXT NOT NULL, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Mirip dengan saat kami membuat
Artis
tabel, namun, pada tabel ini, kami telah menambahkan FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId)
sampai akhir pernyataan.
Ini menciptakan batasan kunci asing di Albums.ArtistId kolom. Artinya, setiap data yang dimasukkan ke dalam kolom ini, harus cocok dengan nilai di Artists.ArtistId kolom.
Jika kami tidak melakukan ini, mungkin saja ada album yang bukan milik artis. Dengan kata lain, kita bisa memiliki catatan yatim piatu di database kita. Tidak baik jika Anda mencoba mempertahankan integritas referensial.
Sekarang, jika kita menjalankan .tables
perintah, kita akan melihat kedua tabel di database:
sqlite> .tables Albums Artists
Uji Hubungannya
Setelah kami membuat tabel dengan kunci asing, kami dapat mengujinya dengan mencoba memasukkan data yang salah. Kami dapat mencoba memasukkan album dengan ArtistId yang tidak cocok dengan ArtistId dalam tabel yang dirujuk (yaitu Artis tabel):
INSERT INTO Albums (AlbumName, Year, ArtistId) VALUES ('Powerslave', '1984', 70);
Ini akan menghasilkan hal berikut:
sqlite> INSERT INTO Albums (AlbumName, Year, ArtistId) ...> VALUES ('Powerslave', '1984', 70); Error: FOREIGN KEY constraint failed
Juga, menjalankan SELECT
pernyataan di atas meja tidak akan mengembalikan data.
Ini karena batasan kunci asing memblokir nilai yang salah agar tidak dimasukkan.
Tidak Berhasil?
Jika Anda tidak menerima pesan kesalahan saat mencoba memasukkan data yang salah seperti ini, Anda mungkin perlu memeriksa setelan Anda.
Jalankan perintah berikut:PRAGMA foreign_keys;
Jika ini menghasilkan 0
itu berarti batasan kunci asing Anda dinonaktifkan. Sebenarnya, ini adalah perilaku default SQLite (ini untuk kompatibilitas mundur).
Untuk mengaktifkan batasan kunci asing, ketik berikut PRAGMA foreign_keys = ON;
Sekarang, jalankan PRAGMA foreign_keys;
harus mengembalikan 1
, dan upaya selanjutnya untuk memasukkan kunci asing yang tidak valid akan gagal.
Namun, jika PRAGMA foreign_keys;
perintah tidak mengembalikan data, implementasi SQLite Anda tidak mendukung kunci asing (baik karena lebih lama dari versi 3.6.19 atau karena dikompilasi dengan SQLITE_OMIT_FOREIGN_KEY
atau SQLITE_OMIT_TRIGGER
ditentukan).
Masukkan Lebih Banyak Data
Sekarang setelah hubungan terbentuk, kita dapat menambahkan data sebanyak yang kita butuhkan, dengan keyakinan bahwa hanya record dengan kunci asing yang valid yang akan dimasukkan.
INSERT INTO Albums VALUES (NULL, 'Killers', '1981', 7); INSERT INTO Albums VALUES (NULL, 'Powerslave', '1984', 7); INSERT INTO Albums VALUES (NULL, 'Surfing with the Alien', '1987', 1); INSERT INTO Albums VALUES (NULL, 'Heavy as a Really Heavy Thing', '1995', 11); INSERT INTO Albums VALUES (NULL, 'Yummy Yummy', '1994', 17); INSERT INTO Albums VALUES (NULL, 'Out of the Loop', '2007', 6); INSERT INTO Albums VALUES (NULL, 'Suck on This', '1989', 13); INSERT INTO Albums VALUES (NULL, 'Pork Soda', '1993', 13); INSERT INTO Albums VALUES (NULL, 'Sailing the Seas of Cheese', '1991', 13); INSERT INTO Albums VALUES (NULL, 'Flying in a Blue Dream', '1989', 1); INSERT INTO Albums VALUES (NULL, 'Black Swans and Wormhole Wizards', '2010', 1); INSERT INTO Albums VALUES (NULL, 'Somewhere in Time', '1986', 7); INSERT INTO Albums VALUES (NULL, 'Big Red Car', '1995', 17);
Selanjutnya, kita akan memilih data dari kedua tabel menggunakan JOIN
pernyataan.