Saya sedang berupaya mengembangkan basis data relasional yang melacak transaksi yang terjadi pada perangkat yang saya kerjakan untuk perusahaan saya. Ada berbagai jenis transaksi yang dapat terjadi pada perangkat, jadi kami memiliki bidang "trans_type" di salah satu tabel catatan utama kami. Grup saya telah memutuskan untuk membuat jenis bidang ini bilangan bulat dan memperlakukannya sebagai jenis yang disebutkan. Intuisi saya memberi tahu saya bahwa lebih baik menjadikan bidang ini sebagai string agar data basis data kita lebih mudah dibaca dan digunakan. Rekan kerja saya tampaknya khawatir bahwa ini akan menyebabkan lebih banyak masalah daripada nilainya. Perbandingan string itu terlalu mahal dan kemungkinan kesalahan pengetikan terlalu besar.
Jadi, menurut Anda, ketika berhadapan dengan bidang dalam basis data relasional yang pada dasarnya merupakan nilai yang disebutkan, apakah itu keputusan desain yang lebih baik untuk menjadikan bidang ini bilangan bulat atau string? Atau adakah alternatif lain yang saya abaikan?
Catatan: tipe enumerasi eksplisit tidak didukung oleh database yang kami gunakan. Dan perangkat lunak yang kami kembangkan yang akan berinteraksi dengan basis data ini ditulis dalam C ++.
sumber
Jawaban:
Jenis yang disebutkan harus berupa tabel terpisah di basis data Anda yang memiliki nomor id dan nama string dan kolom lain yang mungkin berguna bagi Anda. Kemudian setiap jenis ada sebagai baris dalam tabel ini. Kemudian di meja Anda, Anda mencatat transaksi, bidang "trans_Type" harus menjadi kunci asing ke kunci tabel referensi itu. Ini adalah praktik standar dalam normalisasi basis data.
Dengan cara ini Anda telah menyimpan satu string nama resmi, bisa menggunakan perbandingan angka untuk kinerja, dan memiliki integritas referensial bahwa setiap transaksi memiliki tipe yang valid.
sumber
Praktik yang umum adalah membuat
trans_types
tabel, dan kemudian minta referensi tabel utama Anda dengan nama kunci asingtrans_type_id
. Ini memastikan bahwa catatan Anda hanya akan merujuk jenis enumerasi yang valid.Contoh:
Contoh Data:
sumber
Jika nilai-nilai tersebut datang ke database sebagai bilangan bulat, simpan dengan cara itu. Tidak perlu untuk mengubah konversi menjadi string saat menulis ke database. Anda selalu dapat berhubungan dengan tabel pencarian dengan nilai string / teks (Lebih Normalisasi).
Ini memiliki keuntungan tambahan untuk memperbarui nilai string di satu lokasi daripada menjalankan semacam rutinitas pembaruan. Alih-alih 1 = 'Merah' itu bisa sama dengan 'Sangat Merah'
Ini tidak ideal untuk melaporkan kinerja dibandingkan dengan hanya membutuhkan satu tabel dengan nilai string (Dinormalisasi). Indeks pada bidang ini akan membuat kinerja cukup baik.
Sebagian besar RDBMS akan memungkinkan tenaga kuda yang cukup. Meskipun ide Anda untuk bisa 'membaca' tabel dalam bentuk data biasa, bergabung dengan sebuah tabel bukanlah masalah besar. Biasakan menggunakan tampilan atau objek serupa.
sumber
Saya harus tidak setuju dengan jawaban lain untuk pertanyaan ini yang menganjurkan pendekatan tabel enumerasi terpisah.
Namun, saya tentu saja tidak mengulangi apa yang telah dikatakan, jadi saya hanya akan merujuk pada jawaban yang diterima untuk (kurang lebih) pertanyaan yang sama tentang Stack Overflow: /programming//a/229919 / 114626
sumber