Saya sudah mulai bekerja di organisasi baru dan salah satu pola yang saya lihat di database adalah menduplikasi bidang untuk membuat pertanyaan penulisan lebih mudah bagi analis bisnis. Kami menggunakan Django dan ORM-nya.
Dalam satu kasus, kami menyimpan objek MedicalRecordNumber dengan string unik yang mengidentifikasi pasien dalam konteks tertentu. Kami memiliki objek Registrasi yang melacak pasien dan telah menghubungkan MedicalRecordNumber , tetapi alih-alih menggunakan hubungan kunci asing, mereka menduplikasi string sehingga mereka dapat menghindari penulisan gabungan ( bukan karena alasan kinerja). Pola ini umum di seluruh basis data.
Bagi saya pentingnya model data menjadi bersih hanya supaya saya bisa memikirkannya dengan baik. Kompleksitas yang tidak perlu adalah pemborosan waktu pemrosesan kognitif saya yang terbatas. Ini masalah sistematis. Tidak nyaman menulis bergabung adalah masalah keterampilan yang dapat diperbaiki. Saya tidak selalu ingin menganjurkan kembali dan mengubah skema, tapi saya ingin dapat dengan meyakinkan mengartikulasikan masalah dengan jenis duplikasi ini.
sumber
Jawaban:
Basis data operasional Anda harus sangat dinormalisasi, untuk mengurangi anomali .
Basis data analitik (gudang) Anda harus didenormalisasi tinggi, untuk memudahkan analisis.
Jika Anda tidak memiliki database analitik yang terpisah, Anda harus membuat beberapa pandangan [terwujud] yang sangat terdenormalisasi.
Jika Anda memberi tahu analis / manajer bisnis senior Anda untuk melakukan banyak hal untuk analisis sederhana, Anda mungkin akan dipecat.
Agile Data Warehouse Design adalah buku yang bagus
Lihat kiat gudang data cepat dan kotor saya di sini
sumber
Saya mengerti, mengapa seseorang ingin menghindari penulisan join untuk setiap pilih.
Tetapi Anda dapat membuat tampilan sekali dengan bergabung dan menggunakannya bukan tabel yang tidak dinormalisasi Anda.
Jadi, Anda menggabungkan keunggulan normalisasi dengan kenyamanan pilih yang mudah.
sumber
Jawaban-jawaban yang telah diupgrade cukup banyak mencakup "cara menghindari duplikasi" (menggunakan tampilan) tetapi bukan alasannya. Mereka pada dasarnya menunjukkan bahwa duplikasi kolom adalah solusi yang salah untuk masalah membuatnya lebih mudah untuk menulis kueri. Tetapi pertanyaan "mengapa tidak menduplikasi kolom acak hanya untuk itu?" masih berdiri.
Jawabannya adalah "Karena Hukum Murphy". Hukum Murphy menyatakan bahwa:
Dalam hal ini, konten setiap bidang baris dari kolom duplikat seharusnya identik dengan konten setiap bidang baris yang sesuai dari kolom asli. Apa yang bisa salah, adalah bahwa isi beberapa bidang baris mungkin berbeda dari aslinya, mendatangkan malapetaka. Anda mungkin berpikir bahwa Anda telah mengambil semua tindakan pencegahan yang mungkin untuk memastikan bahwa mereka tidak akan berbeda, tetapi hukum Murphy menyatakan bahwa karena mereka dapat berbeda, mereka akan berbeda. Dan kekacauan akan terjadi.
Sebagai contoh bagaimana ini bisa terjadi, cukup pertimbangkan fakta bahwa kolom yang diduplikasi tidak diisi oleh sihir; seseorang harus benar-benar menulis kode yang menyimpan nilai di dalamnya setiap kali baris dibuat di tabel asli, dan seseorang harus menulis kode yang terus memperbaruinya setiap kali aslinya diubah. Mengesampingkan fakta bahwa ini menambah beban yang tidak semestinya pada kode yang memasukkan data ke dalam basis data, (dan yang, menurut definisi, jauh lebih penting daripada kode apa pun yang hanya menanyakan basis data,) seseorang, di suatu tempat, dalam keadaan tertentu, mungkin lupa untuk melakukan duplikasi ini. Kemudian, nilainya akan berbeda. Atau mereka mungkin ingat untuk melakukan duplikasi, tetapi tidak dalam suatu transaksi, sehingga mungkin, dalam kondisi kesalahan langka tertentu, dihilangkan. Tetapi saya tidak perlu membuang waktu untuk menulis contoh-contoh ini,jika itu bisa salah, itu akan terjadi.
sumber
Memikirkannya dalam hal pengorbanan daripada yang baik / buruk akan lebih produktif. Mereka menjual keuntungan dari normalisasi (khususnya konsistensi) untuk keuntungan dalam kegunaan permintaan.
Pada satu titik ekstrim, basis data akan menjadi tidak berguna jika data menjadi sangat tidak konsisten. Di sisi lain, basis data akan sia-sia jika terlalu sulit bagi orang-orang yang perlu menanyakannya setiap hari untuk mendapatkan hasil yang dapat mereka andalkan.
Apa yang dapat Anda lakukan untuk mengurangi risiko dan biaya?
sumber
Saya pikir argumen terkuat untuk normalisasi data untuk analis bisnis adalah bahwa ia mempromosikan integritas data. Jika data kunci Anda disimpan hanya di satu tempat (satu kolom, dalam satu tabel), kecil kemungkinan data akan rusak oleh pembaruan yang salah. Saya pikir mereka mungkin akan peduli tentang pentingnya integritas data, jadi ini mungkin cara yang baik untuk meyakinkan mereka untuk memperbarui cara mereka berinteraksi dengan database.
Metode kueri yang sedikit lebih sulit kemungkinan akan lebih disukai daripada potensi korupsi data.
sumber
Untuk menambah apa yang disarankan orang lain di atas. Ini adalah masalah tata kelola data. Anda perlu bekerja dengan pemangku kepentingan yang relevan: arsitek data dan pengelola data untuk mengembangkan prinsip-prinsip data, kebijakan dan konvensi penamaan.
Bersabarlah dan bekerja secara metodis. Perubahan tidak akan terjadi dalam semalam.
sumber
Berhenti.
Jujur, Anda dapat menghabiskan berbulan-bulan berdebat tentang normalisasi, konsistensi, dan memerangi bug gila yang disebabkan oleh kemalasan belaka, dan kemudian berhenti.
Atau Anda bisa menghemat waktu, frustrasi, dan berhenti sekarang.
Pemrogram yang baik adalah orang yang sangat malas. Mereka memahami kebutuhan pelanggan dan manajemen. Tetapi yang paling penting mereka memahami bahwa menyelesaikan masalah dengan baik, menggunakan solusi yang dirancang dengan baik, dan diimplementasikan dengan baik menyelamatkan mereka secara pribadi dalam jumlah besar , kerja keras, upaya, dan yang terpenting adalah penderitaan dan stres.
Jadi, Anda akan jauh lebih baik bekerja di tempat yang mengerti dan menghargai rekayasa yang baik.
Semoga berhasil.
Afterthought: Mungkin yang mereka butuhkan adalah alat BI / OLAP ... http://en.wikipedia.org/wiki/Online_analytical_processing
sumber