Tôi đã được đưa lên trường cũ - nơi chúng tôi đã học cách thiết kế lược đồ cơ sở dữ liệu TRƯỚC KHI lớp kinh doanh của ứng dụng (hoặc sử dụng OOAD cho mọi thứ khác). Tôi đã khá giỏi với việc thiết kế các lược đồ (IMHO :) và chỉ được chuẩn hóa để loại bỏ sự dư thừa không cần thiết nhưng không ảnh hưởng đến tốc độ tức là nếu tham gia là một điểm nhấn hiệu suất, thì sự dư thừa đã được giữ nguyên. Nhưng chủ yếu là không.
Với sự ra đời của một số khung ORM như ActiveRecord của Ruby hoặc ActiveJDBC (và một số khác tôi không thể nhớ, nhưng tôi chắc chắn có rất nhiều) có vẻ như họ thích có khóa thay thế cho mọi bảng ngay cả khi một số có khóa chính như 'email' - phá vỡ 2NF hoàn toàn. Được rồi, tôi hiểu không quá nhiều, nhưng điều đó làm tôi lo lắng (gần như) khi một số ORM này (hoặc lập trình viên) không thừa nhận 1-1 hoặc 1-0 | 1 (tức là 1 đến 0 hoặc 1). Họ quy định rằng sẽ tốt hơn nếu có mọi thứ như một bàn lớn cho dù nó có hàng tấn nulls
"hệ thống ngày nay có thể xử lý nó" là nhận xét mà tôi đã nghe thường xuyên hơn.
Tôi đồng ý rằng các hạn chế về bộ nhớ có mối tương quan trực tiếp với chuẩn hóa (cũng có những lợi ích khác :) nhưng trong thời đại ngày nay với bộ nhớ giá rẻ và máy lõi tứ có phải là khái niệm về chuẩn hóa DB chỉ để lại các văn bản? Là các DBA, bạn vẫn thực hành chuẩn hóa thành 3NF (nếu không phải BCNF :)? Có vấn đề gì không? Thiết kế "lược đồ bẩn" có tốt cho các hệ thống sản xuất không? Làm thế nào một người nên làm cho trường hợp "cho" bình thường hóa nếu nó vẫn còn liên quan.
( Lưu ý: Tôi không nói về các lược đồ sao / bông tuyết của datwarhouse có dự phòng như một phần / nhu cầu của thiết kế nhưng các hệ thống thương mại có cơ sở dữ liệu phụ trợ như StackExchange chẳng hạn)