• Tidak ada hasil yang ditemukan

MENDESAIN TABEL

Dalam dokumen Structured Query Language SQL (Halaman 87-106)

Obsesi dengan detail bisa menjadi hal yang baik. Saat Anda berlari keluar pintu, itu meyakinkan untuk mengetahui kunci Anda akan tergantung di pengait di mana Anda selalu meninggalkannya. Hal yang sama berlaku untuk desain database. Saat Anda perlu menggali bongkahan informasi dari lusinan tabel dan jutaan baris, Anda akan menghargai dosis obsesi detail yang sama. Saat Anda mengatur data ke dalam kumpulan tabel yang disetel dengan baik dan diberi nama yang cerdas, pengalaman analisis menjadi lebih mudah dikelola.

Dalam bab ini, saya akan membangun Bab 6 dengan memperkenalkan praktik terbaik untuk mengatur dan menyetel database SQL, apakah itu milik Anda atau yang Anda warisi untuk analisis. Anda sudah tahu cara membuat tabel dasar dan menambahkan kolom dengan tipe data dan kunci utama yang sesuai. Sekarang, kita akan menggali lebih dalam desain tabel dengan menjelajahi aturan dan konvensi penamaan, cara menjaga integritas data Anda, dan cara menambahkan indeks ke tabel untuk mempercepat kueri.

Memberi Nama Tabel, Kolom, dan Pengidentifikasi Lainnya Other

Pengembang cenderung mengikuti pola gaya SQL yang berbeda saat memberi nama tabel, kolom, dan objek lain (disebut pengidentifikasi). Beberapa lebih suka menggunakan kotak unta, seperti dalam berrySmoothie, di mana kata-kata dirangkai dan huruf pertama dari setiap kata dikapitalisasi kecuali untuk kata pertama. Huruf Pascal, seperti dalam BerrySmoothie, mengikuti pola yang sama tetapi menggunakan huruf kapital untuk huruf pertama dari kata pertama juga. Dengan kasus ular, seperti dalam berry_smoothie, semua kata adalah huruf kecil dan dipisahkan oleh garis bawah. Sejauh ini, saya telah menggunakan kasus ular di sebagian besar contoh, seperti di tabel us_counties_2010.

Anda akan menemukan pendukung yang bersemangat dari setiap konvensi penamaan, dan beberapa preferensi terkait dengan aplikasi database atau bahasa pemrograman individual.

Misalnya, Microsoft merekomendasikan kasus Pascal untuk pengguna SQL Server-nya.

Konvensi mana pun yang Anda sukai, yang paling penting adalah memilih gaya dan menerapkannya secara konsisten. Pastikan untuk memeriksa apakah organisasi Anda memiliki panduan gaya atau tawaran untuk berkolaborasi dalam satu, dan kemudian ikuti secara religius.

Mencampur gaya atau mengikuti tidak ada umumnya mengarah ke kekacauan. Akan sulit untuk mengetahui tabel mana yang terbaru, yang merupakan cadangan, atau perbedaan antara dua tabel yang memiliki nama serupa. Misalnya, bayangkan menghubungkan ke database dan menemukan kumpulan tabel berikut:

Customers customers custBackup customer_analysis customer_test2

customer_testMarch2012 customeranalysis

Selain itu, bekerja tanpa skema penamaan yang konsisten menyulitkan orang lain untuk menyelami data Anda dan menyulitkan Anda untuk melanjutkan dari bagian terakhir yang Anda tinggalkan.

Mari kita telusuri pertimbangan terkait dengan pengidentifikasi penamaan dan saran untuk praktik terbaik.

Menggunakan Kutipan di Sekitar Pengidentifikasi untuk Mengaktifkan Kasus Campuran SQL ANSI standar dan banyak varian khusus database dari SQL memperlakukan pengenal sebagai case-insensitive kecuali Anda memberikan pembatas di sekitarnya, biasanya tanda kutip ganda. Pertimbangkan dua pernyataan CREATE TABLE hipotetis ini untuk PostgreSQL:

