Có công cụ nào để kiểm tra xem cơ sở dữ liệu của tôi có được chuẩn hóa thành dạng bình thường thứ ba không?


20

Tôi đã học về bình thường hóa gần đây và hiểu tầm quan trọng của nó khi thực hiện một lược đồ mới.

Làm cách nào để kiểm tra xem cơ sở dữ liệu của tôi có tuân thủ 2NF hay 3NF không?

Đánh giá thủ công là một lựa chọn chắc chắn, nhưng tôi đang tìm kiếm một công cụ tự động ở đây.

Tôi không tìm kiếm một công cụ trỏ và nhấp, nhiều thứ khác sẽ làm nổi bật các tối ưu hóa có thể có để làm cho bảng 3NF tuân thủ. Tôi đoán nó có thể sử dụng số liệu thống kê dựa trên dữ liệu mẫu tốt và / hoặc phân tích ngữ nghĩa của các tên cột.


1
Tôi hy vọng một công cụ như vậy không tồn tại. 2NF / 3NF không cần phải thi hành. Thiết kế một lược đồ / mô hình thường phải tính đến thực tiễn và các cân nhắc về hiệu suất, thường đưa xNF ra khỏi cửa sổ
Philᵀᴹ

2
Có nghĩa là bình thường hóa không được sử dụng trong thực tế? Tôi đã lên kế hoạch sử dụng nó như một điểm khởi đầu và sẽ xem xét việc không chuẩn hóa khi nó làm chậm hiệu suất.
ack__

3
Thiết kế lược đồ là một nghệ thuật hơn là một khoa học. Chắc chắn có những quy tắc cơ bản để tuân theo, nhưng một khi bạn làm đủ, bạn bắt đầu cảm nhận tốt về những gì hoạt động và những gì không. Nghề thủ công.
datagod

Tôi không đồng ý với Phil. Bình thường hóa đôi khi là cách để đi. Lần khác lược đồ sao là tốt hơn. Nó phụ thuộc vào những gì bạn đang làm. Bạn cần rất nhiều bàn trước khi tự động hóa đáng giá.
Walter Mitty

Câu trả lời:


24

Bình thường hóa hoàn toàn được sử dụng trong thế giới thực ... và hy vọng bạn biết rằng 3NF chỉ là thứ ba trong số ... bây giờ là gì, 8? Nhưng 3NF nên là một mục tiêu dễ dàng.

Tuy nhiên ... tôi sẽ mạo hiểm nói rằng không thể có một công cụ như vậy.

Chuẩn hóa, về mặt kỹ thuật, là một thuộc tính của mỗi bảng. Trong một cơ sở dữ liệu nhất định, các bảng khác nhau có thể có mức độ chuẩn hóa khác nhau.

Mỗi bảng đại diện cho sự thật ... sự thật về các trường hợp của một loại điều nhất định (người, tài khoản, đơn đặt hàng, giao hàng, mặt hàng, địa điểm) bao gồm, đôi khi, khóa ngoại dẫn bạn đến các loại sự thật khác về điều đó.

Chuẩn hóa phải liên quan đến cách các sự kiện chính xác và hiệu quả được thể hiện trong các bảng cũng như khả năng thiết kế của bảng để ngăn chặn các mẫu dữ liệu mơ hồ và dư thừa.

Do đó, một sự hiểu biết về các sự kiện thực tế là bắt buộc ... nằm ngoài phạm vi của các công cụ tự động.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

Trong một thế giới nơi tất cả các giáo viên dạy tất cả các môn học và mỗi sinh viên có thể tham gia bất kỳ sự kết hợp nào nhưng không quá một khóa học cho mỗi môn học từ mỗi người hướng dẫn, bảng này thực sự có thể được cho là trong 3NF. Trong thế giới thực, việc đưa ra yêu cầu 3NF cho bảng này là vô lý.

Để hiểu rằng điều đó không có trong 3NF đòi hỏi sự hiểu biết về bản chất của các sự kiện mà nó đại diện. Trong thực tế của chúng tôi, bảng này sẽ không phải là 3NF vì (trong số các lý do khác) chủ đề và người hướng dẫn được liên kết với nhau theo những cách không liên quan đến sinh viên. Nếu chúng ta có các khóa học mà người hướng dẫn dạy các môn học được lưu trữ ở nơi khác trong cơ sở dữ liệu của chúng ta, tại sao chúng ta sẽ sao chép cả hai giá trị ở đây thay vì khóa ngoại từ bảng khác cho biết rằng học sinh đã đăng ký khóa học? Nếu người hướng dẫn được thay thế, chúng tôi phải thay đổi nhiều hồ sơ ở nhiều nơi.

