Công cụ thiết kế bảng CSDL quan hệ đẹp, trực quan, có thể làm việc nhóm 2021

03 tháng 10, 2021 - 26857 lượt xem

Bạn tham gia một dự án phần mềm. Team bạn cùng nhau thiết kế, góp ý, chỉnh sửa thiết kế CSDL quan hệ nhưng vì Covid mọi thành viên phải làm việc từ xa. Vậy công cụ nào vừa miễn phí, vừa tốt để thiết kế CSDL?

1. Đi tìm công cụ thiết kế ERD tốt, cộng tác qua mạng và lại miễn phí !

2 tháng vừa qua, tôi tham gia một dự án phần mềm sử dụng CSDL Postgresql. Team của tôi cần thiết kế lại toàn bộ cấu trúc bảng khoảng 40 bảng nằm trong 7 schema khác nhau. Tất cả các thành viên trong team đều làm việc từ xa. Ban đầu việc thiết kế CSDL gặp rất nhiều khó khăn vì công cụ thiết kế ERD (Entity Relation Diagram) ngày hôm nay rơi vào mấy trường hợp:

  • Rất tốt, xịn thì ở dạng Desktop ví dụ như Erwin Modeller chỉ có bản chạy trên Windows, chi phí license rất cao.
  • Miễn phí như PgAdmin thì chỉ xem được quan hệ nhưng không chỉnh sửa được, tính năng này vẫn chỉ ở bản beta.
  • Cho phép cùng cộng tác thiết kế trực tuyến như https://dbdiagram.io thì khi xuất ra DDL cho Postgresql lỗi, ngay cả với thiết kế mẫu mực có sẵn trên web site.

db_diagram

Mặc dù dbdiagram có chút lỗi như vậy. Nhưng tôi nghĩ nếu tỷ mỷ sửa lại, chắc cuối cùng DDL Script export ra sẽ chạy được. Nhược điểm là dbdiagram có ngôn ngữ mô tả bảng, quan hệ tổng quát có thể áp dụng cho MySQL, Postgresql, SQL Server nhưng lại không thực sự chi tiết và hỗ trợ hết các kiểu đặc thù ví dụ Postgresql có kiểu array, hstore, jsonb.

Pgadmin có chức năng ERD nhưng vẫn ở beta, và chỉ xem chứ không thể thiết kế. DBeaver có chức năng ERD cũng chỉ xem, không vẽ được. Ưu điểm của DBeaver là có thể chọn bảng từ các schema khác nhau rồi ném vào một màn hình thiết kế ERD nhìn đỡ rối mắt khi có quá nhiều bảng.

Những phần mềm khác thiết kế tốt, cộng tác tốt giá thuê bao hàng tháng với lập trình viên cỡ 60-99 USD. Team 6 người sẽ phải trả 500$/tháng.

2. Đặt lại tiêu chí công cụ thiết kế ERD

  1. Thiết kế tốt, đẹp, nhìn trực quan, chú thích được, xuất ra PDF, in được
  2. Cộng tác qua mạng nhiều người cùng vẽ một lúc
  3. Chia thành nhiều Tab màn hình để chia nhỏ mức độ phức tạp
  4. Miễn phí

Không cần xuất DDL Script bởi vì khi hệ thống đã triển khai production. Chúng ta sẽ phải thực hiện DB migration sửa từng bảng, từng trường một. Việc xuất ra cả một file DDl Script cũng chả có tác dụng nhiều lắm. Nó chỉ làm cho những người lười thích thú, nhưng không có ứng dụng thực tế vào sản phẩm thật. Lập trình viên CSDL nghiêm túc sẽ phải tự viết DDL script để kiểm soát tốt nhất các điều kiện ràng buộc constrains, chỉ mục index

Ở mức thiết kế ERD để cả team phần mềm hiểu, góp ý, chúng ta chỉ cần vẽ được quan hệ giữa các bảng, primary key, foreign key, danh sách các cột - kiểu dữ liệu trong bảng.

3. app.diagrams.net

Rất may mắn, chúng tôi tìm được https://app.diagrams.net/. Ưu điểm của phần mềm này là gì?

  • Công cụ thiết kế diagram miễn phí
  • Cho phép cộng tác trực tuyến qua Google Drive theo quyền hạn: Editor, Viewer, Commenter. Hoặc chuyển quyền tác giả sang người khác cũng được
  • Hỗ trợ thiết kế rất nhiều loại diagram: căn bản, UML, ERD, Organization Chart, Flow Chart
  • Có rất nhiều mẫu hình có sẵn, chỉ cần click vào More Shapes là ra.
  • Mức độ tinh tế, đường nét, màu sắc hình trong app.diagrams.net vượt trội so với bất kỳ công cụ thiết kế ERD nào bởi nó sinh ra để vẽ diagram.
  • Hỗ trợ nhiều tab kiểu như worksheet trong Excel
  • Nó cũng hỗ trợ paste vào lệnh tạo bảng CREATE TABLE để vẽ ra bảng, nhưng tôi thấy còn rất sơ sài, nên tôi không dùng.
  • Mức độ chi tiết, đầy đủ đường liên kết giữa hai bảng hơn rất nhiều các phần mềm ERD mà tôi biết.

