Tổ chức lớp dữ liệu

Bài này hữu ích khi cùng một dữ liệu bị gửi lại và bạn lo số bị cộng hai lần.

Đọc xong bạn hiểu gì

  • Phân biệt Bronze (lớp dữ liệu thô), Silver (lớp dữ liệu đã kiểm) và Gold (lớp dữ liệu phục vụ báo cáo)
  • Theo GD3 từ lúc thiếu mã cửa hàng tới lúc đủ căn cứ để đưa vào báo cáo
  • Hiểu vì sao mã lần nhận khác với khoá nhận diện giao dịch
  • Kiểm việc nhận lại và chạy lại để tránh cộng thêm giao dịch đã có

Khoảng 13 phút đọc.

Bối cảnh

Sao Mai là một chuỗi cửa hàng tạp hoá và đồ gia dụng. Chuỗi bắt đầu từ một cửa hàng và đang mở thêm cửa hàng mới. Mỗi cửa hàng bán hàng qua máy tính tiền; dữ liệu bán hàng được gửi về văn phòng để các phòng ban làm báo cáo. Tên chuỗi và mọi số liệu trong bài là giả lập.

Rạng sáng 15/09/2026, cửa hàng CH01 gửi batch (lô dữ liệu) L01 chứa dữ liệu bán ngày 14/09/2026. Batch là phần dữ liệu gom lại để gửi và xử lý cùng một lượt. Văn phòng nhận batch lúc 02:10 và thấy GD3 thiếu mã cửa hàng, nên hỏi CH01 xác nhận. Đến 05:40, cửa hàng gửi lại cả batch, đã điền mã đúng cho GD3. GD1 và GD2 vẫn như bản đầu.

Người lập báo cáo có hai bản nhận của cùng batch. Nếu cộng hết bản mới vào phần đã tính, GD1 và GD2 sẽ góp tiền thêm lần nữa. Nếu ghi đè bản cũ, nhóm lại mất dấu GD3 từng thiếu mã. Vậy nên giữ bản nào, và báo cáo lấy tiền từ đâu?

Ví dụ chỉ có tiền hàng, không có giảm giá hay trả hàng.

Giữ dữ liệu theo việc cần làm

Có thể tách dữ liệu thành các lớp để người nhận, người kiểm và người lập báo cáo biết mình đang dùng bản nào. Đường đi trong ví dụ gồm:

  1. Bronze: giữ nguyên nội dung từng lần nhận, kèm mã batch và lúc nhận.
  2. Silver: giữ các giao dịch đạt quy tắc đang áp dụng, không thêm bản gửi lặp của giao dịch đã có.
  3. Gold: tính bảng kết quả theo mục đích báo cáo từ phần dữ liệu được phép dùng.

Bronze cho biết cửa hàng đã gửi gì; Silver cho biết giao dịch nào được dùng tiếp. Từ đó, Gold tính kết quả như tổng tiền hàng của CH01 trong ngày.

Bronze, Silver và Gold là cách gọi phổ biến cho các lớp này. Tên lớp không quyết định chất lượng, cũng không buộc nhóm phải có riêng một hệ thống cho từng lớp. Một nhóm nhỏ có thể giữ tệp gốc, tệp đã kiểm và bảng tổng trong cùng nơi lưu, miễn phân biệt được chúng.

Bronze giữ cả phần chưa dùng được

GD3 thiếu mã vẫn có mặt ở bản nhận gốc. Khi bản sửa tới, nhóm lưu thêm bản đó và giữ bản đầu để đối chiếu. Nhờ vậy, người xử lý biết thay đổi nằm ở mã cửa hàng, không phải có thêm một lần bán hàng.

Bản gốc giúp đối chiếu và xử lý lại; chỉ phần đạt quy tắc mới được dùng cho báo cáo.

Silver có quy tắc và phần chờ xác nhận

Giao dịch dùng cho báo cáo theo cửa hàng cần có mã cửa hàng trong danh mục và tổng tiền dương. Các mã giao dịch phải nhận diện được cùng lần bán khi cửa hàng gửi lại. Trong ví dụ, chỉ GD3 có lỗi.

Vùng cách ly (quarantine) là nơi giữ riêng hoặc đánh dấu phần chưa đạt quy tắc, để phần đó không đi vào bảng dùng tiếp. GD3 vào vùng này vì thiếu mã; bản gốc vẫn còn. Vùng cách ly có thể là một bảng riêng hoặc các dòng có dấu chờ xử lý trong tệp, không cần một công cụ riêng.

