Bạn nên đi bao xa với bình thường hóa?


30

Tôi có một lượng dữ liệu kha khá trong cơ sở dữ liệu. Tôi có các bảng được hình thành tốt và mối quan hệ tốt giữa chúng với một số dư thừa trong dữ liệu của tôi. Nhưng tôi nên đi bao xa với bình thường hóa? Có những hạn chế về hiệu suất để quá nhiều bình thường hóa?

Câu trả lời:


37

Bạn nên đi xa như bạn nên, và không có thêm. Tất nhiên. ~ Vấn đề có thể là đây là một chút nghệ thuật, và đó là lý do tại sao đây không phải là một khoa học thuần túy.

Sản phẩm chính của chúng tôi là một hệ thống phân tích và báo cáo, và vì vậy về mặt đó, chúng tôi có khá nhiều hồ sơ chi tiết. Ban đầu chúng tôi đã thiết kế nó với rất nhiều phép nối trên một ID chung cho một số hồ sơ con, nhưng chúng tôi thấy rằng nếu chúng tôi không chuẩn hóa một vài trường, chúng tôi có thể cắt bỏ RẤT NHIỀU tham gia và chúng tôi có thể loại bỏ rất nhiều vấn đề đau đầu về hiệu suất.

Nhưng chúng tôi chỉ biết rằng vì chúng tôi 1) đã tạo ra một thiết kế "bình thường hóa", 2) bắt đầu sử dụng nó, 3) mô tả hiệu suất thực tế sau hàng trăm triệu hàng trên hàng chục bảng.

Câu chuyện cuối cùng là cho đến khi chúng ta cấu hình chúng ta không thể biết chắc chắn điều gì đang xảy đến làm việc cho chúng ta. Chúng tôi thích ý tưởng bình thường hóa để chúng tôi có thể cập nhật dễ dàng hơn, nhưng cuối cùng hiệu suất thực tế là yếu tố quyết định. Đó là lời khuyên của tôi dành cho bạn: Hồ sơ, hồ sơ, hồ sơ.


4
nghệ thuật và không phải là một khoa học cho tôi tin rằng đó là voodoo. Bất kỳ tài liệu tham khảo?
hủy bỏ

3
@ Tin như thế nào về giai thoại của tôi nói chung? Một hồ sơ có thể có thể đề xuất các quy tắc cho việc không chuẩn hóa, nhưng các quy tắc đó đến từ một lập trình viên từ kinh nghiệm. Tất cả lập trình là một nghệ thuật. Tôi sẽ tìm thấy một người nổi tiếng hơn nói điều tương tự khi tôi đến một bàn phím đầy đủ sau này.
jcolebrand

1
@A tin ồ thì tốt rồi in ('forgiven','pardoned');): p
jcolebrand

2
@Fergus rất vui vì bạn thích nó. Tôi luôn thấy những giai thoại hoạt động tốt nhất.
jcolebrand

2
@abel - 'Nghệ thuật là một môn khoa học có hơn 7 độ tự do'. Vượt quá một mức độ phức tạp nhất định, các cách tiếp cận toàn diện đối với một vấn đề trở nên không khả thi. Tại thời điểm đó phương pháp tiếp cận dựa trên kinh nghiệm là hiệu quả nhất. Đáng buồn thay, trong lĩnh vực điện toán, mức độ phức tạp đó khá dễ dàng để đạt được trên bất cứ thứ gì ngoại trừ các hệ thống phần mềm tầm thường.
Mối quan tâmOfTunbridgeWells

10

Chuẩn hóa chỉ là mục tiêu khi nó hỗ trợ mô hình dữ liệu của bạn đủ tốt để đảm bảo nó. Nó có nghĩa là một hướng dẫn để cho phép tăng trưởng, quản lý và bảo trì. Hãy nhớ rằng cuốn sách về bình thường hóa, cũng không phải là tác giả của nó sẽ xây dựng hoặc duy trì cơ sở dữ liệu của bạn hoặc ứng dụng của nó.

Một bài đọc tốt về chủ đề "quá nhiều bình thường hóa" là ở đây.

Và, vâng, có thể có tác động hiệu suất đến quá nhiều bình thường hóa. Điều này sẽ nằm trong bảng duyệt sâu hơn để chọn những thứ như bảng chỉ báo trạng thái khi chúng được kéo ra một bảng riêng biệt. Một số người sẽ nói điều này thường bị phủ định ở tốc độ cập nhật (thay đổi văn bản trạng thái từ "Tốt" thành "TỐT" hoặc một cái gì đó tương tự) hoặc trong khả năng duy trì.


2
Đây là một bài đọc tốt về chủ đề này và thú vị hơn nhiều qntm.org/gay
jcolebrand

5

Tôi khuyên bạn nên đọc phần phụ lục sau đây được tìm thấy trong một vài cuốn sách gần đây của Chris Date :

Hai cổ vũ cho bình thường hóa

Bình thường hóa không phải là thuốc chữa bách bệnh, vì chúng ta có thể dễ dàng nhìn thấy bằng cách xem xét mục tiêu của nó là gì và mức độ chống lại chúng ...

Tôi phải làm rõ rằng tôi không muốn bình luận của mình trong phần này được coi là bất kỳ kiểu tấn công nào. Tôi tin chắc rằng bất cứ điều gì ít hơn một thiết kế hoàn toàn bình thường đều bị chống chỉ định mạnh mẽ ...


2

Tôi nghĩ điều quan trọng không kém là xem xét các bất thường được thêm vào rõ ràng, hoặc thêm các giá trị tổng hợp hoặc một số trường từ bảng chính được sao chép vào một bản sao chi tiết.

Đối số chủ yếu là một số đối số hiệu suất.

Nếu bạn thực thi như vậy, các trường đó được cập nhật bởi các trình kích hoạt và tùy thuộc vào cơ sở dữ liệu để giữ cho chúng nhất quán.


2

Tôi hoàn toàn đồng ý với @jcolebrand. Khi bạn thiết kế mô hình cho ứng dụng của mình, bạn nên bình thường hóa mọi thứ bạn có thể. Nhưng sau đó, bạn nên lập hồ sơ các truy vấn được xây dựng trên mô hình của mình, đặc biệt là các truy vấn được thực hiện thường xuyên.

Kinh nghiệm của riêng tôi: các thuộc tính cần có hai phép nối để đạt được (có nghĩa là ba bảng được nối) sẽ chủ yếu là một con lợn hiệu suất. Và để làm cho mọi thứ tồi tệ nhất, nó được sử dụng trong các giao dịch trực tuyến. Tôi không chuẩn hóa thuộc tính, vì vậy nó chỉ cần một lần tham gia và yêu cầu lập trình viên điều chỉnh ứng dụng của họ cho truy vấn và cập nhật thuộc tính. Bây giờ nó hoạt động tốt hơn nhiều ...

Nói cách khác, bạn nên cân bằng chuẩn hóa với hiệu suất.

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.