Apa itu bentuk normal basis data dan dapatkah Anda memberikan contoh? [Tutup]

277

Dalam perancangan basis data relasional, terdapat konsep normalisasi basis data atau sekadar normalisasi, yaitu proses pengorganisasian kolom (atribut) dan tabel (relasi) untuk mengurangi redundansi data dan meningkatkan integritas data. (seperti yang ditulis di Wikipedia ).

Karena sebagian besar artikel agak teknis dan karenanya lebih sulit untuk dipahami, saya meminta seseorang untuk menulis penjelasan yang lebih mudah dimengerti berdasarkan contoh tentang apa arti 1NF, 2NF, 3NF, bahkan 3.5NF (Boyce-Codd).

barfoon
sumber

Jawaban:

435

1NF adalah yang paling dasar dari bentuk normal - setiap sel dalam tabel harus berisi hanya satu informasi, dan tidak boleh ada baris duplikat.

2NF dan 3NF semuanya bergantung pada kunci utama. Ingat bahwa kunci utama dapat terdiri dari beberapa kolom. Seperti yang dikatakan Chris dalam jawabannya:

Data tergantung pada kunci [1NF], seluruh kunci [2NF] dan tidak lain kecuali kunci [3NF] (jadi bantu saya Codd ).

2NF

Katakanlah Anda memiliki tabel yang berisi kursus yang diambil dalam semester tertentu, dan Anda memiliki data berikut:

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

Ini bukan di 2NF , karena kolom keempat tidak bergantung pada seluruh kunci - tetapi hanya sebagian saja. Nama kursus tergantung pada ID Kursus, tetapi tidak ada hubungannya dengan semester yang diambil. Dengan demikian, seperti yang Anda lihat, kami memiliki informasi duplikat - beberapa baris memberitahu kami bahwa IT101 sedang pemrograman, dan IT102 adalah Database. Jadi kami memperbaikinya dengan memindahkan nama kursus ke tabel lain, di mana CourseID adalah kunci SELURUH.

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

Tidak ada redundansi!

3NF

Oke, jadi katakanlah kita juga menambahkan nama guru kursus, dan beberapa detail tentang mereka, ke dalam RDBMS:

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

Mudah-mudahan sekarang jelas bahwa TeacherName tergantung pada TeacherID - jadi ini bukan di 3NF . Untuk memperbaikinya, kami melakukan hal yang sama seperti yang kami lakukan di 2NF - keluarkan bidang TeacherName dari tabel ini, dan letakkan di sendiri, yang memiliki TeacherID sebagai kuncinya.

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

Tidak ada redundansi !!

Satu hal penting untuk diingat adalah bahwa jika sesuatu tidak ada di 1NF, itu juga tidak ada di 2NF atau 3NF. Jadi setiap Formulir Normal tambahan membutuhkan semua yang dimiliki oleh bentuk normal bawah, ditambah beberapa kondisi tambahan, yang semuanya harus dipenuhi.

Menghancurkan
sumber
9
Pikirkan saja dalam hal hubungan antara hal-hal. Jika saya bertanya "apa nama kursus dengan ID IT101?", Anda bisa memberi saya jawaban, kan? Demikian pula, jika saya bertanya kepada Anda "guru apa yang memiliki ID 332?" Anda bisa memberi tahu saya apa itu guru. Dengan demikian, nama program tergantung pada ID-nya.
Smashery
9
Namun, Anda tidak dapat memilih sebaliknya - jika saya bertanya kepada Anda, "Apa itu kartu identitas Jones?" Anda mungkin tidak dapat memberikan jawaban yang unik, karena mungkin ada dua Tn. Jones. Jadi ID tidak tergantung pada nama - itu nama yang tergantung pada ID.
Smashery
2
Anda juga dapat memikirkannya seperti ini - lihat tabel ketiga di bawah (yang pertama dengan TeacherName di dalamnya). Apa yang menghentikan saya memiliki "Tuan Jones" di baris pertama, tetapi kemudian menempatkan "Tuan Bloggs" di baris kedua? Saya seharusnya tidak diizinkan melakukan itu, karena mereka berdua punya ID 332.
Smashery
30
@instantsetsuna - Penjelasan lengkap: Di beberapa pengadilan, seorang saksi ditanyai apakah mereka akan mengatakan "Kebenaran, seluruh kebenaran, dan tidak ada yang lain selain kebenaran, jadi tolonglah aku Tuhan"; karena Tuhan dianggap sebagai orang yang memiliki otoritas ketika harus mengetahui apakah Anda mengatakan yang sebenarnya. Dalam kasus basis data, kita dapat mengatakan "Data tergantung pada kunci, seluruh kunci dan tidak lain kecuali kunci, jadi bantu saya Codd". Ted Codd adalah orang yang mengemukakan gagasan tentang basis data relasional - hal-hal yang bergantung pada kunci, dll., Sehingga ia akan menjadi wewenang untuk pergi dalam kasus basis data relasional.
Smashery
5
@Smashery Apa perbedaan antara 2NF dan 3NF?
Zo Memiliki
119

