Nếu tôi đang sử dụng RDBMS (ví dụ: SQL Server) để lưu trữ dữ liệu tìm nguồn sự kiện, lược đồ có thể trông như thế nào?
Tôi đã thấy một vài biến thể được nói đến theo nghĩa trừu tượng, nhưng không có gì cụ thể.
Ví dụ: giả sử một người có thực thể "Sản phẩm" và các thay đổi đối với sản phẩm đó có thể ở dạng: Giá, Chi phí và Mô tả. Tôi bối rối về việc liệu tôi có nên:
- Có bảng "ProductEvent", có tất cả các trường cho một sản phẩm, trong đó mỗi thay đổi có nghĩa là một bản ghi mới trong bảng đó, cộng với "ai, cái gì, ở đâu, tại sao, khi nào và như thế nào" (WWWWWH). Khi chi phí, giá cả hoặc mô tả được thay đổi, một hàng hoàn toàn mới sẽ được thêm vào để đại diện cho Sản phẩm.
- Lưu trữ Chi phí, Giá và Mô tả sản phẩm trong các bảng riêng biệt được nối với bảng Sản phẩm có mối quan hệ khóa ngoài. Khi các thay đổi đối với các thuộc tính đó xảy ra, hãy viết các hàng mới với WWWWWH nếu thích hợp.
- Lưu trữ WWWWWH, cùng với một đối tượng được tuần tự hóa đại diện cho sự kiện, trong bảng "ProductEvent", có nghĩa là bản thân sự kiện phải được tải, hủy tuần tự hóa và phát lại trong mã ứng dụng của tôi để tạo lại trạng thái ứng dụng cho một Sản phẩm nhất định .
Riêng tôi lo lắng về phương án 2 ở trên. Nhìn chung, bảng sản phẩm sẽ gần như là một bảng cho mỗi thuộc tính, nơi để tải Trạng thái ứng dụng cho một sản phẩm nhất định sẽ yêu cầu tải tất cả các sự kiện cho sản phẩm đó từ mỗi bảng sự kiện sản phẩm. Vụ nổ bàn này có mùi không đúng với tôi.
Tôi chắc chắn rằng "điều đó còn tùy thuộc", và mặc dù không có "câu trả lời đúng" duy nhất, tôi đang cố gắng cảm nhận điều gì có thể chấp nhận được và điều gì hoàn toàn không thể chấp nhận được. Tôi cũng biết rằng NoSQL có thể trợ giúp ở đây, nơi các sự kiện có thể được lưu trữ dựa trên một gốc tổng hợp, nghĩa là chỉ một yêu cầu duy nhất đến cơ sở dữ liệu để nhận các sự kiện để xây dựng lại đối tượng, nhưng chúng tôi không sử dụng db NoSQL tại thời điểm nên tôi đang tìm kiếm các lựa chọn thay thế.