Praktik Terbaik untuk Mendesain Ulang Basis Data

24

Saya mengetahui beberapa praktik umum umum saat merancang database untuk suatu aplikasi, tetapi bagaimana dengan mendesain ulang?

Saya berada di tim yang ditugaskan untuk mendesain ulang aplikasi bisnis internal, meskipun meskipun saya mengatakan "internal," Saya sayangnya banyak, banyak lapisan orang menjauh dari kontak dengan pengguna sebenarnya dari sistem.

Program saat ini adalah dalam Formulir Oracle, tersebar di banyak tabel non-normal, kadang-kadang dengan beberapa tabel hampir duplikat memegang sedikit varian pada data masing-masing. Kendala sering dalam bentuk prosedur yang disimpan dengan buruk. Bahkan jenisnya sepertinya tidak disimpan dengan benar. Saya telah menemukan segala macam data buruk yang tampaknya diabaikan oleh Oracle tetapi memberikan cocok (dan memang demikian) untuk Wisaya Impor / Ekspor SQL Server. (Misalnya, bilangan bulat dua digit bukan merupakan waktu yang lengkap!)

Program aslinya mungkin sudah ada dua puluh tahun yang lalu, dan semua pengembang asli telah pensiun sejak lama sehingga bahkan orang-orang tua di sini tidak tahu siapa mereka. Akibatnya, tidak ada persyaratan bersih yang harus dilewati - kami hanya harus menggandakan fungsi aplikasi yang ada dan menyimpan data yang ada.

Hasil akhir dari penulisan ulang akan menjadi versi berbasis web yang berjalan di ASP.NET dengan MS SQL Server untuk back end.

Dua rekan tim pengembang saya yang lain jauh, jauh lebih tua dari saya, keduanya dengan latar belakang bisnis / SIM sedangkan saya adalah CS. Pengalaman anggota senior hampir secara eksklusif adalah formulir Oracle dan anggota lainnya sebagian besar telah melakukan pekerjaan aplikasi bisnis di Visual Basic. Meskipun latar belakang basis data saya terbatas pada perancangan basis data baru untuk proyek-proyek di MySQL atau SQLite, sebagian besar untuk kelas sarjana saya, saya tampaknya menjadi satu-satunya yang berpengalaman dalam merancang basis data sama sekali.

Saya sudah menulis sebuah program kecil dalam C # yang membaca semua data yang ada ke format netral, siap untuk dicetak ulang dan ditempatkan ke dalam database baru. Saya berencana untuk menulis kode load-in setelah database tujuan dirancang, sehingga data dapat dibagi dengan benar di tabel dinormalisasi baru, ditambahkan dalam urutan yang benar untuk mengikuti kendala baru, dll. Program yang sama kemudian dapat dijalankan lagi nanti untuk menyalin data produksi ke desain ulang jadi baru benar-benar dikerahkan. Ini meninggalkan desain ulang database yang sebenarnya sebagai hal utama yang harus dicari tahu.

Jadi inti dari pertanyaan saya: apa saja praktik terbaik untuk melakukan pendesainan ulang dari tingkat basis data aplikasi yang ada?

UtopiaLtd
sumber
5
Tanpa sebagian besar tim menjadi akrab dengan teknologi baru, proyek TIDAK akan sukses. Profil teknis saat ini yang dijelaskan tidak sesuai untuk tugas ini.
NoChance
2
Saya setuju dengan Emmad Kareem, Anda kehilangan beberapa keterampilan utama. Kedengarannya seperti tim Anda mungkin kekurangan seseorang yang tahu ASP.NET/C#, desain SQL Server / DB dan desain berorientasi objek pada level yang Anda butuhkan untuk melakukan proyek yang ambisius ini.
jfrankcarr
3
Saya setuju dengan komentar, tetapi tetap, +1 besar karena memiliki keterampilan untuk mengungkapkan masalah Anda dengan jelas, mengakui batas-batas keterampilan Anda dan mencari praktik terbaik. Ini awal.
SRKX

Jawaban:

23

Saya pikir Anda sudah tahu cara menormalkan database.

Yang Anda butuhkan adalah strategi untuk meminimalkan risiko saat memindahkan semua perangkat lunak ke database baru.

Apa yang saya sarankan adalah lebih banyak pekerjaan sebagai trade-off dengan risiko lebih kecil.

Normalisasi database, dan buat proses untuk mengisi database yang dinormalisasi dengan data dari database asli. Basis data asli akan menjadi basis data untuk memasukkan, memperbarui, dan menghapus. Basis data yang dinormalisasi akan menjadi basis data kueri hanya selama konversi.

