SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

SQLite - Buat Hubungan

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat membuka database dalam mode baca/tulis

  2. Buat kunci komposit secara otomatis di SQLite

  3. Ruang Android + Fungsi Jendela

  4. Database Kamar Android, ambil nilai spesifik dari catatan terbaru yang dimasukkan

  5. Apa Itu SQLite?