Tôi tưởng tượng rằng việc không chuẩn hóa quá nhiều sẽ lãng phí không gian và thời gian
Không gian không phải lo lắng trong hầu hết các ứng dụng OLTP dòng doanh nghiệp cỡ trung bình. Vì vậy, hãy để không gian sang một bên. Thời gian và theo thời gian tôi giả sử bạn có nghĩa là hiệu suất của truy vấn, đó là điều thường có thể được tăng cường và không gây ra vấn đề thực sự trừ khi bạn có thiết kế xấu, không đủ tài nguyên, cơ sở dữ liệu cực lớn, số lượng giao dịch rất lớn hoặc tất cả ở trên. Hầu hết các ứng dụng sử dụng cơ sở dữ liệu ngày nay hiếm khi gặp vấn đề về hiệu năng chỉ vì cơ sở dữ liệu được Chuẩn hóa.
đốm khổng lồ được nhân đôi hoặc vì khó duy trì tính nhất quán vì bạn phải cập nhật nhiều trường bằng giao dịch.
Bình thường hóa cơ sở dữ liệu của bạn đảm bảo với bạn rằng bạn thiết kế sẽ:
Không có dữ liệu dư thừa.
Không gây ra số lượng lớn bệnh viêm ruột đăng nhập (ví dụ: có 2 triệu khách hàng: CẬP NHẬT Đặt khách hàng Quốc gia = "Hoa Kỳ" WHERE Country = "US")
Được hỗ trợ đầy đủ là Truy vấn SQL. Điểm này rất quan trọng.
Sẽ lái mã ứng dụng sạch.
Buộc một mức độ cao nhất quán dữ liệu thông qua cơ sở dữ liệu mà không làm gánh nặng ứng dụng.
Chia sẻ các quy tắc kinh doanh được xác định trong cơ sở dữ liệu bởi các ứng dụng khác nhau mà không cần mã hóa cùng một mã trong các ứng dụng khác nhau.
Phải nói rằng, Chuẩn hóa tạo ra cấu trúc tối ưu cho tất cả các cột và bảng. Điều này có thể không phải lúc nào bạn cũng cần trong ứng dụng cụ thể của mình, sau đó bạn có thể xác định, dựa trên sự hiểu biết về tên miền và ứng dụng của bạn, để bình thường hóa một số bảng / cột như một sự đánh đổi tốc độ. Tuy nhiên, đó sẽ là một quyết định có ý thức hơn là một sự giám sát.
Đưa ra bộ 3NF FD và một bộ truy vấn, làm cách nào để dự đoán tốc độ giảm tốc độ / bình thường hóa?
Bạn không thể dự đoán chính xác hiệu suất mà không cần kiểm tra (điều bạn có thể làm trước khi viết mã ứng dụng). Tuy nhiên, bạn có thể loại bỏ và phát hiện các yếu tố dẫn đến hiệu suất kém theo thiết kế. Ví dụ: bạn có thể xác định chiến lược chỉ mục nào sẽ sử dụng như sau (các kỹ thuật khác có thể tồn tại):
Xây dựng một ma trận các truy vấn và các cột bị ảnh hưởng bởi các truy vấn đó.
Tìm các cột được sử dụng nhiều nhất.
Xem xét xây dựng các chỉ mục trên các cột.
Đây chủ yếu là một công việc mà DBA của bạn có thể hỗ trợ bạn. Có nhiều hiệu suất hơn bình thường hóa. Có các khía cạnh của phân phối dữ liệu trên khối lượng đĩa, chia bảng dọc, phân vùng, loại chỉ mục và bộ đệm chỉ mục để đặt tên cho một số. Tất cả các kỹ thuật như vậy nên được giải quyết trong sách và tài liệu của nhà cung cấp trong các chủ đề "Thiết kế cơ sở dữ liệu" và "Điều chỉnh hiệu suất cơ sở dữ liệu". Tất cả các cuộc thảo luận ở trên giả định ứng dụng của bạn là một ứng dụng OLTP.