Việc hỏi CH01 dựa vào nơi gửi batch. Nhưng nơi gửi chưa thay được xác nhận giao dịch thuộc cửa hàng nào. Trong tình huống này, CH01 kiểm giao dịch gốc, xác nhận GD3 thuộc CH01 và chỉ sửa mã cửa hàng. Sau khi nhận bản sửa có căn cứ, nhóm mới đưa GD3 vào Silver.

“Đã kiểm” nghĩa là đạt những quy tắc đã nêu, không phải đã phát hiện mọi lỗi. Tuỳ mục đích dùng, nhóm có thể cần kiểm thêm, chẳng hạn đối chiếu giá hay chứng từ.

Nhận thêm một bản khác với có thêm giao dịch

Khoá nhận diện (key) là cột hoặc nhóm cột giúp phân biệt từng giao dịch. Trong ví dụ này, nhóm dùng cửa hàng gửi, ngày bán và mã giao dịch. Cửa hàng xác nhận mã GD1, GD2, GD3 ổn định giữa các lần gửi và không lặp cho các lần bán khác trong cùng ngày của cửa hàng ấy. Cửa hàng gửi là thông tin kèm batch, khác với ô mã cửa hàng đang thiếu trên GD3.

Mã lần nhận N1 hoặc N2 chỉ phân biệt các bản văn phòng nhận về. Dùng mã lần nhận làm khoá giao dịch sẽ khiến cùng GD1 trông như hai lần bán khác nhau. Mã batch cũng chưa đủ: cùng L01 có thể chứa bản sửa, nên không thể bỏ cả batch chỉ vì đã từng nhận tên đó.

Với phạm vi này, cách xử lý là:

Các nhánh trên chỉ có ích khi khoá nhận diện đúng. Nếu mã thay sau mỗi lần gửi, hoặc hai lần bán có thể dùng chung mã trong phạm vi ấy, nhóm cần thống nhất lại cách nhận diện với nguồn. So tổng tiền bằng nhau chưa đủ chứng minh hai bản chứa cùng giao dịch.

Ví dụ giải sẵn

Nhận L01 lần đầu

Các lần nhận đều thuộc CH01 và ngày bán 14/09/2026, theo giờ Việt Nam.

Các lần văn phòng nhận L01
Lần nhậnBatchLúc nhận
N1L0115/09/2026 02:10
N2L0115/09/2026 05:40

Bronze giữ 3 dòng của N1. Bảng sau hiện phần cần kiểm mã:

L01 ở lần nhận N1
Giao dịchCửa hàngTiền hàng (đ)
GD1CH01100.000
GD2CH01120.000
GD3(trống)200.000

GD1 và GD2 đạt quy tắc của ví dụ. GD3 thiếu mã nên có 1 giao dịch chờ xác nhận. Silver có 2 giao dịch, với tổng tiền 220.000 đ.

Nếu người phụ trách báo cáo cho phép dùng phần đã đạt, bảng kết quả ghi rõ chỉ gồm GD1, GD2 và còn GD3 đang chờ. Nếu cần đủ giao dịch của L01 để đối chiếu, hãy chờ bản sửa.

Nhận lại L01 sau khi cửa hàng sửa GD3

N2 chứa cả batch. GD1, GD2 không đổi; GD3 có mã CH01.

L01 ở lần nhận N2
Giao dịchCửa hàngTiền hàng (đ)
GD1CH01100.000
GD2CH01120.000
GD3CH01200.000

Bộ dữ liệu ghi riêng xác nhận của cửa hàng cho phần sửa:

Căn cứ sửa GD3 của N2
Giao dịchMã đã xác nhậnNơi xác nhận
GD3CH01Cửa hàng CH01

Bronze nay giữ 6 dòng qua các lần nhận. Đây là số dòng nhận về, không phải số giao dịch bán mới. Silver giữ GD1, GD2 đã có và thêm GD3 sau xác nhận, nên có 3 giao dịch.

Theo riêng GD3 qua các lớp:

Chỗ theo dõi Ở N1 Sau N2
Bronze Giữ GD3 thiếu mã Giữ thêm GD3 có mã; bản thiếu mã vẫn còn
Vùng cách ly GD3 chờ cửa hàng xác nhận Ghi GD3 đã xử lý, giữ căn cứ và bản nhận liên quan
Silver Chưa có GD3 Có GD3 với mã CH01 đã xác nhận
Gold Chưa cộng tiền GD3 Cộng tiền GD3 vào phần của CH01