CREATE TABLE customers ( customer_id serial, -- snip –

);

CREATE TABLE Customers ( customer_id serial, -- snip –

);

Ketika Anda menjalankan pernyataan ini secara berurutan, perintah CREATE TABLE pertama membuat tabel yang disebut pelanggan. Tetapi daripada membuat tabel kedua yang disebut Pelanggan, pernyataan kedua akan menimbulkan kesalahan: relasi "pelanggan" sudah ada.

Karena Anda tidak mengutip pengidentifikasi, PostgreSQL memperlakukan pelanggan dan Pelanggan sebagai pengidentifikasi yang sama, dengan mengabaikan kasusnya. Jika Anda ingin mempertahankan huruf besar dan membuat tabel terpisah bernama Pelanggan, Anda harus mengapit pengenal dengan tanda kutip, seperti ini:

CREATE TABLE “Customers” ( customer_id serial, -- snip –

);

Sekarang, PostgreSQL mempertahankan huruf besar C dan membuat Pelanggan serta pelanggan. Kemudian, untuk menanyakan Pelanggan daripada pelanggan, Anda harus mengutip namanya dalam pernyataan SELECT:

SELECT * FROM “Customers”;

Tentu saja, Anda tidak ingin dua tabel dengan nama yang mirip karena risiko kesalahan yang tinggi. Contoh ini hanya menggambarkan perilaku SQL di PostgreSQL.

Kesalahan dengan Mengutip Pengidentifikasi

Menggunakan tanda kutip juga mengizinkan karakter yang tidak diizinkan dalam pengidentifikasi, termasuk spasi. Tetapi waspadalah terhadap hal-hal negatif dari penggunaan metode ini: misalnya, Anda mungkin ingin memberikan tanda kutip di sekitar "pohon yang ditanam" dan menggunakannya sebagai nama kolom dalam database reboisasi, tetapi kemudian semua pengguna harus memberikan tanda kutip pada setiap referensi berikutnya ke kolom itu.

Abaikan tanda kutip dan database akan merespons dengan kesalahan, mengidentifikasi pohon dan ditanam sebagai kolom terpisah tanpa koma di antaranya. Opsi yang lebih mudah dibaca dan andal adalah menggunakan kasing ular, seperti di tree_planted.

Kelemahan lain dari mengutip adalah memungkinkan Anda menggunakan kata kunci yang dicadangkan SQL, seperti TABLE, WHERE, atau SELECT, sebagai pengenal. Kata kunci yang dicadangkan adalah kata-kata yang ditetapkan SQL sebagai memiliki arti khusus dalam bahasa tersebut. Sebagian besar pengembang basis data tidak suka menggunakan kata kunci yang dicadangkan sebagai pengidentifikasi. Minimal membingungkan, dan paling buruk mengabaikan atau lupa mengutip kata kunci itu nanti akan menghasilkan kesalahan karena database akan menafsirkan kata sebagai perintah, bukan pengenal.

Catatan : Untuk PostgreSQL, Anda dapat menemukan daftar kata kunci yang didokumentasikan di https://www.postgresql.org/docs/current/static/sql-keywords-appendix.html. Selain itu, banyak editor kode dan alat database, termasuk pgAdmin, akan secara otomatis menyorot kata kunci dalam warna tertentu.

Pedoman untuk Penamaan Identifier

Mengingat beban ekstra dalam mengutip dan potensi masalah, yang terbaik adalah menjaga nama pengenal Anda tetap sederhana, tidak dikutip, dan konsisten. Berikut adalah rekomendasi saya:

• Gunakan kotak ular. Kasing ular dapat dibaca dan dapat diandalkan, seperti yang ditunjukkan pada contoh tree_planted sebelumnya. Ini digunakan di seluruh dokumentasi PostgreSQL resmi dan membantu membuat nama multikata mudah dipahami:

video_on_demand sekilas lebih masuk akal daripada videoondemand.

