Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Praktik/panduan yang ada untuk pembuatan tabel yang tidak dinormalisasi selama proses normalisasi?

TL;DR Anda harus mengikuti algoritme yang dipublikasikan untuk menguraikan ke bentuk normal yang diberikan.

PS Anda tidak mendapatkan Artis dari CD asli melalui normalisasi, karena Anda memperkenalkan kolom baru. Tapi anggap tabel Artis memiliki arti yang jelas. Mengapa menurut Anda "sekali lagi tidak dalam bentuk normal ketiga sejauh yang saya pahami"? Jika artis -> tahun di CD asli maka itu juga di Artis. Tapi kemudian {artist}, dengan {artist_id}, adalah CK (candidate key) Artis, dan Artis ada di 3NF (dan 5NF).

Dari versi asli pertanyaan Anda ditambah yang sekarang, Anda memiliki CD tabel dasar yang diusulkan dengan kolom cd_id, judul, grup &tahun, memegang tupel di mana cd cd_id berjudul judul dibuat oleh grup grup yang terbentuk pada tahun tahun . Kolom cd_id unik, maka merupakan CK. FD {group} -> tahun juga berlaku.

Normalisasi tidak memperkenalkan nama kolom baru. Ini menggantikan tabel dasar yang diusulkan oleh orang lain, masing-masing dengan subset kolom yang lebih kecil, yang selalu bergabung dengan nilainya. Normalisasi hingga BCNF didasarkan pada FD (dependensi fungsional), yang juga menentukan CK dari tabel dasar. Jadi pertanyaan Anda tidak mengandung dekomposisi. Kemungkinan penguraian yang mengingatkan pada pertanyaan Anda, yang mungkin atau mungkin tidak memiliki properti tertentu, adalah pada tabel dengan kumpulan kolom {cd_id, title, group} dan {group, year}.

FD lain tetap dalam aslinya. Beberapa bertahan karena apa kolomnya; ada yang bertahan karena CK; beberapa ditahan karena {group} -> penangguhan tahun; secara umum, yang tertentu berlaku karena ketiganya melakukannya. Dan mungkin yang lain bertahan karena tupel apa yang seharusnya masuk ke dalam relasi dan situasi apa yang bisa muncul. Anda harus memutuskan untuk setiap kemungkinan FD apakah itu berlaku.

Tentu saja, Anda mungkin telah diberitahu bahwa satu-satunya yang memegang adalah orang-orang yang harus bertahan dalam keadaan seperti itu. Tapi Anda tidak akan telah diberitahu bahwa satu-satunya FD yang berlaku adalah {group} -> tahun, karena ada FD sepele dan setiap superset dari CK secara fungsional menentukan setiap set kolom .

Salah satu definisi 3NF adalah bahwa suatu relasi berada dalam 2NF dan tidak ada kolom nonprima yang bergantung secara fungsional secara transitif pada CK mana pun. (Perhatikan setiap kondisi melibatkan definisi lain.) Jika Anda ingin menggunakan ini untuk mengetahui apakah relasi Anda dalam 3NF, selanjutnya Anda perlu mencari tahu apa semua CK adalah. Anda dapat melakukan ini tercepat melalui algoritme yang sesuai, tetapi Anda hanya dapat melihat kumpulan kolom mana yang secara fungsional menentukan setiap kolom tetapi tidak berisi kumpulan yang lebih kecil, karena itu adalah CK. Kemudian periksa dua kondisi dalam definisi.

Jika Anda ingin menormalkan ke 3NF maka Anda harus mengikuti algoritma untuk menguraikan ke 3NF. Anda tidak menjelaskan proses apa yang menurut Anda harus Anda ikuti. Tetapi jika Anda tidak mengikuti algoritme yang telah terbukti maka komponen apa pun yang Anda pilih mungkin atau mungkin tidak selalu bergabung dengan aslinya dan mungkin atau mungkin tidak masing-masing berada dalam bentuk normal tertentu yang lebih tinggi. Perhatikan bahwa contoh dekomposisi Anda telah melihat bukan presentasi dari algoritma dekomposisi .

Definisi NF (bentuk normal) memberikan kondisi yang harus dipenuhi oleh suatu relasi untuk berada dalam NF tersebut. Mereka tidak memberi tahu Anda cara mendekomposisi nonloss (mempertahankan FD bila memungkinkan) ke relasi di NF yang lebih tinggi. Orang-orang telah mengerjakan algoritme untuk menghasilkan dekomposisi ke NF tertentu. (Dan penguraian ke NF tertentu pada umumnya tidak melibatkan dekomposisi pertama ke NF yang lebih rendah. Melewati NF yang lebih rendah sebenarnya dapat mencegah dekomposisi NF tinggi yang baik dari yang asli dihasilkan ketika Anda melakukan penguraian per NF yang lebih tinggi.)

Anda mungkin juga tidak menyadari bahwa ketika beberapa FD bertahan, beberapa FD tertentu lainnya harus bertahan. Yang terakhir dapat ditentukan melalui aksioma Armstrong dari yang pertama. Jadi hanya karena Anda melakukan dekomposisi untuk menyingkirkan FD tertentu yang kehadirannya melanggar NF tertentu tidak berarti tidak ada banyak FD lain yang melanggarnya yang tidak Anda tangani. Mereka dapat hadir dalam komponen baru. Atau mereka tidak dapat hadir dengan cara yang bermasalah, sehingga Anda tidak "melestarikan" mereka ketika Anda bisa, yang mengarah ke desain yang buruk.

Pelajari tentang algoritma NF tertentu, dan dalam hal ini NF dan normalisasi itu sendiri, dalam buku teks/kursus/presentasi perguruan tinggi/universitas. Banyak yang online.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL bergabung dengan hasil, atur hasil yang dihapus selama IN () di klausa mana?

  2. hitung jumlah total semua angka dalam kolom

  3. Bagaimana saya bisa menggunakan Conda untuk menginstal MySQLdb?

  4. PEMBATASAN MySQL dan TANPA TINDAKAN

  5. Bisakah Anda menempatkan placeholder di bagian kueri tertentu menggunakan PDO?