Cơ sở dữ liệu càng được chuẩn hóa, thì nó càng phù hợp với thế giới thực và với chính nó, và càng khó khăn hơn cho các sự kiện của cơ sở dữ liệu là vô tình không đúng sự thật. Thiết kế cơ sở dữ liệu là một nghệ thuật, nhưng nó chắc chắn là một khoa học.

Mặc dù tôi không trực tiếp nhìn thấy mọi thứ anh ấy viết, tôi sẽ giới thiệu cuốn sách của Chris Date, Thiết kế cơ sở dữ liệu và Lý thuyết quan hệ: Các hình thức bình thường và Tất cả những gì Jazz đi sâu vào chi tiết về lý thuyết cơ bản của mô hình quan hệ.


2
Cảm ơn câu trả lời chi tiết này. Tuy nhiên, theo ví dụ của bạn, công cụ phân tích dữ liệu mẫu sẽ phát hiện ra rằng các giá trị "người hướng dẫn" được lặp lại rất nhiều và cũng xuất hiện trong một bảng khác, do đó cho thấy nó có thể là ứng cử viên cho khóa ngoại hoặc bất kỳ thay đổi nào khác sẽ làm cho bảng này tuân thủ 3nf, hoặc tôi thiếu một cái gì đó?
ack__

2
Đúng, nhưng từ khóa vẫn là "gợi ý". Một công cụ có thể đề xuất thay đổi cấu trúc bằng cách tìm kiếm sự dư thừa rõ ràng, nhưng tôi vẫn sẽ duy trì sự dư thừa thực sự đó và sự xuất hiện ngẫu nhiên của mối tương quan sẽ rất khó để một công cụ như vậy phân biệt giữa. Kiến thức về bản chất thế giới thực của dữ liệu là bắt buộc.
Michael - sqlbot

@ack__: có ở dạng bình thường thứ 3 hay không là một thuộc tính của một mối quan hệ không phải của một cặp hoặc một tập hợp quan hệ. Vì vậy, tôi không thể thấy rằng thiết lập quan hệ khóa ngoại có liên quan đến hình thức thứ 3 thông thường.
phép lạ173

Tôi nghĩ vấn đề lớn hơn là việc xác định các phụ thuộc chức năng nhiều cột là vấn đề đặc biệt. nếu các giá trị có thể giống nhau và đại diện cho các thực thể khác nhau (nghĩa là có liên quan đến các khóa tổng hợp). Xem xét một bảng: (address lòng, thành phố, state_province, mail_code, quốc gia). Bây giờ điều này không được bình thường hóa. (thành phố, bang_province) -> (quốc gia). Vì vậy, để bình thường hóa hoàn toàn, chúng ta phải chia thành ít nhất ba bảng, có thể bốn bảng (xử lý mail_code!) Nhưng các phím tổng hợp khiến vấn đề này bị phát hiện khi đang di chuyển. Ngoài ra comp. chìa khóa là chìa khóa cho ý tưởng của nf vì vậy đừng bỏ qua chúng!
Chris Travers

Ai đó có thể giải thích tại sao "Trong một thế giới mà một sinh viên chỉ có thể tham gia một khóa học trong một môn học và tất cả các giáo viên dạy tất cả các môn học, bảng này thực sự có thể được nói là trong 3NF" Điều đó dường như thiết lập rằng Học sinh -> môn học và không có gì nữa. Cảm nhận chìa khóa cho bảng này sau đó sẽ là (sinh viên, người hướng dẫn) sẽ không phá vỡ 3NF? Mỗi giáo viên dạy mọi môn học giúp chúng ta điều gì?
Drew Verlee

5

Một phần của việc sử dụng các phương pháp chính thức trong việc phát triển lý thuyết quan hệ là phát triển các quy trình có thể được tự động hóa. Tôi khá chắc chắn rằng Ngày của CJ xuất hiện và nói rằng trong phần Giới thiệu về Hệ thống cơ sở dữ liệu của mình .

