Menghapus Kolom dari Tabel dalam Produksi

8

Kami memiliki situasi di mana kami perlu mengubah hubungan antara 2 tabel dari m: 1 ke m: n .

Jadi, kita perlu membuat tabel referensi silang di antara kedua tabel itu.

Setelah memigrasikan semua data yang ada dari tabel "child" ke tabel referensi silang, apakah itu ide yang buruk untuk menghapus kolom kunci asing asli di tabel child?

Jika kita membiarkannya di sana, pada dasarnya kita memiliki hutang teknis. Tapi saya bukan dba dan tidak memiliki pemahaman yang baik tentang implikasi menghapus kolom dari tabel. (Saya tahu itu mungkin, tetapi apakah itu ide yang buruk? Apakah basis data saya membenci saya karenanya?)

Terima kasih

onefootswill
sumber

Jawaban:

5

Tanpa mengetahui semua struktur meja Anda, saya terbatas dalam saran saya. Namun, tidak, basis data Anda tidak akan merencanakan kematian Anda jika Anda menghapus kolom dalam keadaan berikut (tidak berarti lengkap):

  1. Anda masih menggunakan kunci basis data untuk memetakan dimensi Anda.
  2. Indeks baru Anda pada tabel Dimensi baru ini dengan benar mencakup indeks kapan seharusnya.
  3. Anda mengelola jumlah indeks ini agar tidak terlalu membebani Sisipan / Pembaruan

Desain baru Anda memiliki Tabel Dua Dimensi dan tabel Fakta

  • Inilah mengapa ia beralih dari m: 1 ke m: n dengan tabel "referensi silang". Kami menyebutnya dimensi lain.

Desain sebenarnya menerapkan Normalisasi untuk mencapai ini

  • Dengan menghapus ketergantungan, tim Anda akan lebih siap untuk mengambil Fakta yang dapat mengubah cara data Anda diproses dengan cara yang lebih bermakna.

Catatan tentang Dimensi dan Fakta

  • Dimensi untuk Konteks Deskriptif

Dimensi memberikan konteks "siapa, apa, di mana, kapan, mengapa, dan bagaimana" seputar peristiwa proses bisnis. Tabel dimensi berisi atribut deskriptif yang digunakan oleh aplikasi BI untuk memfilter dan mengelompokkan fakta. Dengan mengingat tabel fakta dengan kuat, semua dimensi yang mungkin dapat diidentifikasi.

Kapan pun memungkinkan, dimensi harus bernilai tunggal jika dikaitkan dengan baris fakta yang diberikan . Tabel dimensi kadang-kadang disebut "jiwa" dari gudang data karena memuat titik masuk dan label deskriptif yang memungkinkan sistem DW / BI dimanfaatkan untuk analisis bisnis. Sejumlah upaya yang tidak proporsional dimasukkan ke dalam tata kelola data dan pengembangan tabel dimensi karena mereka adalah pendorong pengalaman pengguna BI.

  • Fakta untuk Pengukuran

Fakta adalah ukuran yang dihasilkan dari peristiwa proses bisnis dan hampir selalu numerik. Baris tabel fakta tunggal memiliki hubungan satu-ke-satu dengan peristiwa pengukuran seperti yang dijelaskan oleh butir tabel fakta . Dengan demikian tabel fakta berhubungan dengan peristiwa yang dapat diamati secara fisik, dan tidak sesuai dengan tuntutan laporan tertentu . Dalam tabel fakta, hanya fakta yang konsisten dengan butir yang dinyatakan yang diizinkan . Misalnya, dalam transaksi penjualan eceran, jumlah produk yang dijual dan harganya yang diperpanjang adalah fakta yang baik, sedangkan gaji manajer toko tidak diizinkan.

Teknik Pemodelan Dimensi Kimball

Saran saya adalah tim desain harus tahu bahwa menegakkan aturan dalam database adalah yang terbaik, kecuali jika itu mengganggu kinerja. Saya tidak tahu ukuran atau kuantifikasi pernyataan DDL Anda untuk sepenuhnya menjawab ini.

Tapi yakinlah ini harus menjadi perubahan positif untuk sistem Anda karena sekarang SQL Server tidak harus melalui semua data ekstra untuk mengambil apa yang sebenarnya penting.

clifton_h
sumber
Terima kasih atas jawaban komprehensifnya. Baik untuk mengetahui bahwa basis data akan dapat menanganinya. Sepertinya operasi yang jauh lebih traumatis yang menghapus baris. Saya akan memiliki indeks dll di garis depan pikiran saya ketika merencanakan skrip untuk membuat perubahan ini. Kami tentu saja akan memiliki cadangan dan strategi rollback.
onefootswill
5

Saya tahu itu mungkin, tetapi apakah itu ide yang buruk? Apakah basis data saya membenci saya karenanya?

Saya tidak dapat berbicara untuk basis data Anda, tetapi saya akan membenci Anda karenanya :-)

Kolom lawas akan berisi data yang berlebihan setelah perubahan. Ini dapat menghasilkan data yang bertentangan jika kolom lama dan tabel xref baru tidak dipelihara secara konsisten satu sama lain. Pertimbangkan pengembang yang tidak terbiasa dengan hutang teknis dapat secara logis merusak database.

Saya sulit sekali memikirkan alasan mengapa seseorang tidak harus menghapus kolom warisan dan hubungan. Itu juga akan memastikan semua kode dependen diubah dengan benar.

Dan Guzman
sumber