Trong SQL Server 2008+, chúng tôi muốn bật theo dõi các thay đổi lịch sử cho bảng "Khách hàng" trong cơ sở dữ liệu hoạt động.bảng kiểm tra so với Loại 2 Từ từ thay đổi Kích thước
Đó là một bảng mới và ứng dụng của chúng tôi kiểm soát tất cả các văn bản để cơ sở dữ liệu, vì vậy chúng tôi không cần hack ác như kích hoạt. Thay vào đó, chúng ta sẽ xây dựng theo dõi thay đổi vào lớp đối tượng nghiệp vụ của mình, nhưng chúng ta cần tìm ra lược đồ cơ sở dữ liệu thích hợp để sử dụng.
Số hàng sẽ dưới 100.000 và số thay đổi trên mỗi bản ghi sẽ trung bình 1,5 mỗi năm.
Có ít nhất hai cách chúng tôi đã nhìn vào mô hình này:
Là một bảng Type 2 Slowly Changing Dimension gọi
CustomersHistory
, với các cột choEffectiveStartDate
,EffectiveEndDate
(thiết lập đểNULL
cho phiên bản hiện tại của khách hàng) và các cột kiểm tra nhưChangeReason
vàChangedByUsername
. Sau đó, chúng tôi sẽ xây dựng chế độ xemCustomers
trên bảng đó được lọc thànhEffectiveEndDate=NULL
. Hầu hết các phần của ứng dụng của chúng tôi sẽ truy vấn bằng cách sử dụng chế độ xem đó và chỉ những phần cần biết lịch sử mới có thể truy vấn bảng bên dưới. Để thực hiện, chúng tôi có thể thực hiện chế độ xem và/hoặc thêm chỉ mục được lọc vào EffectiveEndDate = NULL.Với bảng kiểm tra riêng biệt. Mọi thay đổi đối với bản ghi
Customer
ghi một lần vào bảngCustomer
và một lần nữa đến bảng kiểm traCustomerHistory
.
Từ đánh giá nhanh về câu hỏi StackOverflow, # 2 dường như phổ biến hơn nhiều. Nhưng điều này là bởi vì hầu hết các ứng dụng DB phải đối phó với các nhà văn di sản và lừa đảo?
Giả sử chúng ta bắt đầu từ một phương tiện chặn trống, ưu và khuyết điểm của một trong hai cách tiếp cận là gì? Bạn sẽ giới thiệu cái nào?
Đây là cơ sở dữ liệu OLTP không phải là kho dữ liệu riêng biệt, nhưng bảng được đề cập không thay đổi thường xuyên. –
Tôi tưởng tượng rằng một hoạt động phổ biến trong ứng dụng sẽ hiển thị danh sách các giao dịch của khách hàng nhất định. SCD 2 sẽ thực hiện thêm một gia nhập cần thiết mỗi lần - 'CustomersCurrentView WHERE Customer = 'John Doe' THAM GIA Khách hàngHistory JOIN Transactions'. Đề nghị của tôi là - nếu dữ liệu lịch sử không được sử dụng thường xuyên, hãy giữ trong một bộ bảng kiểm toán riêng biệt; xem xét SCD 2 chỉ khi các thành phần nhận thức lịch sử cấu thành một phần quan trọng của ứng dụng. 1 cho một câu hỏi rất thú vị! –