Việc chuẩn hóa DB được thực hiện hoàn toàn dựa trên khóa chính hay nó được thực hiện dựa trên tất cả các khóa ứng cử viên?


7

Tôi đã bắt gặp hai hương vị của thủ tục chuẩn hóa trong khi tham khảo internet và sách giáo khoa. viz

Loại 1 . Các hình thức bình thường chỉ dựa trên khóa chính.

Trong loại này,

-> 2NF không cho phép phụ thuộc một phần vào khóa chính .

-> 3NF không cho phép phụ thuộc bắc cầu vào khóa chính .

Loại 2 . Một dạng bình thường tổng quát hơn nhiều dựa trên TẤT CẢ các khóa ứng cử viên

Trong loại này,

Phụ thuộc một phần và phụ thuộc bắc cầu vào TẤT CẢ các khóa ứng cử viên được tính đến.

Trong hầu hết các trang web tôi giới thiệu, tôi đã tìm thấy hướng dẫn và ghi chú chỉ dựa trên loại thứ nhất. Nhưng sách giáo khoa 'Nguyên tắc cơ bản của hệ thống cơ sở dữ liệu' của Navedit và Elmasri mô tả cả hai loại. Ngay cả trang wikipedia trên 2NF cũng đề cập riêng về '2NF và các khóa ứng viên' dựa trên loại thứ 2.

Xem 2NF và Khóa ứng viên - Wiki

Nhưng cả sách giáo khoa lẫn wiki đều không đề cập đến bất cứ điều gì liên quan đến loại nào tốt hơn hoặc loại nào thực sự được ưa thích.

Loại nào nên được theo sau khi không có gì được đề cập về loại? Hy vọng U đã hiểu câu hỏi của tôi.

Xin hãy giúp tôi ra về những người này.


4
Hãy nghĩ như thế này: nếu đó chỉ là khóa chính, chúng ta có thể thêm cột "số hàng" mới vào bất kỳ bảng nào, sử dụng cột đó làm khóa chính và từ đó biến bảng thành dạng bình thường cao hơn. Nhưng tất cả các vấn đề, với sự dư thừa và như vậy, sự bình thường hóa đó được thiết kế để giải quyết, vẫn sẽ còn đó! Do đó, sẽ thật ngu ngốc nếu đó chỉ là khóa chính.
Thomas Padron-McCarthy

@ ThomasPadron-McCarthy Rất đúng !! Có điểm ngay bây giờ! Cảm ơn nhiều. :)
Nabeel

Câu trả lời:


13

Bình thường hóa có liên quan với tất cả các khóa ứng cử viên. Khóa chính chỉ là khóa ứng viên. Khóa chính không khác với bất kỳ khóa ứng viên nào khác.

Sự nhầm lẫn tiềm ẩn xuất hiện bởi vì trong những ngày đầu của lý thuyết cơ sở dữ liệu quan hệ, thuật ngữ Khóa chính được sử dụng có nghĩa là bất kỳtất cả các khóa ứng cử viên trong khi sử dụng hiện đại là Khóa chính chỉ có một khóa được "ưa thích" hoặc được coi là có ý nghĩa đặc biệt đối với người dùng cơ sở dữ liệu . Thật không may, nhiều "định nghĩa" bạn sẽ thấy trực tuyến hoặc thậm chí trong bản in đều sai.


Vì vậy, chúng ta nên luôn luôn theo chuẩn hóa dựa trên các khóa ứng cử viên ?? Giả sử rằng chúng ta được yêu cầu kiểm tra xem mối quan hệ sau có trong 2NF hay không? R = (A, B, C, D, E, F) F = {A-> BCDEF, BC-> ADEF, B-> D, E-> F} Các khóa ứng viên là A, BC. Nếu 'A' được chọn làm khóa chính và cách tiếp cận thứ 1 được tuân theo, thì không có phụ thuộc một phần nào vào A, ngụ ý rằng mối quan hệ nằm trong 2NF. Nhưng nếu tiếp cận theo cách thứ 2, mặc dù không có phụ thuộc một phần vào A, chúng tôi có phụ thuộc một phần B-> D vào khóa ứng viên BC, ngụ ý rằng mối quan hệ chỉ trong 1NF !!
Nabeel

Đây là lúc tôi bối rối vì giáo viên của chúng tôi ở trường đại học đã dạy chúng tôi khái niệm này hoàn toàn dựa trên Khóa chính mà không tính đến các khóa ứng viên.
Nabeel

4
@Nabeel, Trong ví dụ của bạn, nếu BC là khóa ứng viên thì B-> D là phụ thuộc khóa một phần và do đó R không nằm trong 2NF. Nếu một mối quan hệ có nhiều hơn một khóa ứng cử viên thì việc bạn gọi là "chính" không thành vấn đề - sự lựa chọn là tùy ý và không tạo ra bất kỳ sự khác biệt cơ bản hoặc thực tế nào. Điều quan trọng là những chìa khóa và phụ thuộc mà bạn muốn được hài lòng. Có lẽ các ví dụ mà giáo viên của bạn sử dụng chỉ có một khóa? Bạn sẽ tìm thấy rất nhiều ví dụ xung quanh chỉ xác định một khóa ứng viên cho mỗi mối quan hệ.
nvogel

Cảm ơn rất nhiều cho cái nhìn sâu sắc của bạn !! Hừm. Có, hầu hết các câu hỏi chúng tôi đã gặp trong các phiên giải quyết vấn đề của chúng tôi là một loại ứng dụng chính của qns. Khi bạn giới thiệu sách giáo khoa Elmasri-Navedit về Nguyên tắc cơ bản của Hệ thống DB, việc chuẩn hóa được đưa ra dưới dạng hai phần riêng biệt trước tiên chỉ tính đến khóa Chính và sau đó nó giới thiệu chuẩn hóa tổng quát hơn dựa trên tất cả các khóa ứng cử viên. Tôi tự hỏi những gì cần thiết trong việc đưa ra nó như vậy. Làm cho tất cả trở nên phức tạp và mơ hồ hơn đối với những sinh viên đã bối rối như tôi !! : D
Nabeel

1
Tôi đồng ý cách giải thích của Elmasri và Navedit quá phức tạp - có lẽ bởi vì cuốn sách của họ cũng không chỉ bao gồm mô hình quan hệ. Trong các bối cảnh khác (ví dụ như mô hình ER), ý tưởng chỉ định khóa "chính" được đưa ra có ý nghĩa quan trọng hơn so với các thuật ngữ cơ sở dữ liệu quan hệ. Quan điểm riêng của tôi là "khóa chính" về cơ bản là một khái niệm lỗi thời không nên nổi bật khi dạy thiết kế cơ sở dữ liệu quan hệ. Khái niệm này thực sự có giá trị không nhiều hơn một đoạn chú thích.
nvogel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.