Tôi thực sự đã bắt đầu đặt câu trả lời cùng nhau, nhưng tôi gặp phải các biến chứng, bởi vì bạn (khá dễ hiểu) muốn có một ví dụ đơn giản. Vấn đề là đa tạp.
Trước tiên, tôi không có ý tưởng tốt về mức độ chuyên môn thực tế của bạn về Cơ sở dữ liệu quan hệ và 5NF; Tôi không có một điểm bắt đầu để mất và sau đó thảo luận về các chi tiết cụ thể của 6NF,
Thứ hai, giống như bất kỳ NFs nào khác, nó bị biến đổi. Bạn chỉ có thể bước vào nó; bạn có thể thực hiện 6NF cho các bảng certan; bạn có thể đi hết con heo trên mỗi bàn, vv Chắc chắn có một vụ nổ bàn, nhưng sau đó bạn Bình thường hóa nó, và giết chết vụ nổ; đó là một triển khai nâng cao hoặc trưởng thành của 6NF. Không sử dụng cung cấp toàn bộ hoặc một phần mức 6NF, khi bạn đang yêu cầu ví dụ đơn giản nhất, dễ hiểu nhất.
Tôi tin rằng bạn hiểu rằng một số bảng có thể là "trong 5NF" trong khi một số khác có "trong 6NF".
Vì vậy, tôi đặt một thứ lại với nhau cho bạn. Nhưng ngay cả điều đó cũng cần giải thích.
Bây giờ SQL hầu như không hỗ trợ 5NF, nó không hỗ trợ 6NF ở tất cả (tôi nghĩ rằng dportas nói cùng một điều trong các từ khác nhau). Bây giờ tôi thực hiện 6NF ở mức độ sâu, vì lý do hiệu suất, xoay vòng đơn giản (của toàn bộ bảng; bất kỳ và tất cả các cột, không phải hàm PIVOT ngớ ngẩn trong MS), truy cập cột, v.v.Đối với điều đó bạn cần một danh mục đầy đủ, là một phần mở rộng cho danh mục SQL, để hỗ trợ 6NF mà SQL không hỗ trợ, và duy trì tính toàn vẹn và quy tắc kinh doanh của dữ liệu. Vì vậy, bạn thực sự không muốn thực hiện 6NF cho vui, bạn chỉ làm điều đó nếu bạn có nhu cầu, bởi vì bạn phải thực hiện một danh mục. (Đây là những gì đám đông EAV không làm, và đây là lý do tại sao hầu hết các hệ EAV có vấn đề toàn vẹn dữ liệu. Hầu hết trong số họ không sử dụng declarative tham chiếu & Data Integrity rằng SQL không có.)
Nhưng hầu hết mọi người người thực hiện 6NF không thực hiện cấp độ sâu hơn, với một danh mục đầy đủ. Họ có nhu cầu đơn giản hơn, và do đó thực hiện một mức độ nông hơn 6NF. Vì vậy, hãy lấy điều đó, để cung cấp một ví dụ đơn giản cho bạn. Hãy bắt đầu với một bảng Product thông thường được khai báo là trong 5NF (và đừng tranh luận về 5NF là gì). Công ty bán nhiều loại Sản phẩm khác nhau, một nửa cột là bắt buộc và nửa còn lại là tùy chọn, nghĩa là tùy thuộc vào Loại Sản phẩm, một số cột nhất định có thể là Null. Trong khi họ có thể đã làm tốt công việc với cơ sở dữ liệu, Nulls giờ là một vấn đề lớn: các cột không phải là Null đối với một số ProductTypes nhất định là Null, vì khai báo là NULL, và mã ứng dụng của chúng chỉ tốt như của người tiếp theo .
Vì vậy, họ quyết định đi với 6NF để khắc phục vấn đề đó, bởi vì phụ đề của 6NF quy định rằng nó loại bỏ Vấn đề Null. Mẫu thứ sáu bình thường là dạng bình thường không thể hủy diệt, sẽ không có thêm NF sau này, bởi vì dữ liệu không thể được chuẩn hóa thêm. Các hàng đã được chuẩn hóa ở mức tối đa. Định nghĩa của 6NF là:
một bảng nằm trong 6NF khi hàng chứa khóa chính và tối đa một thuộc tính.
Lưu ý rằng theo định nghĩa đó, hàng triệu bảng trên khắp hành tinh đã có trong 6NF, mà không có ý định đó. Ví dụ. các bảng tra cứu hoặc tra cứu điển hình, chỉ với PK và mô tả.
Phải. Vâng, bạn bè của chúng tôi nhìn vào bảng sản phẩm của họ, trong đó có tám thuộc tính không chính, vì vậy nếu họ làm cho bảng sản phẩm 6NF, họ sẽ có tám bảng sản phẩm phụ. Sau đó, có một số vấn đề là một số cột là Ngoại khóa cho các bảng khác, và dẫn đến nhiều biến chứng hơn. Và họ lưu ý thực tế là SQL không hỗ trợ những gì họ đang làm, và họ phải xây dựng một danh mục nhỏ. Tám bảng là chính xác, nhưng không hợp lý. Mục đích của họ là để loại bỏ Nulls, không phải để viết một subytem nhỏ xung quanh mỗi bảng.
Simple 6NF Example
Độc giả không quen với các tiêu chuẩn cho mô hình quan hệ cơ sở dữ liệu có thể tìm thấy IDEF1X Notation hữu ích để giải thích những biểu tượng trong ví dụ.
Vì vậy, thông thường, Bảng sản phẩm giữ lại tất cả các cột bắt buộc, đặc biệt là FK và mỗi cột Tùy chọn, mỗi cột Không thể bỏ qua, được đặt trong bảng phụ Sản phẩm riêng biệt. Đó là hình thức đơn giản nhất mà tôi đã thấy. Năm bảng thay vì tám. Trong Mô hình, bốn bảng phụ Sản phẩm là "trong 6NF"; bảng Sản phẩm chính là "trong 5NF". Bây giờ chúng tôi thực sự không cần tất cả các đoạn mã mà SELECTs từ Sản phẩm phải tìm ra những cột cần xây dựng, dựa trên ProductType, vv, vì vậy chúng tôi cung cấp một khung nhìn, về cơ bản cung cấp "view" 5NF của cụm bảng sản phẩm.Điều tiếp theo chúng ta cần là những nguyên tắc cơ bản của một phần mở rộng cho danh mục SQL, để chúng ta có thể đảm bảo rằng các quy tắc (toàn vẹn dữ liệu) cho các ProductTypes khác nhau được duy trì ở một nơi, trong cơ sở dữ liệu và không phụ thuộc trên mã ứng dụng. Danh mục đơn giản nhất mà bạn có thể nhận được. Điều đó được loại bỏ khỏi ProductType, vì vậy ProductType giờ đây là một phần của Siêu dữ liệu đó. Bạn có thể triển khai cấu trúc đơn giản đó mà không cần danh mục, nhưng tôi không khuyên bạn nên sử dụng nó.
Cập nhật
Điều quan trọng cần lưu ý rằng tôi thực hiện tất cả các quy tắc kinh doanh trong cơ sở dữ liệu. Nếu không, nó không phải là một cơ sở dữ liệu (khái niệm thực hiện các quy tắc "trong mã ứng dụng" là vui nhộn trong cực đoan, đặc biệt là ngày nay, khi chúng ta có người trồng hoa làm việc như "các nhà phát triển"). Vì vậy, tất cả các quy tắc, vv được thực hiện đầu tiên và quan trọng nhất như khai báo SQL, ràng buộc CHECK, chức năng, vv. Điều đó bảo toàn tất cả Tuyên bố tham chiếu Integrity, và Integative Data Integrity. Phần mở rộng của danh mục SQL bao gồm vùng SQL không có khai báo và sau đó chúng được triển khai dưới dạng SQL. Là một từ điển dữ liệu tốt, nó làm được nhiều hơn thế. Ví dụ. Tôi không viết lượt xem mỗi khi tôi thay đổi bảng hoặc thêm hoặc thay đổi cột hoặc đặc điểm của chúng, chúng được tạo trực tiếp từ danh mục + tiện ích mở rộng bằng trình tạo mã đơn giản.
Một lưu ý quan trọng khác. Bạn không thể thực hiện 6NF (hoặc EAV đúng, cho rằng vấn đề), mà không hoàn thành một bài tập chuẩn hóa đầy đủ và trung thành, đến 5NF. Vấn đề tôi thấy ở mọi trang web là, họ không có trạng thái 5NF chính hãng, họ có một sự hỗn loạn một phần hoặc không bình thường hóa, nhưng họ rất gắn bó với điều đó. Việc tạo ra 6NF hoặc EAV từ đó là một thảm họa. Tạo EAV hoặc 6NF từ đó mà không có tất cả các quy tắc nghiệp vụ được triển khai trong SQL khai báo là một thảm họa hạt nhân, cháy trong nhiều năm. Gieo nhân nào gặp quả nấy.
Cập nhật kết thúc. Cuối cùng, có, có ít nhất bốn cấp độ chuẩn hóa cao hơn (Bình thường hóa là Nguyên tắc, không chỉ là một Mẫu chuẩn), có thể được áp dụng cho cụm sản phẩm 6NF đơn giản đó, cung cấp nhiều điều khiển hơn, ít bảng hơn. , vv Chúng ta càng đi sâu, danh mục càng mở rộng. Và mức độ hiệu suất cao hơn. Khi bạn đã sẵn sàng, chỉ cần hỏi, tôi đã dựng lên các mô hình và đăng chi tiết trong các câu trả lời khác.
"6NF nghĩa là mọi mối quan hệ bao gồm khóa ứng viên cộng với không quá một thuộc tính khác (không phải khóa)". bạn có thể cho tôi một tham chiếu đến định nghĩa này không? – shababhsiddique
Thanh toán "Thiết kế và triển khai cơ sở dữ liệu quan hệ: Jan Harrington, ấn bản thứ 3, Trang No.125". (* Kết quả là các bảng không thể phân tích được nữa, trong hầu hết các trường hợp, các bảng bao gồm khóa chính và -key attribute. *) – Shinchan