Khi thiết kế lược đồ cơ sở dữ liệu quan hệ cho các ứng dụng web, tôi thường tìm thấy một trường hợp cuối cùng tôi tạo một bảng chỉ để chứa một hàng và chỉ một hàng. Cảm giác như đó là cách sai để thiết kế nó, nhưng tôi không thể tìm ra thứ gì tốt hơn đáng kể, hoặc đó rõ ràng là "cách đúng đắn để làm điều đó".
Một ví dụ gần đây là một trang web cho phép người dùng kiểm soát nội dung theo cách thủ công trên trang chủ. Chà, chỉ có một trang chủ. Tôi đã tạo một bảng có tất cả các trường cần thiết để xây dựng trang chủ, chẳng hạn như trường văn bản cho một khu vực có chứa văn bản mô tả. Một trường để lưu trữ tên của một tệp hình ảnh lớn. Một số khóa ngoại trỏ đến các bài viết sẽ được giới thiệu trên trang chủ, v.v. Nó hoạt động, nhưng cảm thấy sai khi có một bảng chỉ với một hàng.
Trước đây, tôi đã thử nhiều thiết kế khác, chẳng hạn như cho phép nhiều hàng trong bảng trang chủ và chọn ngẫu nhiên một hàng. Tôi đã thử thêm một trường boolean có tên là "hoạt động" và chọn một trong những trang chủ hoạt động một cách ngẫu nhiên. Tôi đã cố gắng chỉ buộc một hàng hoạt động tại bất kỳ thời điểm nào trong logic ứng dụng. Tôi đã cố gắng thậm chí không tạo một bảng trang chủ và có tất cả các mục khác, chẳng hạn như các bài viết, để có các trường boolean với các tên như đặc trưng_on_homepage.
Trong hầu hết các trường hợp, tôi có thể xây dựng trang chủ với một loạt các hằng số trong tệp cài đặt. Vấn đề chính với tệp cài đặt là nó nằm dưới sự kiểm soát của nhà phát triển. Bởi vì một cái gì đó giống như nội dung của trang chủ là thứ được người dùng chỉnh sửa, nó phải đi vào cơ sở dữ liệu.
Trên nhiều trang web, tôi không gặp phải vấn đề này vì tôi có thể xây dựng những thứ như trang chủ bằng một truy vấn như chọn năm bài viết mới nhất. Nhưng khi tôi có các trang được quản lý thủ công với các yêu cầu nghiêm ngặt, việc mô hình hóa nó trong cơ sở dữ liệu trở nên khó khăn. Nhưng hãy tưởng tượng bạn đã có một bảng ảnh và một bảng bài viết. Yêu cầu là trang chủ sẽ hiển thị chính xác năm ảnh, chính xác ba bài viết và hai khối văn bản tùy ý do người dùng điều khiển thủ công. Làm thế nào để bạn mô hình hóa rằng trong cơ sở dữ liệu đúng cách?
Ngoài ra, tôi có vấn đề mô hình hóa này trong nhiều trường hợp khác ngoài trang chủ. Đó chỉ là ví dụ đơn giản và dễ áp dụng nhất mà tôi có thể đưa ra.