Không phải lúc nào, việc bình thường hóa đến mức chết sẽ gây ra các lần truy cập hiệu suất nhưng đúng là cá nhân tôi không áp dụng quá trình chuẩn hóa cho MongoDB giống như khi tôi làm với SQL.
Nếu bạn biết về các biểu mẫu chuẩn hóa ( http://en.wikipedia.org/wiki/Database_normalization ) Tôi thích nghĩ rằng MongoDB sẽ đi đến 1NF và sau đó quay trở lại để không chuẩn hóa lại.
Ồ vâng, chúng tôi có. Việc cập nhật sẽ rất khó khăn nếu dữ liệu bị sao chép sai.
Để tôi cho bạn một ví dụ:category
và product
sẽ là hai thực thể riêng biệt, không thể phủ nhận điều đó. Hai thực thể này được chuẩn hóa (dữ liệu lặp lại của product
đã được tách khỏi category
). Một cách nghĩ khác của nó là: Có phải tất cả các sản phẩm sẽ chỉ tồn tại trong một danh mục không?
Vì vậy, trên các thực thể cấp cao nhất, như bạn có thể thấy, các quy tắc tương tự áp dụng tương đối với 1NF dễ dàng được áp dụng cho MongoDB.
Tất nhiên, về mặt trùng lặp, bạn sẽ không muốn lưu trữ từng sản phẩm riêng biệt trong mỗi danh mục (tôi đã trả lời không cho câu hỏi ở trên) vì vậy bạn sẽ tự nhiên muốn tách biệt danh mục sản phẩm và sản phẩm.
Bạn thường có một mối quan hệ nhiều-nhiều ở đây với một bảng chuẩn hóa ở giữa. Đây là lúc mà việc khử chuẩn hóa có thể xảy ra. Bạn có thể nói rằng một danh mục sẽ có một danh sách các sản phẩm dành riêng cho danh mục đó, vì vậy bạn có thể hủy chuẩn hóa bảng quan hệ nhiều thành nhiều thành hàng danh mục dưới dạng danh sách (hoặc ngược lại vào hàng sản phẩm). Điều này sẽ không tạo ra sự trùng lặp vì danh sách đó là duy nhất cho danh mục đó (nhiều khả năng). Tất nhiên, điều này có nghĩa là danh mục hoặc sản phẩm sẽ chứa một danh sách _id
s của hàng liên quan thay vì của chính đối tượng.
Đôi khi sự trùng lặp là cần thiết, chủ yếu để tối ưu hóa hoặc giải pháp thay thế cho việc không có JOIN; quy tắc này cũng áp dụng cho SQL nếu bạn đã từng làm một trang web đủ lớn.
Các trường hợp sử dụng điển hình của sự trùng lặp là tổng hợp các trường thống kê như lượt chia sẻ và nhận xét của một bài đăng trên Facebook và thậm chí có thể 5 nhận xét mới nhất của bài đăng đó cũng sẽ được sao chép vào hàng bài đăng.
Vì vậy, nó không phải là trường hợp bỏ qua thiết kế lược đồ mà là điều chỉnh nó cho các đặc điểm của MongoDBs. Thông thường, nếu bạn làm điều đó, bạn sẽ thấy rằng bạn, một cách tự nhiên, thiết kế một lược đồ tốt.
Để tham khảo thêm, bạn có thể tham khảo tại đây: http://docs.mongodb.org/ thủ công / cốt lõi / lập mô hình dữ liệu