Bản sửa giúp GD3 đủ điều kiện dùng, không tạo thêm một lần bán. Bản N1 vẫn còn để đối chiếu lỗi ban đầu.

Lập lại bảng kết quả, không cộng chồng các bản báo cáo

Với bảng kết quả nhỏ của L01, nhóm tính lại từ các giao dịch hiện có ở Silver rồi thay phần kết quả cũ của cùng cửa hàng và ngày bán. Không cộng tổng của bản mới vào tổng của bản cũ. Kết quả ở Gold là:

Trạng thái Giao dịch dùng Tổng tiền hàng
Sau N1, bản tạm GD1, GD2 220.000 đ
Sau N2 GD1, GD2, GD3 420.000 đ
Xử lý lại N2, nội dung giữ nguyên GD1, GD2, GD3 420.000 đ

Tổng tăng từ N1 sang N2 vì trước đó GD3 chưa được dùng. Xử lý lại N2 không làm tổng tăng nữa vì không có giao dịch mới hoặc thay đổi đã xác nhận nào.

Nếu cộng cả phần đã đạt của N2 vào GD1, GD2 đã có, bảng sẽ chứa 5 dòng và tổng thành 640.000 đ. GD1, GD2 bị cộng lặp. Vì vậy cần kiểm cả Silver lẫn bảng báo cáo: Silver không trùng mà báo cáo cộng chồng các bản tổng thì kết quả vẫn sai.

Phiếu xử lý batch gửi lại đã điền

Phiếu ghi phương án của ví dụ, để nhóm có thể cùng kiểm khi nhận bản sửa.

Mục Nội dung
Phạm vi L01 của CH01, dữ liệu bán ngày 14/09/2026; chỉ xét tiền hàng trong batch
Bản đã nhận N1 lúc 02:10, N2 lúc 05:40 ngày 15/09/2026
Khoá nhận diện Cửa hàng gửi + ngày bán + mã giao dịch ổn định do nguồn xác nhận
Giữ ở Bronze Nguyên nội dung N1, N2, kèm mã batch, nơi gửi và lúc nhận
Quy tắc đang kiểm Mã cửa hàng có trong danh mục; tổng tiền dương; nhận diện giao dịch đã có
Phần chờ ở N1 GD3 thiếu mã; hỏi CH01, không tự điền từ nơi gửi batch
Căn cứ bản sửa CH01 xác nhận GD3 thuộc CH01; tiền hàng không đổi
Cách nhận lại Giữ GD1, GD2 đã có; thêm GD3 đạt quy tắc; ghi phần chờ đã xử lý
Cách lập kết quả Tính lại từ Silver và thay phần kết quả cũ của cùng phạm vi
Kiểm sau chạy lại Cùng bản N2 cho cùng danh sách giao dịch và cùng tổng tiền
Khi nội dung khác Giữ bản nhận, báo cửa hàng và người có quyền chốt; không tự thay bản đã dùng

Khi nào nên làm, khi nào chưa cần

Nên làm: tách rõ các lớp và viết cách nhận lại khi batch thường được gửi lại, dữ liệu cần sửa sau nhận hoặc nhiều báo cáo dùng chung phần đã kiểm. Nhóm sẽ dễ đối chiếu bản gốc và chạy lại phần xử lý.

Có cách khác: với phạm vi nhỏ, giữ tệp gốc theo lần nhận, một tệp đã kiểm và bảng tổng có thể đủ. Với bảng lớn cần cập nhật riêng phần thay đổi, nhóm kỹ thuật có thể chọn cách phù hợp thay cho tính lại toàn bộ. Khi đó vẫn cần kiểm giao dịch đã có, căn cứ sửa và kết quả sau chạy lại, thay vì chỉ xét tốc độ xử lý.

Chưa cần: dựng hệ thống mang đủ tên Bronze, Silver, Gold khi một người xử lý tệp nhỏ, ít thay đổi và kiểm lại bằng tay được. Chỉ ghi rõ bản gốc, phần chờ và bản dùng cho báo cáo đã có ích. Nếu nguồn chưa có mã ổn định hoặc nhóm chưa thống nhất quy tắc sửa, giải quyết phần đó trước; thêm tên lớp chưa ngăn được việc cộng trùng.

Tự làm

Nhóm chạy lại N2 sau khi báo cáo đã cập nhật. Nội dung và quy tắc không đổi. Tổng tiền của L01 nên thế nào, và cần kiểm ở đâu?

