Tôi sẽ sớm bắt đầu làm việc trên một dự án (từ thông số kỹ thuật) nhắc tôi một chút về StackOverflow. Về cơ bản, một ứng dụng web có nội dung do người dùng kiểm soát.Thực hiện kiểm soát phiên bản của các đối tượng DB
Một trong những tính năng giúp tôi khám phá vòng kết nối trong tâm trí của mình là kiểm soát phiên bản. Ở đây trên StackOverflow, mỗi câu hỏi và câu trả lời có thể có nhiều bản sửa đổi. Điều này là khá đơn giản để thực hiện khi bạn chỉ có một loại đối tượng (và, trong trường hợp này là văn bản của nó).
Vì vậy, đối với các trang đơn giản của tôi, tôi đã được đặt.
Sự cố xảy ra khi tôi xem xét rằng một số đối tượng cần được kiểm soát phiên bản có mối quan hệ. Để cung cấp ví dụ cụ thể, hãy để tôi chọn một miền ngẫu nhiên mang tính hậu môn:
Cho phép nói rằng tôi đang triển khai trang web giống như Wiki để theo dõi thông tin sách/tác giả. Trọng tâm chính của trang web là tạo và cập nhật các trang "Tác giả", trong đó, dưới dạng văn bản, khá đơn giản (như trên). Tuy nhiên, chúng ta hãy thêm một liên kết một-nhiều giữa các tác giả và sách (nói cách khác, sách sẽ là các đối tượng riêng biệt, rõ ràng là một người có thể viết nhiều sách). Mỗi cuốn sách sẽ có một liên kết từ trang Tác giả đến một trang thông tin về cuốn sách đó.
Đối với người dùng, có rất ít sự khác biệt giữa "tóm tắt" dựa trên văn bản mô tả tác giả và liên kết giữa tác giả đó & tác phẩm của họ. Do đó, chúng tôi có yêu cầu triển khai tính năng "sửa đổi"/chỉnh sửa cho trang tác giả, trang sách, và liên kết giữa tác giả và sách. Nói cách khác, người dùng có thể chỉnh sửa, xem lịch sử và các trang tác giả rollback, các trang sách và các liên kết giữa hai trang.
Điều này càng trở nên phức tạp hơn khi mối quan hệ đó trở thành nhiều, nhiều nơi mà nhiều tác giả có thể được liệt kê là đã đóng góp cho một cuốn sách.
Tôi có một số giải pháp, nhưng không có giải pháp nào trong số đó như tôi muốn (và liên quan đến ít nhất một số mã lặp lại/lưu trữ dữ liệu dự phòng), và mặc dù tôi thấy tính phổ biến trên toàn bộ địa điểm ở đây, tôi cảm thấy rằng tôi đã không thực sự có thể giải nén nó tốt nhất, đặc biệt là ở cấp độ cơ sở dữ liệu. Tôi không muốn thiên vị các câu trả lời được đưa ra vì vậy tôi sẽ không cung cấp cho họ ngay lập tức.
Vì vậy, bạn sẽ thiết kế hệ thống này ở cấp cơ sở dữ liệu như thế nào? Tôi đang tìm thông số kỹ thuật bảng ở đây và có thể mô tả cách bạn sẽ sử dụng chúng, nếu nó không rõ ràng ngay lập tức. Đối với những câu trả lời mà nó có thể có liên quan, tôi sẽ được sử dụng ASP.NET và hoặc là LINQ-to-SQL (Tôi cảm thấy thoải mái với nhiều-to-nhiều trong LTS) hoặc Entity Framework.
EDIT: Để làm rõ, tôi hiểu thiết kế DB cơ bản, chuẩn hóa, nhiều bảng lập bản đồ, v.v ... Tôi đang tìm giải pháp sạch cho tình huống cụ thể này.
CHỈNH SỬA 2: Tôi đang tìm giải pháp có thể tổng quát, vì có thể có nhiều đối tượng phụ trong hệ thống hơn là chỉ sách. Tác giả có thể liên quan đến các tác giả, tạp chí, sự kiện khác, v.v. v.v. Tôi cảm thấy mình đang lặp lại rất nhiều công việc nếu tôi triển khai lịch sử riêng cho từng tác phẩm.
@JoshJordan: Đừng xin lỗi. Sửa chữa câu hỏi để được nhiều hơn đến điểm. –