Có một nghịch lý dễ thấy khi bảo trì dữ liệu quốc gia: càng để lâu mà không ai báo lỗi, bạn càng dễ tin rằng dữ liệu đang đúng. Nhưng dữ liệu loại này thường không sai vì lỗi nhập liệu, mà lùi dần vì thực tế bên ngoài thay đổi. Bài này bàn về cách làm cho việc lùi đó trở nên nhìn thấy được, thay vì phát hiện ra khi đã quá muộn.
Vì sao dữ liệu quốc gia lại cũ đi?
Một bản ghi dữ liệu quốc gia chứa nhiều loại thông tin, và mỗi loại cũ đi theo một tốc độ khác nhau. Tên gọi và mã định danh khá ổn định, nhưng vẫn có thể thay đổi. Các đơn vị hành chính trung gian thay đổi thường xuyên hơn nhiều. Tiền tệ và các quy định liên quan có thể đổi theo quyết định hành chính.
Vì các lớp thay đổi với tốc độ khác nhau, một mốc cập nhật duy nhất cho toàn bộ hồ sơ sẽ không đủ. Có phần bạn cần xem lại mỗi năm, có phần chỉ cần xem lại khi có tin tức về thay đổi, và có phần gần như không bao giờ cần chạm tới.
Điều này dẫn tới một yêu cầu về cấu trúc dữ liệu: mốc thời gian phải gắn với từng nhóm thông tin, chứ không chỉ gắn với cả hồ sơ. Nếu bạn chỉ có một trường ngày cho cả hồ sơ, bạn sẽ không biết phần nào đã được xem lại và phần nào thì chưa.
Cũng cần phân biệt hai loại cũ. Loại thứ nhất là cũ so với thực tế, nghĩa là dữ liệu đã sai. Loại thứ hai là cũ so với kỳ vọng của người đọc, nghĩa là dữ liệu vẫn đúng nhưng trông lỗi thời. Loại thứ hai không cần sửa, chỉ cần giải thích.
Đổi tên, đổi tiền tệ và điều chỉnh đơn vị hành chính
Ba loại thay đổi này chiếm phần lớn khối lượng công việc bảo trì, và mỗi loại có một cách xử lý khác nhau.
Thay đổi về tên gọi thường xảy ra kèm với một giai đoạn chuyển tiếp, trong đó cả tên cũ và tên mới đều có thể gặp trong dữ liệu. Trong giai đoạn đó, hệ thống phải nhận ra cả hai, nhưng chỉ nên hiển thị một. Nếu bạn gỡ tên cũ ra quá sớm, dữ liệu lịch sử sẽ trỏ tới hư không.
Thay đổi về tiền tệ gây hậu quả lớn hơn vì nó chạm tới các con số đã được lưu. Điều quan trọng là phân biệt giá trị được ghi tại thời điểm giao dịch với giá trị được hiển thị hôm nay. Trộn hai thứ này sẽ khiến các báo cáo lịch sử bị đổi nghĩa.
Thay đổi về đơn vị hành chính trung gian là loại phức tạp nhất, vì nó có thể tách một đơn vị thành hai, gộp hai thành một, hoặc chỉ đổi ranh giới mà giữ nguyên tên. Mỗi kiểu đều có cách xử lý riêng, và không có cách nào hoạt động cho cả ba.
Một số nơi có quy định riêng về mã bưu chính và số giấy tờ, và phần đó được trình bày kỹ hơn trong bài thuộc chuyên mục địa chỉ; ở đây chỉ cần nhớ rằng những thay đổi loại này cũng cần được theo dõi riêng.
Vì sao ngày lấy dữ liệu phải được lưu lại
Ngày lấy dữ liệu không phải là thông tin hành chính, mà là một phần của dữ liệu. Không có nó, bạn không thể trả lời câu hỏi vì sao hệ thống đã hành xử như vậy vào thời điểm đó.
Hãy tưởng tượng có người hỏi vì sao một đơn hàng cũ được xử lý theo cách khác với hiện nay. Nếu bạn chỉ có dữ liệu hiện tại, bạn sẽ không thể tái hiện được lý do. Nếu bạn có mốc thời gian của từng nhóm thông tin, câu trả lời sẽ hiện ra ngay.
Vì vậy mỗi bản ghi nên mang ít nhất ba mốc. Mốc thứ nhất là thời điểm dữ liệu được lấy về. Mốc thứ hai là thời điểm dữ liệu được đưa vào sử dụng. Mốc thứ ba là thời điểm nó được xem lại lần cuối. Ba mốc này phục vụ ba câu hỏi khác nhau, và thiếu mốc nào cũng tạo ra một khoảng mù.
Điều này nghe có vẻ nặng nề, nhưng chi phí lưu ba mốc là rất nhỏ so với lợi ích khi cần điều tra. Phần khó không nằm ở việc lưu, mà ở việc duy trì thói quen cập nhật chúng.
Đơn hàng cũ có nên bị dữ liệu mới viết lại?
Đây là quyết định thiết kế quan trọng nhất trong bài này, và câu trả lời không rõ ràng như vẻ ngoài của nó. Có hai trường phái, và cả hai đều có lý.
Trường phái thứ nhất cho rằng dữ liệu nên được hiển thị theo phiên bản mới nhất. Cách này giữ cho giao diện đơn giản và tránh việc người dùng nhìn thấy hai cách viết khác nhau cho cùng một nơi. Nhược điểm là nó viết lại lịch sử mà không để lại dấu vết.
Trường phái thứ hai cho rằng mỗi bản ghi phải giữ nguyên trạng thái tại thời điểm nó được tạo. Cách này tái hiện được quá khứ và phù hợp khi việc xử lý đúng theo quy định là quan trọng. Nhược điểm là giao diện trở nên phức tạp hơn, và sẽ có lúc một dòng hiển thị cách viết đã không còn dùng.
Cách dung hoà phổ biến là giữ nguyên giá trị đã lưu và chỉ đổi phần hiển thị. Khi đó dữ liệu gốc không bị viết lại, nhưng người dùng vẫn thấy cách viết hiện hành. Nếu ai cần tra cứu, hệ thống tra được cả hai.
Dù chọn cách nào, hãy viết quyết định đó thành một câu và lưu cùng dữ liệu. Quyết định không được ghi lại sẽ bị người sau hiểu khác, và hậu quả thường chỉ lộ ra khi có tranh chấp.
Hai nguồn mâu thuẫn nhau thì xử lý thế nào
Khi hai nguồn nói khác nhau, việc đầu tiên không phải là chọn bên nào đúng, mà là ghi lại sự mâu thuẫn. Nếu bạn lặng lẽ chọn một bên, thông tin về việc hai nguồn không khớp sẽ mất, và lần sau bạn sẽ gặp lại đúng vấn đề này mà không biết.
Sau khi đã ghi nhận, hãy xét ba tiêu chí. Tiêu chí thứ nhất là phạm vi: nguồn nào nói về chủ đề này trực tiếp hơn. Tiêu chí thứ hai là độ mới: nguồn nào được cập nhật gần đây hơn. Tiêu chí thứ ba là tính ổn định: nguồn nào ít thay đổi cách trình bày qua thời gian.
Trong nhiều trường hợp, hai nguồn không thật sự mâu thuẫn mà đang nói về hai thứ khác nhau nhưng bị hiểu là một. Đây là lý do nên kiểm tra lại định nghĩa của từng trường trước khi kết luận là xung đột.
Khi đã quyết định, hãy ghi lại lý do chọn. Lần sau có ai thắc mắc, lý do đó sẽ tiết kiệm cho bạn cả một cuộc điều tra. Nếu về sau lý do không còn đúng, bạn vẫn có cơ sở để đổi quyết định một cách có căn cứ.
Phần dành cho nhà phát triển: coi nguồn và ngày là một trường
Cách gọn nhất để tránh mất thông tin là coi nguồn và ngày lấy dữ liệu như một trường của bản ghi, chứ không phải phần chú thích bên ngoài. Khi nó nằm trong dữ liệu, nó được sao lưu, được kiểm thử, và được truy vấn như mọi trường khác.
Vài điểm nên chốt:
- Gắn mốc thời gian theo nhóm thông tin, không chỉ theo cả hồ sơ.
- Lưu nguồn cùng bản ghi để biết vì sao giá trị đó được chọn.
- Giữ danh sách các mâu thuẫn đã biết, kể cả những cái chưa giải quyết.
- Quyết định rõ việc hiển thị dùng dữ liệu lịch sử hay dữ liệu hiện hành.
- Kiểm thử khả năng tái hiện: một bản ghi cũ phải cho ra đúng kết quả như lúc nó được tạo.
Bạn có thể mở danh mục quốc gia và vùng lãnh thổ để xem cách các mục được trình bày, và đối chiếu với những trường bạn đang lưu. Tên nguồn, ngày lấy và số phiên bản nêu trong bài chỉ là ví dụ minh hoạ cho cách tổ chức thông tin; chúng không phải là nguồn dữ liệu thật của bất kỳ hệ thống nào và không nên được trích dẫn như số liệu chính thức.
Bước tiếp theo
Hãy chọn một nhóm thông tin và thử trả lời câu hỏi nó được xem lại lần cuối khi nào. Nếu bạn không trả lời được, đó là nhóm nên được gắn mốc thời gian trước tiên. Sau đó, bài danh sách độ phủ dữ liệu theo quốc gia nói về cách theo dõi ô nào còn thiếu, còn bài mở rộng dữ liệu thử giữa các quốc gia bàn về việc giữ quy trình này khi số nơi tăng lên.