• Buatlah nama yang mudah dimengerti dan hindari singkatan yang samar. Jika Anda sedang membangun database yang terkait dengan perjalanan, waktu_datang adalah pengingat konten yang lebih baik sebagai nama kolom daripada arv_tm.

• Untuk nama tabel, gunakan bentuk jamak. Tabel menyimpan baris, dan setiap baris mewakili satu instance dari suatu entitas. Jadi, gunakan nama jamak untuk tabel, seperti guru, kendaraan, atau departemen.

• Pikirkan panjangnya. Jumlah karakter maksimum yang diizinkan untuk nama pengenal bervariasi menurut aplikasi basis data: standar SQL adalah 128 karakter, tetapi PostgreSQL membatasi Anda hingga 63, dan sistem Oracle maksimum adalah 30. Jika Anda menulis kode yang dapat digunakan kembali di basis data lain sistem, condong ke nama pengidentifikasi yang lebih pendek.

• Saat membuat salinan tabel, gunakan nama yang akan membantu Anda mengelolanya nanti. Salah satu metodenya adalah menambahkan tanggal YYYY_MM_DD ke nama tabel saat Anda membuatnya, seperti tire_sizes_2017_10_20. Manfaat tambahan adalah bahwa nama tabel akan mengurutkan dalam urutan tanggal.

Mengontrol Nilai Kolom dengan Batasan

Tipe data kolom sudah secara luas mendefinisikan jenis data yang akan diterimanya: bilangan bulat versus karakter, misalnya. Tetapi SQL menyediakan beberapa batasan tambahan yang memungkinkan kita menentukan lebih lanjut nilai yang dapat diterima untuk kolom

berdasarkan aturan dan pengujian logika. Dengan kendala, kita dapat menghindari fenomena

“sampah masuk, sampah keluar”, yang terjadi ketika data berkualitas buruk menghasilkan analisis yang tidak akurat atau tidak lengkap. Batasan membantu menjaga kualitas data dan memastikan integritas hubungan antar tabel.

Di Bab 6, Anda mempelajari tentang kunci primer dan kunci asing, yang merupakan dua batasan yang paling umum digunakan. Mari kita tinjau mereka serta jenis kendala tambahan berikut:

CHECK Mengevaluasi apakah data termasuk dalam nilai yang kita tentukan.

UNIQUE Memastikan bahwa nilai dalam kolom atau grup kolom adalah unik di setiap baris dalam tabel.

NOT NULL Mencegah nilai NULL dalam kolom.

Kita dapat menambahkan batasan dalam dua cara: sebagai batasan kolom atau sebagai batasan tabel. Batasan kolom hanya berlaku untuk kolom itu. Ini dideklarasikan dengan nama kolom dan tipe data dalam pernyataan CREATE TABLE, dan akan diperiksa setiap kali ada perubahan pada kolom. Dengan batasan tabel, kami dapat menyediakan kriteria yang berlaku untuk satu atau lebih kolom. Kami mendeklarasikannya dalam pernyataan CREATE TABLE segera setelah mendefinisikan semua kolom tabel, dan itu akan diperiksa setiap kali ada perubahan pada baris dalam tabel.

Kunci Utama: Alami vs. Pengganti

Di Bab 6, Anda belajar tentang memberi tabel sebuah kunci utama: sebuah kolom atau kumpulan kolom yang nilainya secara unik mengidentifikasi setiap baris dalam sebuah tabel.

Kunci utama adalah kendala, dan memberlakukan dua aturan pada kolom atau kolom yang membentuk kunci:

1. Setiap kolom dalam kunci harus memiliki nilai unik untuk setiap baris.

2. Tidak ada kolom dalam kunci yang memiliki nilai yang hilang.

Kunci utama juga menyediakan sarana untuk menghubungkan tabel satu sama lain dan mempertahankan integritas referensial, yang memastikan bahwa baris dalam tabel terkait memiliki nilai yang cocok saat kita mengharapkannya. Contoh kunci utama sederhana dalam

