Bình thường hóa trong thế giới thực
Cơ sở dữ liệu bình thường hóa là một trong những con bò thiêng liêng của phát triển ứng dụng. Mỗi khóa học lập trình đại học bạn đã thực hiện hoặc cuốn sách bạn đã đọc có khả năng rao giảng tầm quan trọng của việc bình thường hóa cơ sở dữ liệu .
Đã đến lúc phải thách thức sự thật đó. Đôi khi nó là OK để denormalize cơ sở dữ liệu của bạn!
Khi nào bạn nên bình thường hóa?
Chuẩn hóa cơ sở dữ liệu bảo vệ tính toàn vẹn của dữ liệu của bạn. Đó là một ý tưởng tuyệt vời trong nhiều trường hợp, và bạn nên bắt đầu bất kỳ nỗ lực thiết kế cơ sở dữ liệu nào với sự bình thường trong tâm trí. Nếu bạn có thể bình thường hóa cơ sở dữ liệu của bạn, hãy tìm nó! Trong thực tế, Dưới đây là một số lời khuyên thực tế về cách bình thường hóa cơ sở dữ liệu của bạn trên trang web này:
- Đưa cơ sở dữ liệu của bạn vào biểu mẫu bình thường đầu tiên (1NF)
- Đưa cơ sở dữ liệu của bạn vào biểu mẫu bình thường thứ hai (2NF)
- Đưa cơ sở dữ liệu của bạn vào biểu mẫu bình thường thứ ba (2NF)
Điểm mấu chốt là bạn nên bình thường hóa cơ sở dữ liệu của bạn trừ khi bạn có một lý do thực sự tốt không làm như vậy. Bình thường hóa thường là thực hành thiết kế âm thanh. Nó làm giảm thông tin dư thừa, tối ưu hóa hiệu suất và giảm khả năng bạn sẽ có vấn đề về tính toàn vẹn dữ liệu do có cùng dữ liệu được lưu trữ ở các góc khác nhau trong cơ sở dữ liệu của bạn.
Một số lý do tốt để không bình thường hóa
Điều đó nói rằng, có một số lý do tốt để không bình thường hóa cơ sở dữ liệu của bạn. Hãy xem xét một vài:
- Tham gia là tốn kém . Bình thường hóa cơ sở dữ liệu của bạn thường liên quan đến việc tạo ra nhiều bảng. Trong thực tế, bạn có thể dễ dàng kết thúc với những gì bạn nghĩ là một truy vấn đơn giản kéo dài năm hoặc 10 bảng. Nếu bạn đã từng cố gắng thực hiện một sự tham gia năm bàn, bạn biết rằng nó hoạt động theo nguyên tắc, nhưng nó chậm chạp trong thực tế. Nếu bạn đang xây dựng một ứng dụng web dựa trên các truy vấn nhiều tham gia với các bảng lớn, bạn có thể thấy mình đang suy nghĩ: “Nếu chỉ có cơ sở dữ liệu này không được chuẩn hóa!” Khi bạn nghe suy nghĩ đó trong đầu, đó là thời điểm tốt để xem xét khử chuẩn hóa. Nếu bạn có thể dính tất cả các dữ liệu được sử dụng bởi truy vấn đó vào một bảng duy nhất mà không thực sự gây nguy hiểm cho tính toàn vẹn dữ liệu của bạn, hãy tìm nó! Hãy là một kẻ nổi dậy và làm mất chuẩn hóa cơ sở dữ liệu của bạn. Bạn sẽ không nhìn lại!
- Thiết kế chuẩn hóa rất khó . Nếu bạn đang làm việc với một lược đồ cơ sở dữ liệu phức tạp, có thể bạn sẽ thấy mình đập đầu vào bảng so với sự phức tạp của sự bình thường hóa. Như một quy tắc đơn giản, nếu bạn dành cả ngày cố gắng tìm ra cách để chuyển sang dạng bình thường thứ tư, bạn có thể lấy bình thường quá xa. Hãy quay lại và tự hỏi xem liệu nó có thực sự đáng tiếp tục không.
- Nhanh chóng và bẩn nên nhanh chóng và bẩn . Nếu bạn chỉ đang phát triển một nguyên mẫu, chỉ cần làm bất cứ điều gì hoạt động một cách nhanh chóng. Có thật không. Được rồi. Phát triển ứng dụng nhanh đôi khi quan trọng hơn thiết kế thanh lịch. Chỉ cần nhớ quay lại và xem xét cẩn thận thiết kế của bạn khi bạn đã sẵn sàng để vượt ra ngoài giai đoạn tạo mẫu. Giá bạn trả cho một thiết kế cơ sở dữ liệu nhanh chóng và dơ bẩn là bạn có thể cần phải vứt bỏ nó đi và bắt đầu lại khi đến lúc xây dựng để sản xuất.
- Nếu bạn đang sử dụng một cơ sở dữ liệu NoSQL , bình thường hóa không phải là mong muốn. Thay vào đó, hãy thiết kế cơ sở dữ liệu của bạn bằng cách sử dụng mô hình BASE , điều này được tha thứ hơn nhiều. Điều này rất hữu ích khi bạn đang lưu trữ dữ liệu không có cấu trúc như email, hình ảnh hoặc video.
Một số từ ngữ thận trọng
Bình thường hóa cơ sở dữ liệu nói chung là một ý tưởng tốt. Bạn nên cố gắng tuân theo các nguyên tắc bình thường hóa khi có vẻ hợp lý để làm như vậy. Nhưng nếu tất cả các chỉ báo chỉ đến việc chuẩn hóa quá phức tạp để thực hiện, hãy xem xét một cách tiếp cận sẽ hoàn thành công việc trong khi vẫn bảo vệ dữ liệu của bạn.
Cuối cùng - nếu bạn chọn đi lạc khỏi các quy tắc bình thường hóa, hãy thận trọng hơn về cách bạn thực thi tính toàn vẹn của cơ sở dữ liệu. Nếu bạn lưu trữ thông tin dư thừa, hãy đặt trình kích hoạt và các điều khiển khác để đảm bảo rằng thông tin vẫn nhất quán.