Sự cố bạn đang gặp phải, như tôi chắc chắn bạn biết, là kết quả của việc chuẩn hóa cơ sở dữ liệu. Một trong những cách tiếp cận để giải quyết vấn đề này có thể được lấy từ các kỹ thuật Kinh doanh thông minh - lưu trữ trạng thái không chuẩn hóa dữ liệu trong một số Data Warehouse.
bình thường hóa dữ liệu:
- Orders bảng
- Khách hàng Bảng
- ID khách hàng
- FirstName
- vv
- Items bảng
- ItemID
- ITEMNAME
- ItemPrice
- OrderDetails Bảng
- ItemDetailId
- OrderId
- ItemID
- ItemQty
- vv
Khi truy vấn và lưu trữ de-bình thường, bảng kho dữ liệu trông giống như
- OrderId
- ID khách hàng
- CustomerName
- CustomerAddress
- (khách hàng khác Fields)
- ItemDetailId
- ItemID
- ITEMNAME
- ItemPrice
- (Khác OrderDetail và Khoản Fields)
Điển hình, có hoặc một số loại của công việc đã lên lịch để lấy dữ liệu từ các dữ liệu chuẩn hóa vào Kho dữ liệu theo cơ sở được lập biểu, HOẶC nếu de của bạn dấu hiệu cho phép, nó có thể được thực hiện khi một đơn đặt hàng đạt đến một trạng thái nhất định. (Chẳng hạn như được vận chuyển) Có thể là các bản ghi được lưu trữ ở mỗi thay đổi trạng thái (với một trường có tên là OrderStatus đang kiểm tra trạng thái hiện tại), vì vậy dữ liệu được chuẩn hóa hoàn toàn có sẵn cho mỗi bước của quy trình làm việc/thực hiện. Thời gian và cách thức lưu trữ dữ liệu vào kho sẽ khác nhau tùy theo nhu cầu của bạn.
Có rất nhiều chi phí liên quan đến ở trên, nhưng cách tiếp cận chung khác mà tôi biết là mang nhiều chi phí hơn.
Cách tiếp cận khác sẽ là làm cho bảng chỉ đọc.Nếu khách hàng muốn thay đổi địa chỉ của họ, bạn không chỉnh sửa địa chỉ hiện tại của họ, bạn chèn một bản ghi mới.
Vì vậy, nếu địa chỉ của tôi là AddressId 12 khi tôi đặt hàng đầu tiên trên trang web của bạn trong Jamnuary, thì tôi chuyển vào ngày 4 tháng 7, tôi sẽ nhận được một AddressId mới gắn với tài khoản của mình. (Nói AddressId 123123 vì trang web của bạn rất thành công và đã thu hút được rất nhiều khách hàng.)
Đơn đặt hàng trước khi ngày 4 tháng 7 sẽ có AddressId 12 liên kết với họ và đơn đặt hàng vào hoặc sau ngày 4 tháng 7 có AddressId 123123.
Lặp lại mẫu đó với mọi bảng cần giữ lại dữ liệu lịch sử.
Tôi có cách tiếp cận thứ ba nhưng việc tìm kiếm rất khó. Tôi sử dụng nó trong một ứng dụng duy nhất, và nó thực sự hoạt động khá tốt trong trường hợp duy nhất này, trong đó có một số nhu cầu kinh doanh khá cụ thể để xây dựng lại dữ liệu chính xác như ở một thời điểm cụ thể. Tôi sẽ không sử dụng nó trừ khi tôi có nhu cầu kinh doanh tương tự.
Ở trạng thái cụ thể, hãy tuần tự hóa dữ liệu vào tài liệu Xml hoặc một số tài liệu khác mà bạn có thể sử dụng để tạo lại dữ liệu. Điều này cho phép bạn lưu các dữ liệu như nó đã được tại thời điểm nó đã được tuần tự, giữ lại cấu trúc bảng ban đầu và relaitons.
Để có tên sản phẩm duy nhất, bạn có thể thêm bảng chỉ có tên sản phẩm, trong đó tên là pk và liên kết đến bảng đó từ PRODUCT_VERSION –
@OweJessen Chắc chắn bạn có thể có bảng LATEST_PRODUCT_VERSION với NAME duy nhất, nhưng điều đó không được tính là giải pháp "khai báo", vì bạn sẽ cần phải chèn và xóa hàng theo cách thủ công trong bảng đó khi các phiên bản sản phẩm mới được tạo. Trừ khi bạn đang sử dụng một DBMS mà cả hai có thể tự động cập nhật các khung nhìn vật chất và thực thi tính duy nhất trên chúng (chẳng hạn như các khung nhìn được lập chỉ mục của MS SQL Server), do đó DBMS tự duy trì LATEST_PRODUCT_VERSION cho bạn. –