Ma trận CRUD (CRUD Matrix)
1. Tổng quan
A. Định nghĩa
Là công cụ phân tích tương quan (Correlation Analysis) biểu diễn giao cắt dưới dạng ma trận các quan hệ tạo (Create) · đọc (Read) · cập nhật (Update) · xóa (Delete) giữa tiến trình (chức năng) và thực thể (dữ liệu) của hệ thống thông tin, nhằm kiểm tra tính nhất quán giữa mô hình dữ liệu và mô hình tiến trình.
Ma trận CRUD không đơn thuần là một bảng, mà là một cơ chế kiểm chứng buộc hai góc nhìn thiết kế khác nhau phải được chồng lên cùng một mặt phẳng. Góc nhìn dữ liệu (lưu trữ cái gì) và góc nhìn chức năng (xử lý cái gì) có vẻ tự nhiên khi xét riêng ở giai đoạn đầu phát triển, nhưng chỉ khi thực sự vận hành ăn khớp với nhau thì sự lệch pha mới lộ ra. Giá trị lớn của ma trận CRUD là phơi bày sự lệch pha này từ trước, ở giai đoạn phân tích · thiết kế, trước khi mã nguồn được viết.
B. Bối cảnh xuất hiện và sự cần thiết
Trong phương pháp luận Kỹ thuật thông tin (IE, Information Engineering), mô hình dữ liệu (ERD) và mô hình tiến trình (DFD · sơ đồ phân rã chức năng) là các sản phẩm khác nhau, thường do những người phụ trách khác nhau xây dựng độc lập. Vấn đề là hai sản phẩm này về mặt logic nhất định phải ăn khớp với nhau. Nếu không có tiến trình nào đưa giá trị vào một thực thể, dữ liệu đó sẽ mãi trống rỗng (thiếu thao tác tạo); ngược lại, nếu một tiến trình được thiết kế để tham chiếu dữ liệu không tồn tại thì bản thân việc thực thi là không thể (sụp đổ toàn vẹn tham chiếu).
Những lỗ hổng về tính nhất quán giữa dữ liệu và chức năng như vậy rất dễ bị mắt người bỏ sót dù đọc tài liệu kỹ đến đâu, bởi khi thực thể lên đến hàng chục và tiến trình lên đến hàng trăm thì số tổ hợp bùng nổ. Ma trận CRUD buộc các quan hệ này được sắp xếp thành dạng lưới nhìn thấy trong một lần là ma trận, qua đó làm lộ rõ trực quan sự thiếu sót (ô trống), trùng lặp (ghi quá mức) và cô lập (toàn bộ hàng/cột trống). Hơn nữa, ma trận đã lập không chỉ dừng ở kiểm chứng mà còn được tái sử dụng làm dữ liệu đầu vào chung cho việc xác định ranh giới giao dịch, thiết kế phân tán CSDL, thiết kế quyền truy cập (RBAC) và chính sách lưu trữ · bảo quản, vì vậy có tính tái sử dụng cao trong số các sản phẩm phân tích.
C. Đặc điểm
Đặc điểm của ma trận CRUD được tóm tắt thành ba điểm. Thứ nhất là kiểm chứng đối xứng: đồng thời kiểm tra phía dữ liệu (thực thể có vòng đời trọn vẹn hay không) và phía chức năng (tiến trình có thực sự xử lý dữ liệu hay không). Thứ hai, là sản phẩm tĩnh nhưng có hàm ý động: bản thân bảng là tĩnh, nhưng việc nhiều tiến trình cùng thực hiện U trên một thực thể dẫn thẳng đến vấn đề thời gian chạy là thiết kế đồng thời · khóa. Thứ ba, trung lập về phương pháp luận: tuy xuất phát từ Kỹ thuật thông tin, nó vẫn được ứng dụng nguyên vẹn làm công cụ phân tích mẫu truy cập trong thiết kế hướng đối tượng và microservice.
2. Cấu trúc tổng thể và vị trí của ma trận CRUD
Nếu trước hết hiểu ma trận CRUD nhận đầu vào từ đâu và xuất đầu ra đến đâu, sẽ thấy rõ vì sao công cụ này được gọi là "trung tâm (hub)" của giai đoạn phân tích. Sơ đồ cấu trúc dưới đây thể hiện luồng mô hình dữ liệu và mô hình tiến trình hội tụ vào ma trận CRUD, rồi lại tỏa ra nhiều hoạt động thiết kế.
flowchart LR
ERD["Mô hình dữ liệu (ERD · thực thể)"] --> CM["Ma trận CRUD"]
DFD["Mô hình tiến trình (DFD · chức năng)"] --> CM
CM --> V["Kiểm chứng nhất quán (thiếu · cô lập · ảo)"]
CM --> TX["Thiết kế ranh giới giao dịch"]
CM --> DIST["Thiết kế phân tán · phân chia CSDL"]
CM --> AUTH["Thiết kế quyền truy cập (RBAC)"]
CM --> ARC["Lưu trữ · chính sách bảo quản"]
Như sơ đồ cho thấy, đầu vào của ma trận CRUD là hai mô hình khác nhau, còn đầu ra là năm nhánh hoạt động thiết kế tiếp theo. Điểm cốt lõi ở đây là hai đầu vào "được tạo ra độc lập". Nếu chúng được sinh tự động từ một mô hình tích hợp duy nhất thì việc kiểm chứng tính nhất quán không còn ý nghĩa. Chính vì chồng hai mô hình được xây dựng độc lập từ các góc nhìn khác nhau lên nhau về sau, những bất nhất mà con người chưa kịp nhận ra mới nổi lên bề mặt.
Hệ tọa độ của ma trận cũng tuân theo quy tắc rõ ràng. Theo thông lệ, hàng đặt tiến trình (chức năng), cột đặt thực thể (dữ liệu). Khi đó, đọc ngang một hàng sẽ cho thấy phạm vi truy cập dữ liệu của giao dịch, tức "tiến trình này xử lý những dữ liệu nào và như thế nào", còn đọc dọc một cột sẽ cho thấy vòng đời của dữ liệu, tức "dữ liệu này được ai xử lý và như thế nào". Đọc ngang tương ứng với thiết kế chức năng, đọc dọc tương ứng với quản trị dữ liệu.
3. Cách biểu diễn và quy trình lập
Mỗi ô giao cắt ghi thao tác mà tiến trình thực hiện trên thực thể tương ứng bằng C/R/U/D; nếu một tiến trình thực hiện nhiều thao tác thì ghi cùng nhau. Ví dụ, "Hủy đơn hàng" cập nhật đơn hàng rồi cuối cùng xóa nó nên được ghi là UD. Trong ví dụ cửa hàng trực tuyến dưới đây, đọc ngang hàng "Đặt đơn hàng" sẽ thấy ngay trên một dòng rằng chức năng này là giao dịch phức hợp đọc (R) hội viên · sản phẩm và tạo (C) đơn hàng.
| Tiến trình \ Thực thể | Hội viên | Đơn hàng | Sản phẩm |
|---|---|---|---|
| Đăng ký hội viên | C | ||
| Xem sản phẩm | R | ||
| Đặt đơn hàng | R | C | R |
| Hủy đơn hàng | UD |
Việc lập ma trận không phải là điền ô một cách tùy tiện mà tuân theo quy trình xác định. Sơ đồ quy trình dưới đây thể hiện luồng từ xác định thực thể · tiến trình đến kiểm chứng · tái sử dụng.
flowchart TD
A["Xác định danh sách thực thể (dựa trên ERD)"] --> B["Xác định danh sách tiến trình (dựa trên phân rã chức năng)"]
B --> C["Dựng khung ma trận (hàng = tiến trình, cột = thực thể)"]
C --> D["Ghi C/R/U/D vào từng ô"]
D --> E["Kiểm chứng nhất quán theo hàng · cột"]
E --> F{"Có thiếu · cô lập · ảo?"}
F -->|"Có"| G["Bổ sung mô hình rồi lập lại"]
G --> D
F -->|"Không"| H["Tái sử dụng cho thiết kế tiếp theo"]
Bước thứ nhất, xác định thực thể · tiến trình, quyết định đến 80% chất lượng ma trận. Nguyên tắc là danh sách thực thể lấy từ ERD đã chuẩn hóa, danh sách tiến trình lấy từ các tiến trình mức thấp nhất (nguyên tử) của sơ đồ phân rã chức năng. Khi đó, nếu không đồng nhất độ mịn (granularity) giữa mức định nghĩa thực thể (khái niệm/logic/vật lý) và mức định nghĩa tiến trình (chức năng lớn/nghiệp vụ đơn vị), ma trận sẽ quá thưa hoặc ngược lại quá dày, khiến việc kiểm chứng vô nghĩa. Trong thực tế, thường căn chỉnh ở mức thực thể logic và tiến trình đơn vị (tương ứng một màn hình · một API).
Thứ hai, ở bước ghi ô, cần có sự đồng thuận trong nhóm về việc "coi cái gì là R". Chẳng hạn, việc ghi thao tác đọc kiểm tra tồn tại để xác thực khóa ngoại là R, hay chỉ coi thao tác đọc để hiển thị trên màn hình là R, sẽ làm mật độ ma trận khác nhau. Nếu quy tắc này không rõ ràng, hai người vẽ cùng một hệ thống sẽ cho ra hai ma trận khác nhau.
Thứ ba là kiểm chứng và lặp lại. Khi phát hiện khiếm khuyết trong kiểm chứng, điều cốt lõi không phải chỉ sửa ma trận mà là quay về mô hình gốc (ERD · DFD) để bổ sung. Bởi ma trận chỉ cho thấy triệu chứng của khiếm khuyết, còn vấn đề thực sự nằm ở mô hình dữ liệu hoặc mô hình tiến trình. Vòng phản hồi này biến ma trận CRUD từ một tài liệu đơn thuần thành một quy trình kiểm chứng.
4. Quy tắc kiểm chứng tính nhất quán
Cốt lõi của kiểm chứng là xác nhận một cách đối xứng "mọi thực thể có đủ toàn bộ vòng đời hay không" và "mọi tiến trình có thực sự xử lý dữ liệu hay không". Mỗi quy tắc tương ứng với một khiếm khuyết cụ thể cần nghi ngờ khi bị vi phạm.
Mỗi cột thực thể phải có ít nhất một C. Thực thể không có tiến trình tạo thì không có đường đưa dữ liệu vào, nên nếu không ghi rõ đường nạp riêng như nạp theo lô (batch) hay liên kết bên ngoài thì đó rõ ràng là thiếu sót thiết kế. Trong ví dụ trên, việc cột Sản phẩm không có C cho biết tiến trình "Đăng ký sản phẩm" đã bị bỏ sót.
Mỗi cột thực thể phải có ít nhất một R. Dữ liệu không ai đọc nhiều khả năng là dữ liệu thừa, không có lý do lưu trữ. Tuy nhiên, có những trường hợp như dữ liệu log · kiểm toán "hiện chưa đọc nhưng tích lũy cho sau này", nên thay vì lập tức quyết định xóa khi không có R, hãy coi đó là tín hiệu rà soát để xác nhận lại mục đích lưu giữ.
Sự có mặt của U/D kiểm tra nhu cầu về tiến trình quản lý. Thực thể hoàn toàn không có U có thể là dữ liệu bất biến (immutable), và thực thể không có D có thể theo chính sách chỉ quản lý bằng cờ trạng thái mà không xóa vật lý (xóa logic). Nghĩa là sự vắng mặt của U/D không mặc nhiên là khiếm khuyết, mà là câu hỏi buộc phân biệt đó là lựa chọn chính sách hay thiếu sót.
Mọi hàng · cột phải có ít nhất một ký hiệu. Cột hoàn toàn không có ký hiệu là thực thể cô lập không được chức năng nào sử dụng, hàng hoàn toàn không có ký hiệu là tiến trình rỗng (ảo) không chạm vào dữ liệu, cả hai đều là ứng viên lỗi. Thực thể cô lập gợi nghi thiết kế thừa hoặc thiếu tiến trình, còn tiến trình ảo gợi nghi chức năng vỏ rỗng không thực sự hoạt động.
| Quy tắc kiểm tra | Ý nghĩa | Nghi vấn khi vi phạm |
|---|---|---|
| Mỗi thực thể có C | Bảo đảm đường nạp dữ liệu | Thiếu tiến trình tạo |
| Mỗi thực thể có R | Xác nhận dữ liệu có được sử dụng | Dữ liệu thừa hoặc rà soát lại mục đích lưu giữ |
| Có hay không có U/D | Xác nhận chính sách thay đổi trạng thái · xóa | Thiếu tiến trình quản lý vs chính sách bất biến/xóa logic |
| Mọi hàng · cột ít nhất 1 | Ngăn cô lập · ảo | Thực thể cô lập · tiến trình rỗng (ảo) |
5. Lĩnh vực ứng dụng và tình huống thực tế
Ma trận CRUD không dừng ở kiểm chứng tính nhất quán mà được dùng rộng rãi làm đầu vào cho thiết kế tiếp theo. Trong phân tích giao dịch, nếu một hàng (tiến trình) thực hiện C/U/D trải trên nhiều thực thể thì phạm vi đó là một đơn vị công việc logic, tức ranh giới giao dịch. Chẳng hạn, nếu hàng "Đặt đơn hàng" bao gồm cả C đơn hàng và U tồn kho, hai thao tác này phải được commit nguyên tử, nên căn cứ thiết kế gộp chúng vào một giao dịch xuất hiện ngay trên bảng.
Căn cứ cho thiết kế điều khiển đồng thời cũng được đọc từ cột. Nếu U của nhiều tiến trình dồn vào cột của một thực thể, dữ liệu đó là điểm nóng (hotspot) có mức tranh chấp (contention) cao, nên phải quyết định chiến lược khóa hoặc có dùng điều khiển đồng thời lạc quan hay không. Trong thực tế, các thực thể tập trung U như tồn kho · số dư là ví dụ điển hình; bỏ qua điểm này sẽ gây mất cập nhật (lost update) hoặc deadlock khi vận hành.
Trong thiết kế phân tán · phân chia CSDL, tính cục bộ của mẫu truy cập là manh mối then chốt. Nếu một nhóm thực thể cụ thể chỉ được một nhóm tiến trình cụ thể truy cập, việc phân chia CSDL (sharding · partitioning) theo ranh giới đó sẽ tăng tính cục bộ lưu lượng và cải thiện hiệu năng. Ngược lại, nếu nhiều tiến trình trải rộng trên nhiều thực thể, chi phí giao dịch phân tán khi phân chia sẽ lớn nên cần thận trọng. Trong thiết kế quyền truy cập, việc cấp quyền CRUD nào trên thực thể nào cho từng vai trò (Role) xuất phát từ ma trận này rồi mở rộng thành ma trận quyền RBAC. Ví dụ, vai trò "Hội viên thường" chỉ có C/R trên đơn hàng, còn vai trò "Quản trị viên" có thêm U/D.
| Lĩnh vực | Cách ứng dụng | Manh mối đọc từ bảng |
|---|---|---|
| Kiểm chứng nghiệp vụ · dữ liệu | Kiểm tra nhất quán yêu cầu - dữ liệu | Ô trống · hàng · cột cô lập |
| Phân tích giao dịch | Thiết kế ranh giới giao dịch · đồng thời | Phạm vi C/U/D của một hàng, U tập trung ở một cột |
| Thiết kế CSDL phân tán | Phân chia · bố trí dựa trên mẫu truy cập | Tính cục bộ truy cập nhóm tiến trình - nhóm thực thể |
| Thiết kế quyền truy cập | Nền tảng ma trận quyền CRUD theo vai trò | Ánh xạ vai trò × thực thể × thao tác |
6. So sánh với các kỹ thuật tương tự
Ma trận CRUD có mục đích khác với các công cụ phân tích tương quan khác. Cần phân biệt để trình bày không nhầm lẫn trong bài thi. Bảng tương quan thực thể - chức năng (E-F Matrix) chỉ ghi có hay không có quan hệ mà không phân biệt CRUD, dùng ở giai đoạn xác định, trong khi ma trận CRUD chi tiết hóa đến loại thao tác để dùng cho thiết kế nhất quán · giao dịch. DFD tập trung vào luồng dữ liệu (di chuyển đến đâu), còn ma trận CRUD tập trung vào thao tác trên dữ liệu (làm gì), nên hai công cụ bổ trợ cho nhau.
Sự khác biệt này xuất phát từ việc mỗi công cụ nhắm đến câu hỏi thiết kế khác nhau. E-F Matrix hỏi về sự tồn tại "có quan hệ hay không", DFD hỏi về đường di chuyển "chảy như thế nào", còn ma trận CRUD hỏi về tính nhất quán "vòng đời có trọn vẹn hay không". Do đó, trong thực tế không chọn loại trừ một trong ba công cụ, mà dùng kết hợp tuần tự theo giai đoạn phân tích: đầu giai đoạn xác định dùng E-F Matrix để nắm các quan hệ lớn, giai đoạn chi tiết hóa dùng CRUD để điền thao tác và kiểm chứng, và dùng DFD để xác nhận luồng.
7. Chuyên sâu — Ma trận CRUD trong thời đại MSA và xu hướng ra đề dự kiến
Cách diễn giải hiện đại của ma trận CRUD nổi bật trong kiến trúc microservice (MSA). Nếu trong hệ thống nguyên khối (monolithic), phân tích mẫu CRUD là căn cứ cho phân chia CSDL, thì trong MSA, cùng phân tích đó trở thành căn cứ định nghĩa ranh giới dữ liệu mà dịch vụ phải sở hữu, tức Bounded Context (ngữ cảnh giới hạn). Để giữ nguyên tắc sở hữu dữ liệu "chỉ dịch vụ sở hữu dữ liệu mới được thay đổi (C/U/D) dữ liệu đó", trước hết phải nắm được tiến trình nào thực hiện ghi (C/U/D) trên thực thể nào. Ma trận CRUD chính là bản đồ của mẫu ghi đó, nên khi phát hiện ô mà nhiều dịch vụ cùng ghi vào một thực thể, đó là tín hiệu cảnh báo rằng ranh giới dịch vụ đã bị vạch sai.
Từ đây, mối liên kết với CQRS · event sourcing cũng tự nhiên được suy ra. Nếu đọc (R) trải rộng trên nhiều dịch vụ · tiến trình còn ghi (C/U/D) tập trung vào số ít, thì CQRS tách mô hình đọc và mô hình ghi sẽ có lợi. Nghĩa là bản thân sự phân bố của R và C/U/D trong ma trận CRUD trở thành căn cứ quyết định có áp dụng CQRS hay không. Gần đây, từ góc độ quản trị dữ liệu, còn có xu hướng liên kết ma trận CRUD với dòng dõi dữ liệu (Data Lineage) · sổ đăng ký xử lý thông tin cá nhân, mở rộng thành tài liệu căn cứ tuân thủ nhằm làm rõ "thực thể thông tin cá nhân nào được chức năng nào thu thập (C) · sử dụng (R) · đính chính (U) · hủy (D)".
Từ góc độ kỳ thi Kỹ sư chuyên nghiệp (Professional Engineer), chủ đề này không chỉ được ra dưới dạng trả lời ngắn độc lập mà còn thường được dùng làm luận cứ bộ phận cho các câu hỏi mô hình hóa dữ liệu · giao dịch · thiết kế MSA. Khi xây dựng bài làm, cách triển khai (1) trình bày định nghĩa và cách biểu diễn bằng ma trận ví dụ, (2) trình bày bốn quy tắc kiểm chứng nhất quán kèm trường hợp vi phạm, rồi (3) mở rộng từng bước sang ứng dụng giao dịch · phân tán · quyền · MSA sẽ đem lại tính hoàn chỉnh cho người chấm. Đặc biệt, nếu không "chỉ liệt kê bảng" mà trình bày kèm nghi vấn khi vi phạm cho từng quy tắc, bài làm sẽ có sức phân biệt cao.
8. Những điểm cần cân nhắc và hàm ý
- Nhu cầu tự động hóa · công cụ hóa: Với hệ thống quy mô lớn có hàng trăm thực thể · tiến trình, quản lý thủ công là không thể. Then chốt để duy trì tính nhất quán là tận dụng việc sinh tự động dựa trên công cụ CASE · kho siêu dữ liệu (metadata repository) để đồng bộ thay đổi mô hình với ma trận, sao cho khi mô hình thay đổi thì ma trận được cập nhật tự động.
- Đồng nhất độ mịn và chuẩn hóa quy tắc ký hiệu: Phải căn chỉnh mức định nghĩa thực thể và tiến trình, đồng thời văn bản hóa thành chuẩn nhóm các quy tắc ký hiệu như "coi cái gì là R" thì mới có ma trận tái lập được. Không có quy tắc, mỗi người sẽ tạo ra một bảng khác nhau và độ tin cậy của kiểm chứng sụp đổ.
- Sản phẩm nền tảng cho quản trị dữ liệu · tuân thủ: Là điểm khởi đầu của quản lý quyền sở hữu, chất lượng và vòng đời dữ liệu, và có thể liên kết với sổ đăng ký xử lý thông tin cá nhân · quản lý dòng dõi dữ liệu để làm tài liệu căn cứ ứng phó GDPR · Luật Bảo vệ thông tin cá nhân của Hàn Quốc.
- Mở rộng sang thiết kế MSA · CQRS: Phân tích mẫu CRUD là căn cứ xác định Bounded Context của dịch vụ và việc có tách đọc · ghi (CQRS) hay không. Tuy nhiên, trong MSA, dữ liệu sở hữu phải được quản lý phân chia theo từng dịch vụ chứ không phải một ma trận vật lý duy nhất, nên cần quản lý phân cấp giữa ma trận tích hợp toàn doanh nghiệp và ma trận theo dịch vụ.
- Nhận thức giới hạn của kiểm chứng tĩnh: Ma trận CRUD chỉ kiểm chứng tính nhất quán tĩnh tại thời điểm thiết kế, không bảo đảm tải, tranh chấp hay hiệu năng thực tế khi chạy. Do đó nhất thiết phải kết hợp với kiểm chứng động như kiểm thử tải trên các thực thể tập trung U và kiểm chứng mức cô lập giao dịch.
Tóm tắt một câu: Ma trận CRUD là công cụ phân tích tương quan biểu diễn giao cắt dưới dạng ma trận quan hệ tạo · đọc · cập nhật · xóa giữa tiến trình và thực thể để kiểm chứng đối xứng tính nhất quán dữ liệu - chức năng (thiếu · cô lập · ảo), và được mở rộng không chỉ cho thiết kế giao dịch · đồng thời · phân tán · quyền truy cập mà còn làm căn cứ xác định Bounded Context và CQRS trong MSA.