“Menghubungkan Tabel dengan Kolom Kunci” pada halaman 74 memiliki bidang ID tunggal yang menggunakan bilangan bulat yang dimasukkan oleh kami, pengguna. Namun, seperti kebanyakan area SQL, Anda dapat mengimplementasikan kunci utama dalam beberapa cara.

Seringkali, data akan menyarankan jalur terbaik. Tetapi pertama-tama kita harus menilai apakah akan menggunakan kunci alami atau kunci pengganti sebagai kunci utama.

Menggunakan Kolom yang Ada untuk Kunci Alami

Anda menerapkan kunci alami dengan menggunakan satu atau beberapa kolom tabel yang ada daripada membuat kolom dan mengisinya dengan nilai buatan untuk bertindak sebagai kunci. Jika nilai kolom mematuhi batasan kunci utama/unik untuk setiap baris dan tidak pernah kosong, ini dapat digunakan sebagai kunci alami. Nilai dalam kolom dapat berubah selama nilai baru tidak menyebabkan pelanggaran batasan.

Contoh kunci alami adalah nomor identifikasi SIM yang dikeluarkan oleh Departemen Kendaraan Bermotor setempat. Dalam yurisdiksi pemerintah, seperti negara bagian di Amerika Serikat, kami cukup berharap bahwa semua pengemudi akan menerima ID unik pada lisensi mereka. Tetapi jika kami menyusun database SIM nasional, kami mungkin tidak dapat membuat asumsi itu; beberapa negara bagian dapat secara independen mengeluarkan kode ID yang sama. Dalam hal ini, kolom driver_id mungkin tidak memiliki nilai unik dan tidak dapat digunakan sebagai kunci alami kecuali jika digabungkan dengan satu atau beberapa kolom tambahan. Terlepas dari itu, saat Anda membuat tabel, Anda akan menemukan banyak nilai yang cocok untuk kunci alami: nomor bagian, nomor seri, atau ISBN buku adalah contoh yang baik.

Memperkenalkan Kolom untuk Kunci Pengganti

Alih-alih mengandalkan data yang ada, kunci pengganti biasanya terdiri dari satu kolom yang Anda isi dengan nilai buatan. Ini mungkin nomor urut yang dibuat secara otomatis oleh database; misalnya, menggunakan tipe data serial (tercakup dalam “Bilangan Bertambah Otomatis” di halaman 27). Beberapa pengembang suka menggunakan Pengidentifikasi Unik Universal (UUID), yang merupakan kode yang terdiri dari 32 digit heksadesimal yang mengidentifikasi perangkat keras atau perangkat lunak komputer.

Berikut ini contohnya:

2911d8a8–6dea-4a46-af23-d64175a08237

Pro dan Kontra dari Jenis Kunci

Seperti kebanyakan debat SQL, ada argumen untuk menggunakan salah satu jenis kunci utama.

Alasan yang dikutip untuk menggunakan kunci alami sering kali mencakup hal-hal berikut:

• Data sudah ada di tabel, dan Anda tidak perlu menambahkan kolom untuk membuat kunci.

• Karena data kunci alami memiliki arti, dapat mengurangi kebutuhan untuk menggabungkan tabel saat mencari.

Sebagai alternatif, pendukung kunci pengganti menyoroti poin-poin berikut ini:

• Karena kunci pengganti tidak memiliki arti dalam dirinya sendiri dan nilainya tidak tergantung pada data dalam tabel, jika nanti data Anda berubah, Anda tidak dibatasi oleh struktur kunci.

• Kunci alami cenderung menggunakan lebih banyak penyimpanan daripada bilangan bulat yang biasanya digunakan untuk kunci pengganti.

Tabel yang dirancang dengan baik harus memiliki satu atau lebih kolom yang dapat berfungsi sebagai kunci alami. Contohnya adalah tabel produk dengan kode produk yang unik. Namun dalam tabel karyawan, mungkin sulit untuk menemukan satu kolom, atau bahkan beberapa kolom, yang unik berdasarkan baris demi baris untuk dijadikan sebagai kunci utama. Dalam hal ini, Anda dapat membuat kunci pengganti, tetapi Anda mungkin harus mempertimbangkan kembali struktur tabel.

