2010-10-06 69 views
6

thể trùng lặp:
What exactly does database normalization do?Chuẩn hóa dữ liệu là gì?

Ai đó có thể xin vui lòng làm rõ dữ liệu bình thường? Các cấp độ khác nhau là gì? Khi nào tôi nên "khử bình thường"? Tôi có thể bình thường hóa được không? Tôi có một bảng với hàng triệu hồ sơ, và tôi tin rằng tôi đã bình thường hóa nó, nhưng tôi không chắc chắn.

+2

http://en.wikipedia.org/wiki/Data_normalization - Google là tốt – riwalk

Trả lời

5

Nếu bạn có triệu cột, bạn có thể đã chuẩn hóa nó.
bình thường gì có nghĩa là

mỗi thuộc tính không quan trọng "phải cung cấp một thực tế về phím, toàn bộ chủ chốt, và không có gì nhưng chìa khóa."

Nếu bạn có cột phụ thuộc vào bất kỳ điều gì ngoài khóa, bạn nên chuẩn hóa bảng của mình.
xem here.

Đã thêm để trả lời nhận xét:
Nếu bạn có ProductID | ProductType | ProductTypeID, trong đó ProdcutTypeID chỉ phụ thuộc vào ProductType, bạn nên tạo một bảng mới cho điều đó:
ProductID | ProductTypeID và trên bảng khác: ProductTypeID | ProductTypeName.
Vì vậy, để trả lời câu hỏi của bạn, liên quan đến Sản phẩm không đủ chính xác, trong ví dụ của tôi ở trường hợp đầu tiên, tôi cũng liên quan đến Sản phẩm. Tất cả các cột phải liên kết chỉ với ProductID (bạn có thể nói chỉ mô tả sản phẩm, nhưng không mô tả bất kỳ điều gì khác, ngay cả khi nó liên quan đến sản phẩm - chính xác).
Số hàng, nói chung không liên quan.

+0

Vì vậy, nếu tôi có khóa gọi là 'ProductID' thì các cột trong bảng đó chỉ nên liên quan đến Sản phẩm? Đó là những gì 3 cấp bình thường là? Tôi có hơn một triệu bản ghi, không phải cột, btw – Moderator71

+0

Được rồi, vậy bạn gọi nó là gì khi tôi cần tạo bảng mới vì số hàng đang tăng nhanh trong bảng (tức là bảng Log)? Tôi cần tạo một bảng mới để ghi nhật ký các mục nhập, các mục nhập ngoại lệ, vv. FYI, bảng nhật ký là rất chung chung chứa LogID, LogReason, LoggedBy, LoggedOn, vv – Moderator71

+0

Đó là một câu chuyện khác. Tôi khuyên bạn nên đặt một câu hỏi mới với tất cả các chi tiết liên quan về nhật ký của bạn và chính xác bạn đang cố gắng đạt được điều gì. –

4

Việc chuẩn hóa là giảm việc sao chép dữ liệu trong cơ sở dữ liệu quan hệ. Mức phổ biến nhất là hình thức bình thường thứ ba (đó là mô tả của "khóa, toàn bộ khóa và không có gì ngoài khóa"), nhưng có rất nhiều cấp độ khác nhau, xem the Wikipedia entry để biết danh sách chính. (Trong thực tế mọi người dường như nghĩ rằng họ đang làm tốt để đạt được hình thức bình thường thứ ba.) Không chuẩn hóa có nghĩa là chấp nhận sao chép dữ liệu nhiều hơn, thường để đổi lấy hiệu suất tốt hơn.

+1

+1 để che phủ chuẩn hóa. – MaxVT

+0

+1, câu trả lời ngắn gọn cho mục đích bình thường hóa, không chỉ định nghĩa, tức là, tại sao chúng ta làm điều đó? Tôi cũng giống như đề cập đến sự không chuẩn hóa. – DCookie

0

Như những người khác cho biết việc chuẩn hóa cơ sở dữ liệu là giảm trùng lắp dữ liệu và mô hình dữ liệu chung chung hơn (có thể dễ dàng trả lời truy vấn bất ngờ vào thời gian thiết kế). Bình thường hóa một cơ sở dữ liệu là cho phép một quá trình chính thức đủ. Khi bạn được thử nghiệm, bạn chủ yếu làm theo các phương pháp phân tích dữ liệu và nhận được một cơ sở dữ liệu chuẩn hóa ở cuối.

Cơ sở dữ liệu bình thường hóa thường là một ý tưởng hay, nhưng có sự bắt giữ. Trong nhiều trường hợp nó liên quan đến việc tạo ra các bảng mới và JOIN mối quan hệ giữa các bảng. JOIN được biết là có một (rất) chi phí hiệu suất cao trong thời gian chạy, từ đó cho đến khối lượng lớn dữ liệu bạn có thể muốn không chuẩn hóa.

Chi phí khác cũng có thể là cần phải viết các yêu cầu phức tạp hơn để truy cập vào dữ liệu bạn cần và đó có thể là vấn đề đối với người mới bắt đầu SQL. Ý tưởng tốt nhất có lẽ là gắn bó với bình thường hóa (Hình thức bình thường thứ ba thường là đủ, vì có một số mức độ bình thường hóa như những người khác đã nói) và để trở nên có kỹ năng hơn với SQL.

Các vấn đề liên quan