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

Apakah tabel saya membutuhkan lebih banyak normalisasi?

Normalisasi membutuhkan pengetahuan dependensi fungsional (FD) dan dependensi gabungan (FD). Anda tidak memberikannya.

Aplikasi Anda Kami hanya dapat memberi tahu Anda FD dan JD jika kami tahu persis apa itu "hubungan yang ingin saya ungkapkan" (yaitu predikat) untuk setiap tabel (yaitu sampai pada titik di mana kami dapat melihat situasi dan mengetahui setiap baris yang mungkin apakah itu membuat proposisi yang benar dari predikat dan termasuk dalam tabel) dan situasi apa yang mungkin muncul (melalui "aturan bisnis" tentang kemungkinan situasi aplikasi, setara dengan kendala pada kemungkinan status basis data).

"Kunci" Anda Anda tidak memberikan FD. Anda hanya memberikan satu kunci kandidat (CK) dan "kunci unik". Tetapi Anda tidak dapat menentukan beberapa atau semua CK tanpa mengetahui hal-hal tertentu tentang FD. Jadi ketika Anda memberikan CK itu sama saja dengan mengatakan ada dan tidak ada FD tertentu. Anda perlu memberi tahu kami apa yang telah Anda berikan kepada kami ketika Anda memberikan beberapa set kolom berlabel PK atau "kunci unik":Apakah "kunci unik" adalah CK (tidak mengandung subset unik yang lebih kecil) atau hanya superkey (unik)? Apakah Anda memberikan semua CK atau mungkinkah ada yang lain? Mungkinkah ada superkey lain selain superset yang diberikan? Akan sangat membantu jika Anda memberi tahu kami dengan tepat FD mana yang Anda tahu memegang (melalui sampul minimal) dan mana yang Anda tahu tidak.

Tebakan
Saya tidak tahu apa is_calculated adalah untuk.
Mungkin suatu date dan meal pasangan memiliki tepat satu content ?

TL;DR Anda benar-benar perlu memeriksa setiap kumpulan kolom yang memungkinkan untuk melihat apakah kolom tersebut secara fungsional menentukan satu sama lain. Yaitu apakah untuk setiap database menyatakan subbaris nilai untuk kumpulan kolom hanya muncul dengan satu nilai untuk kolom. Kami hanya bisa menebak tanpa pemahaman yang jelas tentang predikat dan aplikasi Anda. Anda dapat mengurangi pekerjaan dengan hal berikut:Jika satu set kolom unik maka supersetnya menentukan semua kolom lainnya. Jika satu set kolom unik minimal (adalah CK) maka tidak ada subset yang lebih kecil yang menentukan semua kolom lainnya. Anda dapat mencari contoh tandingan untuk FD diduga, di mana dua baris dapat memiliki subbaris nilai yang sama untuk determinan yang diduga tetapi memiliki nilai yang berbeda untuk atribut yang ditentukan diduga. Aksioma Armstrong menghasilkan semua FD yang tersirat oleh yang diberikan.

JD Normalisasi ke 4NF dan 5NF melibatkan pemisahan tabel menjadi beberapa tabel untuk menghilangkan JD yang tidak tersirat oleh CK. Predikat tabel dapat diekspresikan sebagai AND dari yang lain persis ketika JD memegang sesuai dengan set kolom predikat. Suatu relasi berada dalam 5NF ketika setiap konjungsi di setiap JD tumpang tindih dengan konjung lainnya setidaknya pada CK. (Algoritme keanggotaan Fagin.)

PS Jika Anda peduli dengan batasan, apakah Anda kehilangan satu saat berpindah dari satu meja ke dua meja?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengatur Ulang Kata Sandi Root MySQL

  2. MySQL - Kunci asing yang unik

  3. MySQL:kueri efisien pada kolom yang terlalu panjang untuk diindeks

  4. Bagaimana cara memeriksa apakah dua rentang tanggal tumpang tindih di mysql?

  5. Cara menggunakan klausa suka di Pernyataan MySQL 5.0