Sintaks Kunci Utama

Dalam “Jenis JOIN”, Anda membuat kunci utama pada tabel kampus_kiri dan kanan_kampus untuk mencoba tipe JOIN. Sebenarnya, ini adalah kunci pengganti: di kedua tabel, Anda

membuat kolom yang disebut id untuk digunakan sebagai kunci dan menggunakan kata kunci CONSTRAINT key_name PRIMARY KEY untuk mendeklarasikannya sebagai kunci utama. Mari kita bahas beberapa contoh kunci utama lainnya.

Di kode dibawah ini, kami mendeklarasikan kunci utama menggunakan metode batasan kolom dan batasan tabel pada tabel yang mirip dengan contoh SIM yang disebutkan sebelumnya.

Karena kami berharap ID SIM selalu unik, kami akan menggunakan kolom itu sebagai kunci alami.

CREATE TABLE natural_key_example (

lisence_id varchar(10) CONSTRAIT lisence_key PRIMARY KEY, first_name varchar(50),

last_name varchar(50) );

DROP TABLE natural_key_example;

CREATE TABLE natural_key_example ( licence_id varchar(10), first_name varchar(50), last_name varchat(50),

CONSTRAINT license_key PRIMARY KEY (license_id) );

Pertama-tama kita menggunakan sintaks batasan kolom untuk mendeklarasikan license_id sebagai kunci utama dengan menambahkan kata kunci CONSTRAINT diikuti dengan nama untuk kunci tersebut dan kemudian kata kunci PRIMARY KEY. Keuntungan menggunakan sintaks ini adalah mudah untuk memahami secara sekilas kolom mana yang ditetapkan sebagai kunci utama. Perhatikan bahwa dalam sintaks kendala kolom Anda dapat menghilangkan kata kunci dan nama CONSTRAINT untuk kunci tersebut, dan cukup gunakan KUNCI UTAMA.

Selanjutnya, kami menghapus tabel dari database dengan menggunakan perintah DROP TABLE untuk mempersiapkan contoh batasan tabel.

Untuk menambahkan kunci utama yang sama menggunakan sintaks batasan tabel, kami mendeklarasikan CONSTRAINT setelah mencantumkan kolom terakhir dengan kolom yang ingin kami gunakan sebagai kunci dalam tanda kurung. Dalam contoh ini, kita berakhir dengan kolom yang sama untuk kunci utama seperti yang kita lakukan dengan sintaks kendala kolom.

Namun, Anda harus menggunakan sintaks batasan tabel saat Anda ingin membuat kunci utama menggunakan lebih dari satu kolom. Dalam hal ini, Anda akan mencantumkan kolom dalam tanda kurung, dipisahkan dengan koma. Kami akan menyelidikinya sebentar lagi.

Pertama, mari kita lihat bagaimana memiliki kunci utama melindungi Anda dari merusak integritas data Anda. Kode dibawah ini berisi dua pernyataan INSERT:

INSERT INTO natural_key_example (license_id, first_name, last_name) VALUES (‘T229901’, ‘Lynn’, ‘Malero’);

INSERT INTO natural_key_example (license_id, first_name, last_name) VALUES (‘T229901’, ‘Sam’, ‘Tracy’);

Saat Anda menjalankan pernyataan INSERT pertama sendiri, server memuat baris ke tabel natural_key_example tanpa masalah apa pun. Saat Anda mencoba menjalankan yang kedua, server membalas dengan kesalahan:

ERROR: duplicate key value violates unique constrait “license_key”

DETAIL: Key (lisence_id)=(T229901) already exists.

Sebelum menambahkan baris, server memeriksa apakah license_id dari T229901 sudah ada di tabel. Karena itu, dan karena kunci utama menurut definisi harus unik untuk setiap baris, server menolak operasi. Aturan dari DMV fiktif menyatakan bahwa tidak ada dua pengemudi yang dapat memiliki ID lisensi yang sama, jadi memeriksa dan menolak data duplikat adalah salah satu cara database untuk menegakkan aturan itu.

