Tabel pencarian (atau tabel kode , seperti beberapa orang menyebutnya) biasanya merupakan kumpulan nilai yang mungkin diberikan untuk kolom tertentu.
Misalnya, kita memiliki tabel pencarian yang dipanggil party
(dimaksudkan untuk menyimpan informasi tentang partai politik) yang memiliki dua kolom:
party_code_idn
, yang memegang nilai numerik yang dihasilkan sistem, dan (tidak memiliki makna domain bisnis ) berfungsi sebagai pengganti untuk kunci asli.party_code
, adalah kunci nyata atau “alami” dari tabel karena mempertahankan nilai yang memiliki konotasi domain bisnis .
Dan mari kita katakan bahwa tabel tersebut menyimpan data yang berikut:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
The party_code
kolom, yang menjaga nilai-nilai 'Republik' dan 'Demokrat', menjadi kunci nyata dari meja, diatur dengan kendala UNIK, tapi saya opsional menambahkan party_code_idn
dan didefinisikan sebagai PK dari tabel (meskipun, secara logis berbicara , party_code
dapat berfungsi sebagai KUNCI UTAMA [PK]).
Pertanyaan
Apa praktik terbaik untuk menunjuk ke nilai pencarian dari tabel transaksi ? Haruskah saya membuat referensi FOREIGN KEY (FK) baik (a) langsung ke nilai alami dan bermakna atau (b) untuk nilai pengganti?
Opsi (a) , misalnya,
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
memiliki sifat-sifat berikut 1 :
- Dapat dibaca untuk pengguna akhir (+)
- Mudah untuk mengekspor-impor lintas sistem (+)
- Sulit untuk mengubah nilai karena perlu modifikasi di semua tabel referensi (-)
- Menambahkan nilai baru tidak mahal (=)
Saya pikir itu hampir seperti " lewat nilai ", untuk menarik analogi dari panggilan fungsi dalam jargon pemrograman aplikasi.
Opsi (b) , misalnya,
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
memiliki sifat di bawah ini:
- Tidak dapat dibaca untuk pengguna akhir (-)
- Sulit untuk mengimpor-ekspor karena kita perlu melakukan de-referensi (-)
- Mudah untuk mengubah nilai, karena kami hanya menyimpan referensi dalam tabel transaksi (+)
- Menambahkan nilai baru tidak mahal (=)
Ini sangat mirip dengan " pass by reference ", jika membandingkan dengan panggilan fungsi dalam bahasa pemrograman aplikasi.
Impor-Ekspor juga dapat dilakukan dengan cara yang berbeda, yaitu hanya dengan mengisi tabel pencarian lagi dan kemudian menabur kembali kolom pengganti. Saya harap saya mendapatkan ini dengan benar, ini adalah sesuatu yang baru saja saya dengar sebagai suatu kemungkinan.
1. Catat itu +
, -
dan =
tunjukkan manfaat dari properti tersebut.
Pertanyaan
Cukup penting: Apakah ada perbedaan antara tabel pencarian (atau kode ) dan referensi FK jika kita hanya akan menggunakan pendekatan yang terakhir? Saya pikir mereka bekerja sama saja.
FOREIGN KEY
dalam tabel lain, itu bisa menjadi sangat berantakan tapi YMMV.UNIQUE CONSTRAINT
s danNOT NULL
s - well, entri Tabel Kode Anda adaFOREIGN KEY
dalam tabel yang menggunakan / merujuk padanya - sehingga konsep-konsepnya terkait, tetapi tidak sama. Kunci pengganti dari Tabel Kode adalah bidang yang muncul di tabel "anak" - tentu saja kurang dapat dibaca, tetapiINT
tidak terlalu besar - tidak banyak ruang yang dibutuhkan yang merupakan keuntungan dari kunci pengganti.Ada pendekatan ketiga yang memiliki beberapa kelebihan dari dua opsi Anda - letakkan kode aktual di tabel kode. Maksud saya urutan karakter pendek yang menangkap esensi dari nilai penuh dan unik. Untuk contoh yang Anda berikan mungkin
Kode dibawa ke dalam tabel transaksional sebagai kunci asing. Ini pendek, dapat dipahami dan agak independen dari data "nyata". Perubahan tambahan pada nama tidak akan menyarankan perubahan kode. Namun, jika Partai Republik mendeklarasikan secara massal , perubahan kode mungkin diperlukan, dengan masalah yang menyertainya yang tidak akan terjadi.
Gaya ini disebut pengkodean singkatan. Saya dapat merekomendasikan tulisan Celko tentang ini. Buku-buku Google memuat beberapa contoh. Cari "pengkodean Celko".
Contoh lain: penyandian 2 atau 3 huruf untuk negara, penyandian 3 huruf (GBP, USD, EUR) untuk kode mata uang. Singkat, menjelaskan sendiri dan tidak berubah (dan ada ISO untuk mereka).
sumber