Gợi ý
Phân biệt số lần xử lý với số giao dịch bán. Sau Silver, bảng kết quả cập nhật bằng cách nào?
Xem đáp án

Tổng giữ 420.000 đ. GD1, GD2, GD3 đã có nên không thêm lại. Kiểm danh sách giao dịch ở Silver, rồi kiểm bảng báo cáo có thay phần kết quả cũ hay đang cộng thêm một tổng mới. Cần đối chiếu cả danh sách lẫn tổng tiền.

Với tệp nhỏ, có thể đối chiếu từng mã và tổng bằng tay. Khi dùng đều đặn, nên để khâu xử lý kiểm việc chạy lại. Nếu nguồn hoặc quy tắc đã đổi, tổng có thể đổi hợp lý; cần giải thích thay đổi ấy.

Một bản gửi tiếp theo vẫn có mã GD1 nhưng tiền hàng khác bản đã dùng. Đồng nghiệp muốn lấy bản tới sau và bỏ qua đối chiếu. Có đủ căn cứ chưa?

Gợi ý
Trường hợp này giống GD1 gửi lặp y hệt hay giống một yêu cầu sửa? Thời điểm nhận cho biết điều gì?
Xem đáp án

Chưa đủ. Cùng khoá nhưng khác nội dung có thể là sửa đúng, gửi nhầm hoặc lỗi ở nguồn. Giữ bản nhận và hỏi cửa hàng xác nhận thay đổi, rồi làm theo quy tắc sửa đã chốt. Thời điểm nhận cho biết bản nào tới sau, không xác nhận nội dung.

Nếu đã có quy tắc và xác nhận phù hợp, cập nhật giao dịch hiện có rồi tính lại phần báo cáo liên quan; không thêm một lần bán nữa. Nếu chưa xác minh được, giữ phần khác biệt để người có quyền chọn chờ hoặc dùng bản tạm có ghi chú.

Một nhóm nhỏ chỉ nhận tệp một lần để xem nhanh. Họ định mua hệ thống riêng cho từng lớp Bronze, Silver, Gold. Nên góp ý gì?

Gợi ý
Nhóm cần phân biệt những bản nào, và cách hiện tại có cho phép kiểm lại không?
Xem đáp án

Nếu tệp nhỏ, ít thay đổi và kiểm tay được, giữ bản gốc cùng bản đã kiểm và bảng kết quả có thể đáp ứng. Tên lớp giúp nói về vai trò dữ liệu, không quyết định số công cụ phải mua.

Nếu nhiều người bắt đầu dùng lại, nguồn thường gửi bản sửa hoặc công kiểm tay gây nhầm, nên xét cách tổ chức và xử lý đều đặn hơn. Dù chọn công cụ nào, vẫn cần khoá nhận diện, quy tắc dùng phần chờ và cách cập nhật báo cáo.

Hiểu nhầm thường gặp

“Bronze có thêm dòng thì doanh thu phải tăng.” Dòng ở đây ghi các lần nhận. Cùng giao dịch có thể xuất hiện trong nhiều bản nhận, nhưng báo cáo chỉ dùng bản phù hợp của giao dịch ấy.

“Đã nhận L01 thì bỏ mọi bản L01 gửi tiếp.” Bản gửi lại có thể chứa sửa đổi của GD3. Cần kiểm từng giao dịch và căn cứ thay đổi, không chỉ kiểm tên batch.

“Silver không trùng thì báo cáo chắc chắn đúng.” Báo cáo vẫn có thể cộng chồng các bản tổng hoặc dùng sai cách tính.

“Ba lớp nghĩa là phải có ba hệ thống.” Nhóm có thể phân biệt vai trò bằng tệp hoặc bảng trong cùng nơi lưu. Chỉ tách công cụ khi nhu cầu và khả năng vận hành có căn cứ.

Tóm tắt

Thuật ngữ trong bài

Tiếng Việt Tiếng Anh
Lô dữ liệu batch
Khoá nhận diện Key
Vùng cách ly Quarantine
Lớp dữ liệu thô Bronze
Lớp dữ liệu đã kiểm Silver
Lớp dữ liệu phục vụ báo cáo Gold

Mẫu tải về: Phiếu xử lý batch gửi lại (Word). Nội dung giống bảng đã điền ở mục Ví dụ giải sẵn, để trống cho bạn điền.

Bài liên quan: “Hành trình của dữ liệu”, “Grain, fact và dimension”, “Chất lượng dữ liệu”, “Quyền quyết định và trách nhiệm”.