Membuat PRIMARY KEY Gabungan

Jika kita ingin membuat kunci alami tetapi satu kolom dalam tabel tidak cukup untuk memenuhi persyaratan kunci utama untuk keunikan, kita mungkin dapat membuat kunci yang sesuai dari kombinasi kolom, yang disebut komposit. kunci utama.’

Sebagai contoh hipotetis, mari gunakan tabel yang melacak kehadiran siswa di sekolah.

Kombinasi kolom ID siswa dan kolom tanggal akan memberi kita data unik untuk setiap baris, melacak apakah siswa tersebut bersekolah atau tidak setiap hari selama tahun ajaran.

Untuk membuat kunci utama komposit dari dua atau lebih kolom, Anda harus mendeklarasikannya menggunakan sintaks batasan tabel yang disebutkan sebelumnya. Listing program yang akan kita buat untuk membuat tabel contoh untuk skenario kehadiran mahasiswa. Basis data sekolah akan mencatat setiap student_id hanya sekali per school_day, menciptakan nilai unik untuk baris tersebut. Kolom saat ini dari tipe data boolean menunjukkan apakah mahasiswa ada di sana pada hari itu.

CREATE TABLE natural_key_composite_example ( student_id varchar(10),

school_day date, present Boolean,

CONSTRAIT student_key PRIMARY KEY (student_id, school_day) );

Sintaks tersebut diatas mengikuti format batasan tabel yang sama untuk menambahkan kunci utama untuk satu kolom, tetapi kita melewatkan dua (atau lebih) kolom sebagai argumen, bukan satu. Sekali lagi, kita dapat mensimulasikan pelanggaran kunci dengan mencoba menyisipkan baris di mana kombinasi nilai dalam dua kolom KEY (student_id dan school_day) tidak unik untuk tabel. Jalankan kode ini:

INSERT INTO natural_key_composite_example (student_id, school_day, present) VALUES(775, ‘1/22/2017’, ‘Y’);

INSERT INTO natural_key_composite_example (student_id, school_day, present) VALUES(775, ‘1/23/2017’, ‘Y’);

INSERT INTO natural_key_composite_example (student_id, school_day, present) VALUES(775, ‘1/23/2017’, ‘N’);

Dua pernyataan INSERT pertama dijalankan dengan baik karena tidak ada duplikasi nilai dalam kombinasi kolom kunci. Tetapi pernyataan ketiga menyebabkan kesalahan karena nilai student_id dan school_day yang dikandungnya cocok dengan kombinasi yang sudah ada di tabel:

ERROR: duplicate key value violates unique constrait “student_key”

DETAIL: Key (student_id, school_day)=(775, 2017-01-23) already exists.

Anda dapat membuat kunci komposit dengan lebih dari dua kolom. Basis data khusus yang Anda gunakan membatasi jumlah kolom yang dapat Anda gunakan.

Membuat Kunci Pengganti Peningkatan Otomatis

Jika tabel yang Anda buat tidak memiliki kolom yang cocok untuk kunci utama alami, Anda mungkin memiliki masalah integritas data; dalam hal ini, yang terbaik adalah mempertimbangkan kembali bagaimana Anda menyusun database. Jika Anda mewarisi data untuk analisis atau sangat ingin menggunakan kunci pengganti, Anda dapat membuat kolom dan mengisinya dengan nilai unik. Sebelumnya, saya menyebutkan bahwa beberapa pengembang menggunakan UUID untuk ini; yang lain mengandalkan perangkat lunak untuk menghasilkan kode unik. Untuk tujuan kita, cara mudah untuk membuat kunci primer pengganti adalah dengan bilangan bulat yang bertambah otomatis menggunakan salah satu tipe data serial yang dibahas dalam “Bilangan Bertambah Otomatis”

