Tôi đã làm việc trên một dự án đòi hỏi phải có dự thảo/phiên bản sống của nội dung và đã nghĩ đến một thiết kế như sau:Draft/Nội dung trực tuyến Cơ sở dữ liệu Thiết kế hệ thống
Article
ID
Creator
CreationDate
DraftContent(fk to ArticleContent)
PublicContent(fk to ArticleContent)
IsPendingApproval
ArticleContent
Title
Body
Tôi tự hỏi nếu nó sẽ là tốt hơn để thay đổi các khóa nước ngoài khi một bài báo được xuất bản hoặc nếu tốt hơn là chỉ cần sao chép nội dung từ bảng dự thảo sang bảng trực tiếp.
Mọi đề xuất?
Chỉnh sửa: Cả bản nháp và phiên bản trực tiếp đều tồn tại cùng một lúc mặc dù phiên bản trực tiếp là phiên bản duy nhất hiển thị công khai. Chỉ có thể có một bản nháp và một bảng trực tiếp
Một phần lý do cho thiết kế này là buộc người dùng phải chấp thuận các bài viết của họ trước khi chúng được phát hành trực tiếp.
Cập nhật:
Chúng tôi quyết định sử dụng giải pháp của Kieren với sửa đổi nhỏ. Thay vì sử dụng một cột cho các mục như IsPublished IsLive, chúng tôi quyết định sử dụng một cột trạng thái đơn. Nếu không, thiết kế vẫn giữ nguyên.
+1, "một bảng bài viết, với bảng nội dung riêng biệt" thực sự là cách để bay tại đây. –
Có khả năng rất dễ dàng - mỗi ArticleVersion sẽ có một ApprovedBy/ApprovedDate, nó không thể được đặt thành phiên bản hiện tại nếu đó là null (trong logic nghiệp vụ)? –
Thay vì có một số phiên bản sẽ không tốt hơn để làm một ngày sửa đổi và ngày tạo cho hàng phiên bản? Bằng cách đó, người dùng có thể sửa đổi bản nháp cho đến khi mặt trời lặn và nó chỉ hiển thị một phiên bản khác khi trang được xuất bản? –