Tôi đã gặp sự cố tương tự - các tệp phẳng lớn được nhập vào cơ sở dữ liệu mỗi ngày một lần. Hầu hết dữ liệu là không thay đổi.
Thêm hai cột bổ sung vào bảng, ngày bắt đầu và ngày kết thúc. Giá trị mặc định cho end_date phải là một lúc nào đó trong tương lai.
Để so sánh một tệp với tệp tiếp theo, hãy sắp xếp cả hai theo các cột chính, sau đó đọc một hàng từ mỗi tệp.
- Nếu các khóa bằng nhau:so sánh phần còn lại của các cột để xem liệu dữ liệu có thay đổi hay không. Nếu dữ liệu hàng bằng nhau, hàng đó đã có trong cơ sở dữ liệu và không cần làm gì; nếu nó khác, hãy cập nhật hàng hiện có trong cơ sở dữ liệu với ngày kết thúc của ngày hôm nay và chèn một hàng mới với ngày bắt đầu của ngày hôm nay. Đọc một hàng mới từ cả hai tệp.
- Nếu khóa từ tệp cũ nhỏ hơn:hàng đã bị xóa. Cập nhật ngày cuối cùng thành ngày hôm nay. Đọc một hàng mới từ tệp cũ.
- Nếu khóa từ tệp mới nhỏ hơn:một hàng đã được chèn. Chèn hàng vào cơ sở dữ liệu với ngày bắt đầu của ngày hôm nay. Đọc một hàng mới từ tệp mới.
Lặp lại cho đến khi bạn đọc mọi thứ từ cả hai tệp.
Bây giờ để truy vấn các hàng hợp lệ vào bất kỳ ngày nào, chỉ cần chọn với mệnh đề where test_date giữa start_date và end_date.