Ingat tiga jenis serial: smallserial, serial, dan bigserial. Mereka sesuai dengan tipe integer smallint, integer, dan bigint dalam hal rentang nilai yang mereka tangani dan jumlah penyimpanan disk yang mereka konsumsi. Untuk kunci utama, mungkin tergoda untuk mencoba menghemat ruang disk dengan menggunakan serial, yang menangani angka sebesar 2.147.483.647. Tetapi banyak pengembang basis data telah menerima panggilan larut malam dari pengguna yang panik untuk mengetahui mengapa aplikasi mereka rusak, hanya untuk menemukan bahwa basis data mencoba menghasilkan nomor satu yang lebih besar dari maksimum tipe data. Untuk alasan ini, dengan PostgreSQL, umumnya bijaksana untuk menggunakan bigserial, yang menerima angka setinggi 9,2 triliun.

Anda dapat mengaturnya dan melupakannya, seperti yang ditunjukkan pada kolom pertama yang ditentukan dalam listing dibawah ini:

CREATE TABLE surrogate_key_example ( order_number bigserial, product_name varchar(50), order_date date,

CONSTRAIT order_key PRIMARY KEY (order_number) );

INSERT INTO surrogate_key_example (product_name, order_date) VALUES (‘Beachball Polish’, ‘2015-03-17’),

(‘Wringkle De-Atomizer’, ‘2017-05-22’), (‘Flux Capacitor’, ‘1985-10-26’);

SELECT * FROM surrogate_key_example;

List diatas menunjukkan bagaimana mendeklarasikan tipe data bigserial untuk kolom order_number dan mengatur kolom tersebut sebagai primary key . Saat Anda memasukkan data ke dalam tabel , Anda dapat menghilangkan kolom order_number. Dengan order_number diatur ke bigserial, database akan membuat nilai baru untuk kolom tersebut pada setiap sisipan. Nilai baru akan lebih besar dari nilai terbesar yang sudah dibuat untuk kolom.

Jalankan SELECT * FROM surrogate_key_example; untuk melihat bagaimana kolom terisi secara otomatis:

order_number product_name order_date --- --- --- 1 Beachball Polish 2015-03-17 2 Wrinkle De-Atomizer 2017-05-22 3 Flux Capacitor 1985-10-26

Basis data akan menambahkan satu ke order_number setiap kali baris baru dimasukkan. Tapi itu tidak akan mengisi celah apa pun dalam urutan yang dibuat setelah baris dihapus.

Kunci Asing

Dengan batasan kunci asing, SQL sangat membantu menyediakan cara untuk memastikan data dalam tabel terkait tidak berakhir tidak terkait, atau menjadi yatim piatu. Kunci asing adalah satu atau lebih kolom dalam tabel yang cocok dengan kunci utama tabel lain. Tetapi kunci asing juga memberlakukan batasan: nilai yang dimasukkan harus sudah ada di kunci utama atau kunci unik lainnya dari tabel yang dirujuknya. Jika tidak, nilainya ditolak. Batasan ini memastikan bahwa kita tidak berakhir dengan baris dalam satu tabel yang tidak memiliki hubungan dengan baris di tabel lain tempat kita dapat menggabungkannya.

Sebagai gambaran, kode program dibawah ini menunjukkan dua tabel dari database hipotetis yang melacak aktivitas kendaraan bermotor:

CREATE TABLE license ( license_id varchar(10), first_name varchar(50), last_name varchar(50),

CONSTRAINT licenses_key PRIMARY KEY (license_id) );

CREATE TABLE registrations ( registration_id varchar(10), registration_date date,

license_id varchar(10) REFERENCES licenses (license_id),

CONSTRAINT registration_key PRIMARY KEY (registration_id, license_id) );

INSERT INTO licenses (license_id, first_name, last_name) VALUES (‘T229901’, ‘Lynn’, ‘Malero’);

INSERT INTO registrations (registration_id, registration_date, license_id) VALUES (‘A203391’, ‘3/17/2017’, ‘T229901’);

INSERT INTO registrations (registration_id, registration_date, license_id) VALUES (‘A75772’, ‘3/17/2017’, ‘T000001’);

Dalam dokumen Structured Query Language SQL (Halaman 87-106)