Ví dụ một ERD tôi vẽ dùng app.diagrams.net

ERD

Ở đây tôi chỉ dùng dạng bảng tối giản List

List

Kết hợp với các loại kết nối trong thư viện ERD

Relationship

4. Kinh nghiệm thực tế sau khi thiết kể bảng

  1. Hãy thiết kế từ tổng quan xuống chi tiết Top-Down hơn là Bottom-Up

  2. Ưu tiên tên bảng, Primary Key, Foreign Key rồi mới tên các trường NOT NULL, rồi trường NULL

  3. Tuân thủ tên bảng chữ thường, các từ cách nhau bằng dấu -, tránh dùng các từ khoá như user, role, order, select, count làm tên bảng hay tên cột

  4. Hãy tận dụng khả năng tô mầu trông app.diagrams.net để phân biệt rõ đâu là Primary Key, đâu là Foreign Key.

    Colorize_PK_FK

  5. Khi số lượng bảng ít, các đường liên kết giữa các bảng nhìn trực quan và đẹp. Nhưng khi số lượng bảng tăng, đường nối chằng chịt nhìn rất rối mắt. Do đó hãy sử dụng thống nhất bộ quy tắc mô tả cột như phần tiếp.

5. Quy tắc mô tả cột

  1. Luôn sử dụng tên cột id cho trường primary key. Ví dụ id: PK

  2. Nếu là foreign key thì table_id. Ví dụ: outline_id: FK outline

  3. Với ứng dụng sẽ dùng kiến trúc microservice, hạn chế dùng kiểu primary key tự tăng autoincrement hay serial. Kiểu này sẽ gây xung đột khi scale out database dạng cluster.

  4. Muốn mô tả cần đánh chỉ mục hãy bổ xung IDX: email: text IDX

  5. Muốn tạo constraint not null hãy bổ xung !NULL: name: text !NULL

  6. Cột dạng enum nên liệt kê các giá trị enum ra `status : {draft, active, hidden}

  7. Cột nào còn chưa rõ ràng, cần thảo luận thì tô nền đỏ gây sự chú ý

  8. Đừng dùng lẫn lộn name với title, thống nhất dùng một từ thống nhất thôi ví dụ name

  9. Cứ mạnh dạn bổ xung chú thích khi cần.

    note

Khi đã tuân thủ quy tắc mô tả cột thì chúng ta không cần vẽ đường liên kết nữa.

6. Kết luận

https://app.diagrams.net/ là công cụ rất tốt để vẽ ERD. Nó không hỗ trợ xuất ra DDL Script (Data Definition Language Script dùng để tạo bảng, tạo quan hệ, constraint). Tốt nhất bạn hãy dành thời gian để viết cẩn thận DDL Script. CSDL là trái tim của cả hệ thống phần mềm, do đó hãy thiết kế tỷ mỷ, có tính toán, thử nghiệm đừng làm lạm dụng chức năng tự sinh mã, sau này bạn sẽ hối hận vì không kiểm soát được code tự sinh ra đâu.

Bình luận

avatar
Trương Văn Tuấn 2021-10-03 14:38:00.36424 +0000 UTC

Em đang học PostgreSQL, thiết kết ERD bằng phần mềm này. Thao tác với database, schema hoằn toàn bằng Terminal. Cảm nhận mình làm chủ, kiểm soát các thứ mình thiết kế. https://app.diagrams.net tích hợp với bộ Jira Software tốt nhưng mất phí. Cảm ơn chia sẻ của thầy.

Andy Nguyen
Andy Nguyen 2022-11-16 08:41:18.717465 +0000 UTC

Chào Tuấn, anh có 1 dự án nhỏ, dự định dùng PostgreSQL, anh có thể liên lạc với em được không? Email anh andy@sevenseas.vn 079 66 68 247

Avatar
avatar
Han Truong Van 2023-07-28 08:54:33.334716 +0000 UTC

Hiện tại em đang thiết kế database theo cách trên của bác và thấy hiện tại rất ưng ý.
Cảm ơn bác nhiều nhé.

Trịnh Minh Cường
Trịnh Minh Cường 2023-07-31 07:40:23.100816 +0000 UTC

Tuyệt vời, lâu lâu có người đọc bài cho ý kiến

Văn Hân Trương
Văn Hân Trương 2023-10-14 05:01:54.240374 +0000 UTC

Sau khoảng 3 tháng áp dụng sơ đồ trên vào công việc thực tế, em thấy hiện tại em gặp vấn đề về các trường ghi chú sẽ nhiều lên và các trường dữ liệu dạng enum, dẫn đến sẽ có một độ rối nhất định. Thì giải pháp hiện tại em đang tiến hành là viết một tài lệu hướng dẫn sử dụng riêng cho từng diagram. Em mong thầy có thể góp ý với em về giải pháp cho vấn đề trên ạ.

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +2 Thích
+2