14

Tôi là thành viên của nhóm xây dựng Hệ thống quản lý nội dung mới cho trang web công cộng của chúng tôi. Tôi đang cố gắng tìm cách dễ nhất và tốt nhất để xây dựng trong cơ chế Kiểm soát sửa đổi. Mô hình đối tượng khá cơ bản. Chúng tôi có lớp "BaseArticle" trừu tượng bao gồm các thuộc tính cho dữ liệu độc lập/meta phiên bản, chẳng hạn như "Heading" & "CreatedBy". Một số lớp kế thừa từ điều này, chẳng hạn như "DocumentArticle" có thuộc tính "URL" sẽ là đường dẫn đến tệp. "WebArticle" cũng kế thừa từ "BaseArticle" và bao gồm thuộc tính "ExtrasInfo" và tập hợp các đối tượng "Tabs", bao gồm "Body" sẽ giữ HTML được hiển thị (đối tượng Tab không lấy được từ bất kỳ thứ gì). "NewsArticle" và "JobArticle" kế thừa từ "WebArticle". Chúng ta có các lớp dẫn xuất khác, nhưng chúng cung cấp đủ ví dụ.Làm cách nào để thiết kế cơ sở dữ liệu với Lịch sử sửa đổi?

Chúng tôi đưa ra hai ứng dụng để duy trì sự kiểm soát sửa đổi. Tôi gọi những "Approach1" và "Approach2". Tôi đã sử dụng SQL Server để làm một sơ đồ cơ bản của mỗi: Database Diagram of Approach 1Database Diagram of Approach 2

Với phương pháp tiếp cận1, kế hoạch sẽ dành cho các phiên bản mới của bài viết được duy trì thông qua cơ sở dữ liệu Cập nhật. Trình kích hoạt sẽ được đặt cho các bản cập nhật và sẽ chèn dữ liệu cũ vào bảng xxx_Versions. Tôi nghĩ rằng một kích hoạt sẽ cần phải cấu hình trên mỗi bảng. Cách tiếp cận này không có lợi thế là chỉ có phiên bản "đầu" của mỗi bài viết được tổ chức trong các bảng chính, với các phiên bản cũ được hived off. Điều này giúp bạn dễ dàng sao chép các phiên bản đầu bài viết từ cơ sở dữ liệu phát triển/dàn dựng sang Live.

Với phương pháp 2, kế hoạch sẽ dành cho các phiên bản mới của Bài viết được chèn vào cơ sở dữ liệu. Phiên bản đầu của bài viết sẽ được xác định thông qua các khung nhìn. Điều này dường như có lợi thế là ít bảng hơn và ít mã hơn (ví dụ: không kích hoạt). Lưu ý rằng với cả hai cách tiếp cận, kế hoạch sẽ là gọi thủ tục lưu sẵn Upsert cho bảng được ánh xạ tới đối tượng có liên quan (chúng ta phải nhớ xử lý trường hợp của một Điều mới được thêm vào). Thủ tục lưu trữ upsert này sẽ gọi cho lớp mà từ đó nó xuất phát, ví dụ: upsert_NewsĐiều khoản sẽ gọi upsert_WebArticle, v.v.

Chúng tôi đang sử dụng SQL Server 2005, mặc dù tôi nghĩ câu hỏi này là độc lập với sở thích của cơ sở dữ liệu. Tôi đã thực hiện một số hoạt động rà soát trên Internet và đã tìm thấy các tham chiếu cho cả hai cách tiếp cận. Nhưng tôi đã không tìm thấy bất cứ điều gì so sánh hai và cho thấy một hay khác để được tốt hơn. Tôi nghĩ rằng với tất cả các cuốn sách cơ sở dữ liệu trên thế giới, lựa chọn phương pháp tiếp cận này phải có trước đây.

Câu hỏi của tôi là: Phương pháp tiếp cận nào sau đây là tốt nhất và tại sao?

+0

Bạn đã cân nhắc mua CMS và tùy chỉnh nó chưa? Chúng rất khó và tốn thời gian để xây dựng tốt. Nó có thể kết thúc là khá tốn kém. –

+0

Nó chắc chắn trở nên khá phức tạp khi bạn di chuyển từ tầm nhìn đến việc thực hiện. Nhưng tôi nghĩ rằng chúng tôi có những kỹ năng để xây dựng những gì chúng tôi cần ... Tôi chỉ muốn chắc chắn rằng chúng tôi làm phụ trợ cũng như chúng tôi có thể. Hơn nữa, nếu chúng tôi chọn một giải pháp không có giá trị, tôi vẫn được để lại câu hỏi lý thuyết về Phương pháp tiếp cận: - (BTW, xem các bình luận của tôi về bài viết của Blender để liên kết đến các trang thú vị. – daniel

Trả lời

4

Tôi muốn tranh luận Cách tiếp cận 2. Nó đơn giản hơn, nó có vẻ dễ thực hiện hơn nhiều, và nó cung cấp chức năng giống như Phương pháp tiếp cận 1.

Tôi có thể thêm gì nữa?

+1

Xin chào Phản ứng ruột của tôi là của bạn - Approach2 là đơn giản nhất, nhưng một cơ quan quan trọng đáng kể thúc đẩy Appraoch1.Xin vui lòng xem lại [Greenspun] (http://philip.greenspun.com/seia/content-management). là hai cách cổ điển để thực hiện một đường mòn kiểm tra trong một RDBMS "phù hợp với vấn đề của tôi.Anh ta không rõ ràng, nhưng cung cấp các ví dụ cho Approach1 ngụ ý anh ta thích nó. Tôi tìm kiếm một phương pháp để cân bằng tài nguyên máy tính v mã đơn giản. Một vấn đề bình thường nhưng một trong những tôi hy vọng đã được giải quyết dứt khoát cho trường hợp đặc biệt này. – daniel

+0

BTW, CMS phát triển nhất mà tôi đã có thể tìm thấy một lược đồ cho cái này - [schema] (http://upload.wikimedia.org/wikipedia/commons/b/b7/MediaWiki_database_schema_1-17_%28r82044%29 .png). Họ dường như sử dụng Approach2, nhưng hive xóa bài viết ra một bảng "Archieve". – daniel

Các vấn đề liên quan