DBMS - Chuẩn hóa
Sự phụ thuộc chức năng
Phụ thuộc hàm (FD) là một tập hợp các ràng buộc giữa hai thuộc tính trong một quan hệ. Phụ thuộc hàm nói rằng nếu hai bộ giá trị có cùng giá trị cho các thuộc tính A1, A2, ..., An, thì hai bộ giá trị đó phải có cùng giá trị cho các thuộc tính B1, B2, ..., Bn.
Phụ thuộc hàm được biểu diễn bằng dấu mũi tên (→), nghĩa là X → Y, trong đó X xác định về mặt chức năng Y. Các thuộc tính bên trái xác định giá trị của các thuộc tính ở bên phải.
Tiên đề của Armstrong
Nếu F là một tập các phụ thuộc hàm thì việc đóng F, được ký hiệu là F + , là tập tất cả các phụ thuộc hàm được ngụ ý một cách logic bởi F. Tiên đề của Armstrong là một tập các quy tắc, khi được áp dụng nhiều lần, sẽ tạo ra một đóng các phụ thuộc hàm .
Reflexive rule - Nếu alpha là một tập hợp các thuộc tính và beta is_subset_of alpha, thì alpha giữ beta.
Augmentation rule- Nếu a → b giữ và y là tập thuộc tính thì ay → by cũng giữ. Đó là thêm các thuộc tính trong phụ thuộc, không thay đổi các phụ thuộc cơ bản.
Transitivity rule- Tương tự như quy tắc bắc cầu trong đại số, nếu a → b giữ và b → c giữ thì a → c cũng giữ. a → b được gọi là một hàm xác định b.
Phụ thuộc chức năng tầm thường
Trivial- Nếu một phụ thuộc hàm (FD) X → Y giữ, trong đó Y là một tập con của X, thì nó được gọi là FD tầm thường. Các FD tầm thường luôn giữ vững.
Non-trivial - Nếu FD X → Y giữ, trong đó Y không phải là tập con của X, thì nó được gọi là FD không tầm thường.
Completely non-trivial - Nếu một FD X → Y giữ, trong đó x cắt Y = Φ, nó được cho là một FD hoàn toàn không tầm thường.
Bình thường hóa
Nếu một thiết kế cơ sở dữ liệu không hoàn hảo, nó có thể chứa những điểm bất thường, giống như một giấc mơ tồi tệ đối với bất kỳ quản trị viên cơ sở dữ liệu nào. Quản lý một cơ sở dữ liệu có sự bất thường tiếp theo là điều không thể.
Update anomalies- Nếu các mục dữ liệu nằm rải rác và không được liên kết với nhau đúng cách thì có thể dẫn đến các tình huống lạ. Ví dụ: khi chúng tôi cố gắng cập nhật một mục dữ liệu có các bản sao của nó nằm rải rác ở một số nơi, một số bản sao được cập nhật đúng cách trong khi một số bản sao khác bị giữ lại với các giá trị cũ. Những trường hợp như vậy khiến cơ sở dữ liệu ở trạng thái không nhất quán.
Deletion anomalies - Chúng tôi đã cố gắng xóa một bản ghi, nhưng một phần của nó vẫn chưa được xóa do không biết, dữ liệu cũng được lưu ở một nơi khác.
Insert anomalies - Chúng tôi đã cố gắng chèn dữ liệu vào một bản ghi hoàn toàn không tồn tại.
Chuẩn hóa là một phương pháp để loại bỏ tất cả các dị thường này và đưa cơ sở dữ liệu về trạng thái nhất quán.
Dạng bình thường đầu tiên
Dạng chuẩn đầu tiên được định nghĩa trong chính định nghĩa của các quan hệ (bảng). Quy tắc này xác định rằng tất cả các thuộc tính trong một quan hệ phải có miền nguyên tử. Các giá trị trong miền nguyên tử là các đơn vị không thể phân chia.
Chúng tôi sắp xếp lại quan hệ (bảng) như bên dưới, để chuyển nó thành Dạng chuẩn đầu tiên.
Mỗi thuộc tính chỉ được chứa một giá trị duy nhất từ miền được xác định trước của nó.
Dạng thông thường thứ hai
Trước khi tìm hiểu về dạng chuẩn thứ hai, chúng ta cần hiểu những điều sau:
Prime attribute - Một thuộc tính, là một phần của khóa ứng viên, được gọi là thuộc tính nguyên tố.
Non-prime attribute - Một thuộc tính, không phải là một phần của khóa nguyên tố, được cho là một thuộc tính không phải nguyên tố.
Nếu chúng ta tuân theo dạng chuẩn thứ hai, thì mọi thuộc tính không phải nguyên tố phải phụ thuộc đầy đủ về mặt chức năng vào thuộc tính khóa nguyên tố. Nghĩa là, nếu X → A đúng, thì sẽ không có bất kỳ tập con Y nào đúng của X, mà Y → A cũng đúng.
Chúng ta thấy ở đây trong quan hệ Student_Project rằng các thuộc tính khóa chính là Stu_ID và Proj_ID. Theo quy tắc, các thuộc tính không phải khóa, tức là Stu_Name và Proj_Name phải phụ thuộc vào cả hai và không phụ thuộc vào bất kỳ thuộc tính khóa nguyên tố nào riêng lẻ. Nhưng chúng tôi thấy rằng Stu_Name có thể được xác định bởi Stu_ID và Proj_Name có thể được nhận dạng bởi Proj_ID một cách độc lập. Đây được gọi làpartial dependency, không được phép ở Dạng chuẩn thứ hai.
Chúng tôi đã phá vỡ mối quan hệ làm hai như được mô tả trong hình trên. Vì vậy không tồn tại sự phụ thuộc từng phần.
Dạng thông thường thứ ba
Đối với một quan hệ ở dạng Chuẩn thứ ba, nó phải ở dạng Chuẩn thứ hai và những điều sau đây phải thỏa mãn:
- Không có thuộc tính không nguyên tố nào phụ thuộc chuyển tiếp vào thuộc tính khóa nguyên tố.
- Đối với bất kỳ phụ thuộc hàm không tầm thường nào, X → A, thì -
-
X là một siêu khóa hoặc,
- A là thuộc tính nguyên tố.
Chúng ta thấy rằng trong quan hệ Student_detail ở trên, Stu_ID là thuộc tính khóa nguyên tố và duy nhất. Chúng tôi thấy rằng Thành phố có thể được xác định bởi Stu_ID cũng như chính Zip. Zip không phải là superkey hay City cũng không phải là thuộc tính nguyên tố. Ngoài ra, Stu_ID → Zip → City, vì vậy tồn tạitransitive dependency.
Để đưa quan hệ này về dạng chuẩn thứ ba, chúng ta chia quan hệ thành hai quan hệ như sau:
Boyce-Codd Dạng bình thường
Boyce-Codd Biểu mẫu thông thường (BCNF) là một phần mở rộng của Biểu mẫu thông thường thứ ba theo các điều khoản nghiêm ngặt. BCNF tuyên bố rằng -
- Đối với bất kỳ phụ thuộc hàm không tầm thường nào, X → A, X phải là siêu khóa.
Trong hình trên, Stu_ID là siêu khóa trong quan hệ Student_Detail và Zip là siêu khóa trong quan hệ ZipCodes. Vì thế,
Stu_ID → Stu_Name, Zip
và
Zip → Thành phố
Điều đó xác nhận rằng cả hai mối quan hệ đều nằm trong BCNF.