Proses mengisi Anda harus berjalan sesering kebutuhan untuk data permintaan. Jika data lama hari dapat diterima, Anda dapat menjalankan proses mengisi satu malam. Jika Anda membutuhkan lebih banyak data saat ini, Anda harus menjalankan proses mengisi terus menerus.

Membangun bagian permintaan dari sistem ASP.NET baru Anda, menunjuk ke database dinormalisasi baru.

Hasil kueri dari sistem baru Anda harus dibandingkan dengan hasil kueri dari sistem asli.

Anda bisa berhenti pada titik ini. Itu keputusan bisnis, bukan keputusan teknis.

Pada waktu luang Anda, Anda membuat fungsi sisipkan / perbarui / hapus baru dalam sistem ASP.NET baru Anda. Saat Anda membuat fungsionalitas baru, Anda mematikan bagian-bagian dari sistem asli yang sesuai. Pada titik tertentu, tidak ada sistem asli yang tersisa.

Keuntungan dari konversi dengan cara ini adalah mengurangi risiko dengan membangun bagian permintaan terlebih dahulu. Secara umum fungsi kueri lebih sederhana dibandingkan dengan logika bisnis yang tertanam dalam fungsi insert / update / delete.

Anda mengonversi fungsi sisipkan / perbarui / hapus satu per satu. Jika ada masalah dengan kesalahpahaman logika bisnis, itu bisa diperbaiki saat pengguna Anda menggunakan sistem asli.

Seharusnya tidak perlu dikatakan bahwa proses mengisi Anda lebih baik benar-benar konsisten.

Gilbert Le Blanc
sumber
Posting yang sangat lama saya tahu, tapi kami bermain-main dengan kemungkinan melakukan apa yang Anda sebutkan, namun kami perlu refleksi langsung di "db baru". Kami sedang mempertimbangkan pandangan yang dibangun sebagai representasi dari format normal baru. apakah Anda pikir ini bisa berhasil?
wired00
2

Cobalah meyakinkan mereka untuk mengontrak pengembangan sistem baru ke perusahaan luar, ada banyak perusahaan pengembang yang baik yang memiliki sumber daya untuk mengembangkan aplikasi dengan lebih cepat dan lebih baik daripada tim terbatas Anda. Perusahaan pengembang yang baik juga akan dapat memaksa atasan Anda untuk melakukan hal-hal yang mungkin tidak mereka lakukan jika Anda diminta melakukannya, PM perusahaan dibayar banyak uang untuk mengembangkan aplikasi memiliki lebih banyak daya tarik untuk mendapatkan keterlibatan pengguna daripada orang TI banyak tingkatan di bawah otoritas manajemen untuk mengatur hal-hal seperti itu.

Dibutuhkan banyak uang di muka, tetapi akan membayar banyak waktu untuk memiliki sumber daya yang tepat untuk pengembangan dan implementasi. Jika Anda berhasil mengeluarkan RFP, saya akan bertaruh bahwa tawaran yang Anda dapatkan menunjukkan bahwa apa yang Anda coba lakukan jauh lebih rumit daripada yang disadari manajer Anda.

Ryathal
sumber
+1, untuk mengenali pentingnya memiliki keterampilan yang diinginkan.
NoChance
Sayangnya, kami adalah kontraktornya. Semua programmer di sini. Pimpinan tim kami juga, tetapi di masa lalu bos kami memiliki beragam tingkatan sistem manajemen pelanggan sendiri.
UtopiaLtd
2

Desain database yang dinormalisasi yang Anda butuhkan dengan tipe data yang Anda butuhkan. Kemudian bagian tersulit adalah memigrasikan data. Pertama, Anda harus memiliki rencana bagaimana Anda akan memetakan dari yang lama ke yang baru dan apa yang akan Anda lakukan dengan data yang tidak memenuhi struktur baru. Misalnya Anda mungkin memiliki data yang sekarang tidak dapat diidentifikasi jika Anda tidak memiliki kendala integritas yang tepat. Anda mungkin tidak ingin memindahkan data itu atau Anda mungkin perlu memindahkannya tetapi melampirkannya ke catatan induk baru yang disebut "Tidak Dikenal". Jika kencan tidak benar-benar tanggal nyata, dapatkah Anda menempatkan nol di bidang saat migrasi? Anda akan membutuhkan jawaban untuk pertanyaan-pertanyaan semacam itu. Saya woudl menyarankan bahwa Anda memiliki beberapa pengembang bekerja pada mengubah gui untuk menggunakan struture database baru dan yang lain untuk bekerja secara ketat pada migrasi. Migrasi adalah tugas besar, itu akan membutuhkan banyak keterampilan dan banyak waktu. Jangan biarkan itu sebagai renungan.

Karena Anda menggunakan SQL Server, Anda dapat melakukan migrasi sebenarnya melalui SSIS.

Buat kumpulan uji kasus yang solid sehingga Anda dapat membandingkan hasil dengan sistem lama sama dengan sistem baru.

Karena Anda memiliki data bertahun-tahun, Anda mungkin ingin bermigrasi dalam dua bagian. Pertama memigrasi sebagian besar data dan kemudian ketika saatnya untuk ditayangkan, hanya memigrasikan data yang diubah. Tentu saja Anda perlu menempatkan kontrol pada basis data untuk dapat menemukan data yang berubah yang mungkin belum Anda miliki. Anda juga dapat mempertimbangkan saat ini jika Anda ingin mengarsipkan beberapa data.

HLGEM
sumber
1

Saya dihadapkan dengan perancangan ulang skema database hampir setiap hari karena dukungan dan pengembangan lebih lanjut dari beberapa aplikasi lama yang lahir sebagai file MS Access (.mdb) dan kemudian tumbuh menjadi database besar dengan beberapa ratusan tabel yang sekarang terletak di MS SQL Server tetapi masih memiliki "bayi meninggal" dari desain aslinya. Berikut adalah beberapa praktik yang menurut saya bermanfaat bagi saya:

Cobalah untuk meminimalkan permukaan skema database Anda yang tersedia untuk umum.

Ini berarti Anda harus mencoba merancang beberapa API publik yang Anda sediakan untuk aplikasi eksternal. Saya biasanya mencoba menerapkan data statis sebagai tampilan (bahkan jika mereka hanya didasarkan pada satu tabel) dan data dinamis sebagai tampilan parameter atau sebagai prosedur tersimpan. Untuk kueri data di mana hanya satu nilai saja cukup satu juga dapat menggunakan fungsi skalar.

Hanya ini (tampilan, prosedur tersimpan dan fungsi skalar) yang terlihat oleh aplikasi eksternal (melalui ORM atau langsung) dan digunakan untuk semua operasi CRUD. Skema ini kemudian dibekukan sepenuhnya, sedangkan secara internal Anda dapat mengubah tabel yang mendasarinya, meningkatkan prosedur Anda dll. - ini tidak akan merusak kompatibilitas ke aplikasi Anda.

Cobalah untuk mengoptimalkan untuk kriteria dunia nyata, bukan untuk mereka yang dari buku.

Normalisasi adalah topik besar dalam setiap buku tentang desain basis data. Tetapi dalam kehidupan nyata ada kasus-kasus di mana normalisasi tidak akan membawa Anda banyak atau bahkan memperlambat database Anda, misalnya jika Anda memiliki beberapa data yang diulang, tetapi persentase pengulangan sangat rendah dll. Saya tidak menentang normalisasi, apa yang ingin saya katakan di sini adalah bahwa Anda harus menghadapinya dengan skeptis dan bijaksana.

Rekam sesi pembuatan profil dan analisis mereka.

Perancangan ulang basis data hanya berdasarkan pada skema basis data tidak lengkap. Lihatlah basis data Anda dalam dinamikanya, cobalah untuk menemukan kemacetan selama tes beban dan atasi itu. Dalam kasus MS SQL Server ada Penasihat Tuning khusus yang dapat menghasilkan beberapa rekomendasi pada jejak aktivitas yang direkam.

Alexander Galkin
sumber
0

Inilah jawaban saya:

  1. Pertama, pahami sistem basis data saat ini sebanyak yang Anda bisa. Anda harus mengetahui semua kegunaan sistem ini serta pengguna. Anda perlu mengetahui semua sumber ke sistem serta sistem yang mungkin digunakan sebagai sistem sumber mereka.

  2. Anda perlu mengidentifikasi semua kegunaan yang berbeda dari sistem, apakah itu untuk operasional atau pelaporan atau keduanya. Identifikasi aplikasi dan sistem hulu yang mungkin menggunakan database. Dengan melakukan itu, Anda akan mengetahui elemen-elemen dari basis data saat ini yang sudah usang dan tidak diperlukan lagi.

  3. Juga menganalisis dan memahami proses ETL saat ini yang memuat data ke database dan mengekstrak data dari database.

  4. Memahami semua elemen data dari database dan jika Anda dapat membangun sebuah kotak matriks yang dapat membantu Anda mengidentifikasi elemen duplikat.

  5. Setelah memperoleh semua informasi, Anda dapat mendekati pendesainan ulang seolah-olah Anda merancang basis data untuk pertama kalinya dengan informasi yang telah Anda kumpulkan sebagai bagian dari pengumpulan kebutuhan Anda.

  6. Semoga berhasil!

Agustinus
sumber