Một số công cụ CASE được phát hành vào cuối những năm 1980 hoặc đầu những năm 1990 có thể rút ra mọi lược đồ 5NF có thể bằng cách phân tích sơ đồ ER hoặc bằng cách phân tích thống kê dữ liệu mẫu.

Visio Enterprise Architect (tôi nghĩ) là một công cụ tương đối gần đây dọc theo các dòng đó.


Tốt đẹp. Tôi thực sự đã tìm kiếm cả hai cách để phân tích một lược đồ (sơ đồ ER và phân tích dữ liệu mẫu). Bạn có biết bất kỳ phần mềm gần đây nào khác ngoài Visio không? Tôi chưa có (chưa) giấy phép cho nó.
ack__

1
Nhưng sơ đồ ER của bạn về cơ bản là sơ đồ mô hình đối tượng. Điều đó không hoàn toàn giống với việc lấy một cơ sở dữ liệu hiện có và xác định xem nó có được chuẩn hóa từ nó không.
Chris Travers

2
Phân tích các bảng với dữ liệu mẫu và các đề xuất để chuẩn hóa là một tính năng của Access và trong các phiên bản đầu tiên, nếu tôi nhớ rõ.
ypercubeᵀᴹ

@Chris: vâng, tôi đã tham khảo sơ đồ ER chỉ để phân tích ngữ nghĩa.
ack__

@ypercube: Cảm ơn vì tiền boa, tôi sẽ xem Access.
ack__


2

Tôi nghĩ rằng nếu bạn có thể viết một công cụ để làm điều đó, nó vẫn sẽ xem xét thủ công để thực hiện công việc. các hình thức bình thường được xác định trên cơ sở phụ thuộc chức năng và chúng không thể được xác định từ việc kiểm tra dữ liệu đơn thuần. Nói cách khác, đó là vấn đề quy nạp thay vì logic suy diễn để xác định xem có tồn tại phụ thuộc chức năng hay không.


Thật vậy, sẽ có một số đánh giá thủ công để làm, tôi không mong đợi một công cụ để làm điều đó hoàn toàn tự động. Nhưng tôi khá chắc chắn rằng hầu hết các công việc có thể được tự động hóa bằng cách phân tích dữ liệu hiện có trong DB (ít nhất là các mẫu của nó) và / hoặc tên / loại trường.
ack__

1
Làm sao? Chuẩn hóa được định nghĩa trên các phụ thuộc tham gia và phụ thuộc chức năng. Một phụ thuộc chức năng về cơ bản được định nghĩa dễ dàng là: đối với mọi giá trị có thể có của một siêu khóa, có chính xác một giá trị trong phụ thuộc chức năng. Bạn không thể đến đó bằng cách tự động xem xét dữ liệu vì chỉ vì bạn có, đối với bộ hiện tại của bạn, thứ dường như là phụ thuộc chức năng, điều đó không có nghĩa là khóa mới sẽ tuân thủ. Nó rất giống như sự tương quan cũ và phân chia nhân quả. Bạn không thể tạo ra sự phụ thuộc chức năng bằng cách quan sát những gì hiện có trong cơ sở dữ liệu.
Chris Travers

2
ít nhất một công cụ có thể gợi ý rằng một mối quan hệ có thể tồn tại. nếu chất lượng và kích thước của mẫu dữ liệu đủ lớn thì độ chính xác của dự đoán như vậy sẽ đủ cao cho mục đích thực tế.
phép lạ173

Có lẽ. Nhưng hãy lấy một ví dụ thực tế khá khôn ngoan về thiết kế quan hệ: địa chỉ. Địa chỉ gửi thư nên được chuẩn hóa như thế nào? Có bao nhiêu bảng nên được đề xuất? Theo hiểu biết của tôi về 3NF, bạn cần có bảng cho các quốc gia, tiểu bang / tỉnh và thành phố. Tôi không biết liệu mã bưu chính / sự cố thành phố có ý nghĩa hay không nhưng chúng có thể làm được. Nhưng làm thế nào để bạn phân tích dữ liệu hiện có và xác định rằng (thành phố, tiểu bang) -> quốc gia? Làm thế nào để bạn xác định nếu / nếu không phải mã bưu chính trên toàn cầu liên quan đến các cấu trúc này?
Chris Travers
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.