Saya tidak pernah memiliki memori yang baik untuk kata-kata yang tepat, tetapi di kelas basis data saya, saya pikir profesor selalu mengatakan sesuatu seperti:

Data tergantung pada kunci [1NF], seluruh kunci [2NF] dan tidak lain kecuali kunci [3NF].

Chris Shaffer
sumber
72
... jadi bantu aku Codd. en.wikipedia.org/wiki/Ted_Codd
Smashery
6
Jadi apa bedanya The data depends on the key [1NF], nothing but the key [3NF]? Tolong jangan membingungkan kami, karena 1 jawaban sentense tidak menjelaskan jawabannya tetapi membingungkan pengunjung!
Pratik
2
"Setiap sel dalam sebuah tabel harus hanya berisi satu informasi, dan tidak boleh ada baris duplikat." - Saya tidak melihat bagaimana "Data tergantung pada kunci" cocok dengan semua itu.
Simon Forsberg
46

Berikut ini adalah respons cepat, yang diakui disembelih , tetapi dalam sebuah kalimat:

1NF: Tabel Anda disusun sebagai kumpulan data yang tidak teratur , dan tidak ada kolom berulang.

2NF: Anda tidak mengulangi data dalam satu kolom dari tabel Anda karena kolom lain.

3NF: Setiap kolom di tabel Anda hanya berhubungan dengan kunci tabel Anda - Anda tidak akan memiliki kolom di tabel yang menggambarkan kolom lain di tabel Anda yang bukan kuncinya.

Untuk detail lebih lanjut, lihat wikipedia ...

Dave Markle
sumber
1
Sejauh yang saya tahu, menghindari 1NF dari kelompok berulang tidak mengacu pada kolom berulang, melainkan kolom tunggal yang mewakili jumlah nilai berulang berulang untuk atribut yang sama, yaitu bukan atom. Saya mendasarkan ini pada misalnya (1) stackoverflow.com/questions/23194292/… / (2) stackoverflow.com/questions/26357276/…
underscore_d
34

1NF: Hanya satu nilai per kolom

2NF: Semua kolom bukan kunci utama dalam tabel harus bergantung pada seluruh kunci utama.

3NF: Semua kolom non primary key dalam tabel harus bergantung LANGSUNG pada seluruh primary key.

Saya telah menulis artikel secara lebih rinci di sini

Arcturus
sumber
Karena Anda tidak memberikan atribusi. Saya telah mengedit jawaban untuk memberikan atribusi.
Robert Harvey
Kapan saja memungkinkan, sertakan contoh dalam jawaban itu sendiri. Seorang pengguna biasa harus dapat membaca jawaban Anda dan mendapatkan beberapa nilai darinya tanpa harus mengklik tautan blog. Dengan kata lain, jawabannya harus lengkap.
Robert Harvey
Saya akan mengingatnya. Terima kasih :)
Arcturus
3
Perhatikan juga bahwa pertanyaan ini berumur dua tahun, dan sudah memiliki jawaban yang sangat tervotifikasi yang ditandai sebagai diterima oleh OP. Jawaban yang terlambat diteliti dengan lebih cermat oleh masyarakat untuk menilai apakah mereka menambah nilai asli atau tidak pada OP.
Robert Harvey
3
@Arcturus membaca artikel, masih salah satu penjelasan yang lebih baik untuk normalisasi di luar sana.
Olian04