Sixth Normal Form (6NF - Chuẩn hóa bậc sáu) là dạng chuẩn hóa cao nhất trong lý thuyết cơ sở dữ liệu quan hệ. Một quan hệ (relation) ở 6NF khi nó **không thể phân rã (decompose) thêm được nữa** mà không mất thông tin - tức là mỗi quan hệ chỉ chứa **một sự kiện/sự thật (fact) duy nhất** về một khóa.
Định nghĩa chính thức
Quan hệ R ở 6NF nếu và chỉ nếu:
- R ở 5NF (Project-Join Normal Form).
- Mọi **Join Dependency (JD)** trên R đều là **trivial** (tự nhiên).
- Tức là: R không thể phân rã thành các quan hệ con nhỏ hơn (non-loss decomposition) rồi join lại được R gốc, trừ khi phân rã đó là tự nhiên (một trong các quan hệ con là R chính nó).
Ý nghĩa trực quan: "One Fact Per Table"
Mỗi bảng 6NF chỉ biểu diễn **một loại fact (sự thật) duy nhất** về một entity:
- Bảng
Person_Name: (Person_ID, Name) - Fact: "Person có tên là X". - Bảng
Person_Address: (Person_ID, Address, ValidFrom, ValidTo) - Fact: "Person ở tại Y trong khoảng thời gian". - Bảng
Person_Phone: (Person_ID, Phone) - Fact: "Person có số điện thoại Z".
Ví dụ: Từ 1NF -> 6NF
Bảng gốc (1NF - Chưa chuẩn hóa tốt)
| Enrollment_No (PK) | Name | Marks |
|---|---|---|
| E001 | An | 90 |
| E002 | Bình | 85 |
Phân rã 6NF (Irreducible components)
Bảng 1: StudentInformation (Fact: Tên sinh viên)
| Enrollment_No (PK) | Name |
|---|---|
| E001 | An |
| E002 | Bình |
Bảng 2: ResultInformation (Fact: Điểm thi)
| Enrollment_No (PK) | Marks |
|---|---|
| E001 | 90 |
| E002 | 85 |
Hai bảng này join lại bằng Enrollment_No ra bảng gốc. Không thể phân rã thêm được (mỗi bảng chỉ còn 1 non-key attribute).
Ví dụ phức tạp hơn: StudentMarks
Bảng gốc:
| Student_ID | Student_FirstName | Student_LastName | Marks |
|---|---|---|---|
| S01 | Tom | Alter | 90 |
| S02 | Jacob | Watson | 80 |
| S03 | Harry | Smith | 85 |
Phân rã 6NF (4 bảng)
StudentFirstName
| Student_ID (PK) | Student_FirstName |
|---|---|
| S01 | Tom |
| S02 | Jacob |
| S03 | Harry |
StudentLastName
| Student_ID (PK) | Student_LastName |
|---|---|
| S01 | Alter |
| S02 | Watson |
| S03 | Smith |
StudentResult
| Student_ID (PK) | Marks |
|---|---|
| S01 | 90 |
| S02 | 80 |
| S03 | 85 |
(Bảng Student_ID key có thể tách riêng nếu cần, nhưng thường PK của các bảng trên đã là key).
6NF và Temporal Data (Dữ liệu thời gian) - Ứng dụng thực tế quan trọng nhất
6NF tự nhiên hỗ trợ **Slowly Changing Dimensions (SCD)** và **Temporal Tables** (Valid Time / Transaction Time).
Ví dụ: Theo dõi lịch sử địa chỉ nhân viên:
| Emp_ID (PK) | Address (PK) | Valid_From (PK) | Valid_To |
|---|---|---|---|
| E001 | Hà Nội | 2020-01-01 | 2022-12-31 |
| E001 | TP.HCM | 2023-01-01 | 9999-12-31 |
Mỗi hàng = 1 fact: "Nhân viên E001 ở tại [Address] trong khoảng [Valid_From, Valid_To]". Đây là 6NF.
6NF vs 5NF vs 3NF/BCNF
| Normal Form | Loại Dependency loại bỏ | Độ chi tiết | Thực tế |
|---|---|---|---|
| 3NF / BCNF | Functional Dependency (FD) transitive/partial | Attribute level | Chuẩn cho OLTP |
| 4NF | Multi-valued Dependency (MVD) | Attribute group | Hiếm gặp |
| 5NF | Join Dependency (JD) non-trivial | Table decomposition | Rất hiếm |
| 6NF | Temporal JD / Irreducible facts | Fact level (Time-slice) | Data Vault, Anchor Modeling, Temporal DB |
Thách thức & Hạn chế của 6NF
- Số lượng bảng bùng nổ: N attributes → N bảng. Join query cực phức tạp, chậm.
- Insert/Update phức tạp: Phải insert vào nhiều bảng cùng lúc (transaction).
- Không phù hợp OLTP thông thường: Overhead join, index, lock lớn.
- Khó hiểu, bảo trì: Developer quen schema "wide table".
Khi nào DÙNG 6NF?
- Data Vault 2.0: Satellite tables = 6NF (mỗi satellite = 1 attribute group + time).
- Anchor Modeling: Kiến trúc mô hình hóa dữ liệu dựa trên 6NF.
- Temporal Databases / Audit Log / CDC: Lưu lịch sử thay đổi từng attribute riêng biệt.
- Regulatory Compliance: Cần truy vết mọi thay đổi từng trường (GDPR, Basel III).
- Data Warehouse / Lakehouse: Columnar storage (Parquet/ORC) làm join 6NF nhanh nhờ predicate pushdown, partition pruning.
Kết luận
6NF là "nguyên tử hóa" dữ liệu đến mức mỗi bảng chỉ chứa 1 fact. Lý thuyết đẹp, nhưng **không dùng cho OLTP ứng dụng thông thường**. Nó là nền tảng cho **Data Vault, Anchor Modeling, Temporal Databases** - nơi lịch sử thay đổi từng trường dữ liệu là quan trọng nhất. Với columnar storage hiện đại, 6NF trở nên khả thi hơn cho Analytics.