Lỗi hay gặp của BA mới với ERD là lướt qua luôn, coi đó là việc của dev, mà hậu quả thì tới muộn, viết yêu cầu xem lịch sử mua hàng của khách mà không biết dữ liệu nằm ở bảng nào, nên chẳng hỏi được mấy câu quan trọng kiểu một khách có thể có mấy địa chỉ giao hàng. Đọc ERD ở mức BA không cần biết code, chỉ cần bốn bước và một ví dụ.
ERD trong ba câu#
ERD (Entity Relationship Diagram) là sơ đồ mô tả dữ liệu được lưu thế nào, có những thực thể nào (entity), mỗi thực thể có thuộc tính gì (attribute), và chúng quan hệ với nhau ra sao, trong BABOK Guide v3 việc này thuộc kỹ thuật Data Modelling (10.15). Với BA, ERD giúp trả lời mấy câu dữ liệu stakeholder hay hỏi, một khách có thể có bao nhiêu đơn, một đơn chứa bao nhiêu sản phẩm, số điện thoại khách lấy ở đâu, hiểu được dữ liệu thì viết yêu cầu không bị sai về bản chất.
đọc ERD theo bốn bước#
Bước một là tìm entity chính, thường là một danh từ nghiệp vụ như Khách hàng, Đơn hàng, Sản phẩm, xem sơ đồ xoay quanh cái gì, hay là thực thể có nhiều đường nối tới nhất.
Bước hai là tìm khóa, khóa chính (primary key) là trường định danh duy nhất một bản ghi, ví dụ mã khách hàng, còn khóa ngoại (foreign key) là trường trỏ sang khóa chính của bảng khác để nối hai bảng lại.
Bước ba là đọc quan hệ, 1-n nghĩa là một bên có thể có nhiều bên kia, như một khách có nhiều đơn hàng, còn n-n là nhiều-nhiều, một đơn có nhiều sản phẩm và một sản phẩm nằm trong nhiều đơn.
Bước bốn là đặt câu hỏi nghiệp vụ, mỗi quan hệ đọc được thì thử biến thành câu hỏi, vậy muốn biết khách này mua gì thì phải đi qua những bảng nào, tới lúc này ERD mới bắt đầu có ích thật.
ví dụ đơn hàng và dòng đơn#
Lấy ví dụ kinh điển gồm Khách hàng, Đơn hàng, Dòng đơn, Sản phẩm. Một khách có nhiều đơn, đó là quan hệ 1-n giữa Khách hàng và Đơn hàng, mỗi đơn lại chứa nhiều dòng, mỗi dòng là một sản phẩm kèm số lượng, đơn giá.
Vì sao cần bảng Dòng đơn ở giữa, vì giữa Đơn hàng và Sản phẩm là quan hệ n-n, mà muốn lưu n-n thì người ta tách ra một bảng trung gian, mỗi dòng ghi đơn này chứa sản phẩm này, số lượng bao nhiêu. Hiểu chuyện này rồi thì bạn sẽ hiểu vì sao khi viết yêu cầu hiển thị danh sách sản phẩm trong đơn, dữ liệu thật ra nằm ở bảng Dòng đơn chứ không phải bảng Đơn hàng hay Sản phẩm.
từ ERD sang câu SQL JOIN#
Mỗi đường nối giữa hai bảng trên ERD là một chỗ bạn có thể cần JOIN trong SQL, muốn lấy tên khách và tổng số đơn của họ thì JOIN Khách hàng với Đơn hàng qua khóa ngoại, muốn lấy danh sách sản phẩm trong đơn X thì JOIN ba bảng Đơn hàng, Dòng đơn, Sản phẩm. Nắm ERD thì hiểu vì sao cần JOIN và JOIN cái gì với cái gì, cách viết SQL cho BA thì đọc SQL cho BA: SELECT, JOIN, GROUP BY là đủ sống.
góc ERP, vì sao migration hay vỡ ở khóa ngoại#
Trong ERP, sau một màn hình trông đơn giản có thể là hàng chục bảng liên kết, một đơn mua kéo theo bảng đơn mua, dòng đơn mua, nhà cung cấp, vật tư, đơn vị tính, kho, cộng thêm một đống bảng cấu hình. Chính mạng khóa ngoại dày đặc này làm data migration hay vỡ, chuyển dữ liệu từ hệ cũ sang mà chỉ một khóa ngoại trỏ sai, mã vật tư không tồn tại hay mã kho bị trùng chẳng hạn, là cả bảng không nạp được. Hiểu ERD giúp bạn thấy trước mấy chỗ dễ vỡ này, bài Data migration: những cái bẫy không ai nói trước nói kỹ hơn.
BA vẽ ERD tới mức nào#
Bạn không cần vẽ chi tiết như kiến trúc sư dữ liệu, có ba mức và BA thường dừng ở hai mức đầu. Mức khái niệm (conceptual) chỉ vẽ entity và quan hệ, chưa quan tâm kiểu dữ liệu, mức logic (logical) thêm thuộc tính và khóa cho từng entity, còn mức vật lý (physical) gắn kiểu dữ liệu, tên bảng, chỉ mục thì để dev. Vẽ được ở mức logic là đủ trao đổi với cả nghiệp vụ lẫn dev, công cụ thì dbdiagram.io hoặc draw.io là đủ dùng.
Có một hiểu lầm theo chiều ngược lại, đọc được ERD rồi thì tự thiết kế database cho dev, theo mình đừng, BA dùng ERD để hỏi đúng câu nghiệp vụ, còn chuẩn hóa bảng, đặt chỉ mục là việc của người thiết kế dữ liệu.
đủ để hỏi đúng câu về dữ liệu#
Bạn không cần thành chuyên gia database, chỉ cần đọc được ERD để hiểu dữ liệu nằm đâu, quan hệ ra sao, vậy là đủ viết yêu cầu chính xác và nói chuyện được với dev. Đọc được dữ liệu rồi thì bước tiếp là ghi field và rule vào tài liệu yêu cầu, bài BRD, SRS, FS khác nhau thế nào chỉ chỗ đặt chúng.
Bạn gặp ERD lần đầu có bị ngợp không? Kể mình nghe qua Facebook hoặc LinkedIn nhé.



