Database (chuẩn hóa CSDL)
Database: chuẩn hóa cơ sở dữ liệu.
Thiết kế CSDL là 1 phần rất quan trọng trước khi bắt tay vào việc phát triển ứng dụng . Nếu CSDL được thiết kế tốt thì sẽ giảm thiểu rất nhiều thời gian trong quá trình phát triển phát sinh thiếu sót của DB cần đạp DB làm lại.
và để tối ưu csdl thì ta nên tuần theo 1 chuẩn của cộng đồng đã đưa ra.
- [Chỉ Giảm] thiếu dư thừa dữ liệu (vd : để cùng 1 tên sv 2 dòng chỉ có khác nhau mỗi tên môn học và điểm ) => dư thừa vì các cột thông tin khác đều giống nhau
- Dữ liệu không nhất quán => như ví dụ trên khi ta muốn cập nhật thông tin 1 dòng mà quên không cập nhật các dòng thông tin của bạn sinh viên đó còn lại dẫn tới thông tin sv các dòng ko nhất quán trong khi cùng là 1 sinh viên đó.
- Khó cập nhật và truy xuất dữ liệu
=> ví dụ 1 cột có tận 2-3 data ( môn học : sv A=>Cột môn học (toán, Anh) =>Cột điểm (9,10)
vậy thì rất khó để cập nhật dư liệu và thao tác với nó .
Chuẩn hóa là quá trình tách bảng thành các bảng nhỏ hơn dựa vào các phụ thuốc hàm . Các dạng chuẩn là các chỉ dẫn để thiết kế các bảng trong CSDL.
- Mục đích của chuẩn hóa :
loại bỏ các dư thừa dữ liệu . Nhưng chuẩn hóa làm tăng thời gian truy vấn vì tách bảng lên cần truy vấn từ nhiều bảng với nhau mới cho ra kết quả mong muốn thay vì 1 mảng như trước khi chuẩn hóa .
có 4 dạng chuẩn hóa cơ bản :
1/ 1 NF ( First normal form) =>loại bỏ các thuộc tính đa trị
2/2NF => Loại bỏ các phụ thuộc bộ phận
3/3NF => Loại bỏ các phụ thuộc gián tiếp
4/BCNF(Boyce-codd Normal Form) =>Chỉ còn các phụ thuốc X -> A mà X là khóa .
1/1NF
- Các thuộc tính (column) phải là nguyên tố và không chưa giá trị phức (giá trị trong cột bị phức tạp vd : cột môn học ( giá trị toán, văn, anh) => rất phức tạp.
-Giá trị của các thuộc tính trên các hàng phải là đơn trị, không chưa nhóm lặp
=> Nghĩa là trong 1 bảng 2 hoặc nhiều hàng giá trị không nên bị lặp lại .
=> 2 record sinh viên các cột giá trị giống nhau mà khác mỗi môn học và điểm => Sai
-Không có một thuộc tính nào có giá trị có thể tính toán được từ một thuộc tính khác
=> vd : không thể có cột tổng tiển = số đơn * giá tiền (vì cột tổng tiền có thể tính toán được từ 2 cột số đơn và cột giá tiền => dẫn tới dư thừa dữ liệu
2/ 2NF.
- Phải đạt dạng 1NF
-Các trường thuộc tính không phải là khóa chính, phải phụ thuộc hoàn toàn vào khóa chính. - Không được phép phụ thuộc vào 1 phần của khóa chính.
vd:Bảng kết quả thi (vd : khóa chính bảng A : được kết hợp từ Mã SV và tên môn học để làm khóa chính )=> sai
=> vd : bảng kết quả thi chỉ có tên sv chỉ phục thuốc vào Mã SV không phụ thuốc vào mã môn học
+ tên môn học cũng chỉ phụ thuộc vào mã môn học không phụ thuốc vào Mã SV
Vì vậy sai . kết quả ta có thể tạo ra bảng gồm Mã SV và Mã môn học là khóa chính và chỉ có thêm cột điểm ( => cột điểm phụ thuộc hoàn toàn vào khóa chính được tạo bởi : Mã SV và Mã môn học"
3/ 3NF
- Phải đạt dạng 2NF
- Các trường thuộc tính không phải là khóa chính, phải phụ thuộc trực tiếp vào khóa chính . Không được phép phụ thuộc bắc cầu thông qua thuộc tính khác .
vd : Bảng sinh viên - Có Mã SV học tên Mã lớp , Tên lớp , sĩ số ...v..v khóa chính là Mã SV
- NHưng Tên lớp và sĩ số lớp lại phụ thuộc bắc cầu thông qua Mã lớp
4/ Boyce-Codd
- Phải đạt chuẩn 3NF
-Không có thuộc tính khóa nào phụ thuộc vào thuộc tính không khóa .
B1: Loại bỏ các thuộc tính phụ thuốc vào thuộc tính không phải là khóa .
B2 : Tách thuộc tính vừa loại bỏ thành một quan hệ riêng có khóa chính là thuộc tính không phải là khóa của B1.
Ref: