DBMS chuẩn hóa cơ sở dữ liệu Normal Form

0
477

1. Chuẩn hóa cơ sở dữ liệu Normal Form là gì?

Chuẩn hóa – Normalization là quá trình giảm thiểu dư thừa từ một quan hệ hoặc tập hợp các quan hệ. Sự dư thừa trong mối quan hệ có thể gây ra hiện tượng chèn, xóa và cập nhật bất thường. Vì vậy, nó giúp giảm thiểu sự dư thừa trong quan hệ. Normal Form bình thường được sử dụng để loại bỏ hoặc giảm bớt sự dư thừa trong các bảng cơ sở dữ liệu.

Người sáng chế đưa ra mô hình chuẩn hóa Normal Form là Edgar Codd. Ông đưa ra 4 loại như First Normal Form, Sencond Normal Form, Third Normal Form và kế hợp với Raymond F. Boyce cho ra đời Boyce-Codd Normal Form (BCNF).

2. First Normal Form

Nếu một quan hệ chứa thuộc tính hỗn hợp hoặc đa giá trị, nó vi phạm dạng chuẩn đầu tiên hoặc một quan hệ ở dạng chuẩn đầu tiên nếu nó không chứa bất kỳ thuộc tính tổng hợp hoặc đa giá trị nào. Một quan hệ ở dạng chuẩn đầu tiên nếu mọi thuộc tính trong quan hệ đó là thuộc tính có giá trị đơn.

Ví dụ 1: FNF

Mối quan hệ STUDENT trong bảng 1 không nằm trong 1NF vì thuộc tính đa giá trị STUD_PHONE. Sự phân hủy của nó thành 1NF đã được trình bày trong bảng 2.

DBMS First Normal Form

Ví dụ 2:

 
ID   Name   Courses
------------------
1    A      A1, a2
2    E      A3
3    M      B2, a3

Trong bảng trên, trường Course là thuộc tính đa giá trị nên nó không nằm trong 1NF.

Bảng bên dưới nằm trong 1NF vì không có thuộc tính đa giá trị.

ID   Name   Course
------------------
1    A       A1
1    A       A2
2    E       A3
3    M       A2
3    M       A3

3. Second Normal Form

Để ở dạng chuẩn thứ hai, một quan hệ phải ở dạng chuẩn đầu tiên và quan hệ không được chứa bất kỳ phụ thuộc bộ phận nào. Một quan hệ nằm trong 2NF nếu nó Không có Phụ thuộc – No Partial Dependency, tức là không có thuộc tính không phải nguyên tố (các thuộc tính không phải là một phần của bất kỳ khóa ứng viên nào) phụ thuộc vào bất kỳ tập hợp con thích hợp nào của bất kỳ khóa ứng viên nào của bảng.

Partial Dependency – Nếu tập hợp con thích hợp của khóa ứng viên xác định thuộc tính không phải nguyên tố, thì nó được gọi là phụ thuộc từng phần.

Ví dụ 3: Xem xét bảng 3 như sau

STUD_NO            COURSE_NO        COURSE_FEE
1                     A1                  1000
2                     A2                  1500
1                     A4                  2000
4                     A3                  1000
4                     A1                  1000
2                     A5                  2000

(Lưu ý: Có nhiều khóa học có học phí giống nhau)

  • COURSE_FEE không thể một mình quyết định giá trị của COURSE_NO hoặc STUD_NO
  • COURSE_FEE cùng với STUD_NO không thể quyết định giá trị của COURSE_NO
  • COURSE_FEE cùng với COURSE_NO không thể quyết định giá trị của STUD_NO
  • COURSE_FEE sẽ là một thuộc tính không phải nguyên tố, vì nó không thuộc về một khóa ứng viên duy nhất [STUD_NO, COURSE_NO].
  • Tuy nhiên, COURSE_NO -> COURSE_FEE, tức là COURSE_FEE phụ thuộc vào COURSE_NO, là một tập hợp con thích hợp của khóa ứng viên. Thuộc tính không phải nguyên tố COURSE_FEE phụ thuộc vào một tập hợp con thích hợp của khóa ứng viên, là một phụ thuộc một phần và vì vậy mối quan hệ này không nằm trong 2NF.

Để chuyển đổi quan hệ trên thành 2NF

Chúng ta cần chia bảng thành hai bảng như:
Bảng 1: STUD_NO, COURSE_NO
Bảng 2: COURSE_NO, COURSE_FEE

 Table 1                                    Table 2
STUD_NO            COURSE_NO          COURSE_NO                COURSE_FEE     
1                 A1                  A1                        1000
2                 A2                  A2                        1500
1                 A4                  A3                        1000
4                 A3                  A4                        2000
4                 A1                  A5                        2000        

2NF cố gắng giảm dữ liệu dư thừa được lưu trữ trong bộ nhớ. Ví dụ: nếu có 100 sinh viên tham gia khóa học A1, chúng tôi không cần lưu trữ Phí của khóa học đó là 1000 cho tất cả 100 bản ghi, thay vào đó, một khi chúng tôi có thể lưu trữ trong bảng thứ hai vì học phí của khóa học A1 là 1000.

Ví dụ 4:

Xem xét các phụ thuộc hàm sau trong quan hệ R [A, B, C, D]

AB -> C [A và B cùng xác định C]
BC -> D [B và C cùng xác định D]

Trong mối quan hệ trên, AB là khóa ứng viên duy nhất và không có phụ thuộc từng phần, tức là bất kỳ tập hợp con thích hợp nào của AB đều không xác định bất kỳ thuộc tính không phải nguyên tố nào.

4. Third Normal Form

Một quan hệ ở dạng chuẩn thứ ba, nếu không có phụ thuộc bắc cầu cho các thuộc tính không phải nguyên tố cũng như nó ở dạng chuẩn thứ hai.

Một quan hệ ở dạng 3NF nếu có ít nhất một trong các điều kiện sau đây trong mọi phụ thuộc hàm không tầm thường X -> Y

  • X là một siêu khóa.
  • Y là một thuộc tính nguyên tố (mỗi phần tử của Y là một phần của một số khóa ứng viên).
DBMS Third Normal Form

Phụ thuộc bắc cầu – Nếu A-> B và B-> C là hai FD thì A-> C được gọi là phụ thuộc bắc cầu.

Ví dụ 5: Trong mối quan hệ STUDEN được đưa ra trong Bảng 4

  • Tập hợp FD: [STUD_NO -> STUD_NAME, STUD_NO -> STUD_STATE, STUD_STATE -> STUD_COUNTRY, STUD_NO -> STUD_AGE]
  • Khóa ứng viên: [STUD_NO]
  • Đối với mối quan hệ này trong bảng 4, STUD_NO -> STUD_STATE và STUD_STATE -> STUD_COUNTRY là đúng.
  • Vì vậy STUD_COUNTRY phụ thuộc quá độ vào STUD_NO.
  • Nó vi phạm hình thức bình thường thứ ba. Để chuyển đổi nó ở dạng bình thường thứ ba, chúng tôi sẽ phân tách quan hệ STUDENT [STUD_NO, STUD_NAME, STUD_PHONE, STUD_STATE, STUD_COUNTRY_STUD_AGE] thành:
    STUDENT [STUD_NO, STUD_NAME, STUD_PHONE, STUD_STATE, STUD_AGE]
    STATE_COUNTRY [STATE, COUNTRY]

Ví dụ 6: Xem xét mối quan hệ R [A, B, C, D, E]

A -> BC,
CD -> E,
B -> D,
E -> A

Tất cả các khóa ứng viên có thể có trong quan hệ trên là [A, E, CD, BC] Tất cả các thuộc tính nằm ở phía bên phải của tất cả các phụ thuộc hàm đều là số nguyên tố.

5. Boyce-Codd Normal Form (BCNF)

Một quan hệ R nằm trong BCNF nếu R ở dạng Chuẩn thứ ba và đối với mọi FD, LHS là siêu khóa. Một quan hệ nằm trong BCNF iff trong mọi phụ thuộc hàm không tầm thường X -> Y, X là siêu khóa.

Ví dụ 7: Tìm dạng chuẩn cao nhất của một quan hệ R [A, B, C, D, E] với FD đặt là [BC-> D, AC-> BE, B-> E]

  • Bước 1. Như chúng ta thấy, [AC] + = [A, C, B, E, D] nhưng không có tập con nào của nó có thể xác định tất cả các thuộc tính của quan hệ, Vì vậy AC sẽ là khóa ứng viên. A hoặc C không thể bắt nguồn từ bất kỳ thuộc tính nào khác của mối quan hệ, vì vậy sẽ chỉ có 1 khóa ứng viên [AC].
  • Bước 2. Thuộc tính nguyên tố là những thuộc tính là một phần của khóa ứng viên [A, C] trong ví dụ này và những thuộc tính khác sẽ không phải là [B, D, E] trong ví dụ này.
  • Bước 3. Quan hệ R ở dạng chuẩn đầu tiên vì DBMS quan hệ không cho phép thuộc tính đa giá trị hoặc hỗn hợp.
  • Quan hệ ở dạng chuẩn 2 vì BC-> D ở dạng chuẩn 2 (BC không phải là tập con thích hợp của khóa ứng viên AC) và AC-> BE ở dạng chuẩn 2 (AC là khóa ứng viên) và B-> E ở dạng chuẩn thứ 2 (B không phải là một tập hợp con thích hợp của khóa ứng viên AC).
  • Quan hệ không ở dạng Third Normal Form vì trong BC-> D (BC-> D (không phải BC là siêu khóa và D là thuộc tính nguyên tố) và trong B-> E (không phải B là siêu khóa và E là thuộc tính nguyên tố) thỏa mãn điều kiện bình thường thứ 3, hoặc LHS của FD phải là siêu khóa hoặc RHS phải là thuộc tính nguyên tố.
  • Vì vậy, dạng quan hệ bình thường cao nhất sẽ là dạng bình thường thứ 2.

Ví dụ 8: Ví dụ, hãy xem xét mối quan hệ R [A, B, C]

A -> BC,
B ->
A và B đều là siêu khóa nên quan hệ trên nằm trong BCNF.

Một số điểm chính để xác định Normal Form

  • BCNF không bị dư thừa.
  • Nếu một quan hệ nằm trong BCNF, thì nó cũng được thỏa mãn Third Normal Form.
  • Nếu tất cả các thuộc tính của quan hệ là thuộc tính chính, thì quan hệ luôn ở trong 3NF.
  • Một quan hệ trong Cơ sở dữ liệu quan hệ luôn ở dạng 1NF.
  • Mọi quan hệ nhị phân (quan hệ chỉ có 2 thuộc tính) luôn ở trong BCNF.
  • Nếu một Quan hệ chỉ có các khóa ứng viên đơn lẻ (tức là mọi khóa ứng viên chỉ bao gồm 1 thuộc tính), thì Quan hệ luôn ở trong 2NF (vì không thể phụ thuộc hàm một phần).
  • Đôi khi đi cho dạng BCNF có thể không bảo toàn sự phụ thuộc hàm. Trong trường hợp đó, chỉ sử dụng BCNF nếu (các) FD bị mất không được yêu cầu, nếu không thì chỉ chuẩn hóa cho đến 3NF.
  • Có nhiều dạng Bình thường khác tồn tại sau BCNF, như 4NF và hơn thế nữa. Nhưng trong hệ thống cơ sở dữ liệu thế giới thực, thông thường không bắt buộc phải vượt ra ngoài BCNF.

Ví dụ 9: Tìm dạng chuẩn cao nhất của R (A, B, C, D, E) theo các phụ thuộc hàm sau.

 ABC --> D
 CD --> AE 

Một số điểm quan trọng để giải quyết loại câu hỏi trên.

  • Bạn nên bắt đầu kiểm tra từ BCNF, sau đó là 3NF, 2NF, 1NF.
  • Nếu bất kỳ phụ thuộc hàm nào thỏa mãn một dạng bình thường thì không cần kiểm tra dạng bình thường thấp hơn. Ví dụ, ABC -> D nằm trong BCNF (Lưu ý rằng ABC là siêu khóa), vì vậy không cần kiểm tra sự phụ thuộc này cho các dạng bình thường thấp hơn.
  • Các khóa ứng viên trong quan hệ đã cho là [ABC, BCD].
  • BCNF: ABC -> D nằm trong BCNF. Chúng ta hãy kiểm tra CD -> AE, CD không phải là siêu khóa nên phần phụ thuộc này không nằm trong BCNF. Vì vậy, R không nằm trong BCNF.
  • 3NF: ABC -> D chúng tôi không cần kiểm tra sự phụ thuộc này vì nó đã thỏa mãn BCNF. Chúng ta hãy xem xét CD -> AE. Vì E không phải là thuộc tính nguyên tố nên quan hệ không nằm trong 3NF.
  • 2NF: Trong 2NF, chúng ta cần kiểm tra sự phụ thuộc từng phần. CD là một tập hợp con thích hợp của khóa ứng viên và nó xác định E, là thuộc tính không phải nguyên tố. Vì vậy, quan hệ đã cho cũng không nằm trong 2 NF. Vì vậy, dạng chuẩn cao nhất là 1 NF.

Chúc các bạn học tập tốt.

Có thể bạn quan tâm: >> MySQL insert cơ sở dữ liệu từ một bảng khác

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

7 + 3 =