Case study: ứng dụng ChatGPT thiết kế cấu trúc bảng dữ liệu phân quyền theo nhóm

Hầu hết các hệ thống CRM, ERP và các mô hình tương tự theo kiến thức hạn hẹp của mình thì có 1 nỗi đau chính là quá trình phân tích “nghiệp vụ”. Đặc thù riêng của nghiệp vụ chính xác là sự thay đổi, điều chỉnh không ngừng qua các giai đoạn phát triển, mở rộng,… nó cũng khiến cho các đơn vị có đội ngũ kỹ thuật họ đều tự triển khai để chủ động tích hợp thay vì thụ động lệ thuộc lâu dài vào các hệ thống chuyên cung cấp giải pháp cho doanh nghiệp.

Phân tích nghiệp vụ ban đầu sẽ thực sự cần một chuyên gia để đáp ứng nhu cầu thiết kế phù hợp nhất với quy chế tổ chức. Khoan đã, đó là trước đây? Trước đây việc phân tích và thiết kế việc này đòi hỏi kinh nghiệm, chuyên môn nhất định. Hiện tại việc phân tích nghiệp vụ từng thành phần và kết hợp thành nghiệp vụ tổng thể theo mình đã dễ và nhanh hơn trước rất nhiều khi có sự hỗ trợ từ AI, cụ thể là #ChatGPT. Dĩ nhiên, công việc phân tích này vẫn cần phải có sự tham gia, phối hợp của tất cả thành viên của các phòng ban trong công ty.

Trong quá trình học hỏi và ứng dụng ChatGPT mình sẽ liên tục chia sẻ, thảo luận về các vấn đề này & lập trình. Sau cùng sẽ là kết quả tổng kết để có thể xây dựng đầy đủ một bản CRM nho nhỏ. Mọi người tham khảo cho vui nhé!

Case đầu tiên mình chia sẻ trong series này chính là phân quyền. Với yêu cầu này mình có thể tham khảo ChatGPT như sau để nó gợi ý bảng cho cấu trúc dữ liệu đơn giản.

Hỏi ChatGPT

Thiết kế giúp tôi cấu trúc bảng để lưu trữ phân quyền users trên hệ thống theo: nhóm quyền.
Cụ thể trong mỗi nhóm quyền sẽ có nhiều quyền cụ thể để quy định user có được phép truy cập tài nguyên qua router (url các view tính năng).

Giả định bảng user đã có các trường sau: id, user_name, password, email,

Lưu ý:
– Thiết kế cấu trúc tối ưu nhất có thể.
– Thiết kế các bảng dữ liệu và liệt kê theo dạng table html.
– Thiết kế các câu lệnh query để tạo bảng trên 1 database tên testdb

ChatGPT phản hồi

Để lưu trữ phân quyền users trên hệ thống theo nhóm quyền, chúng ta có thể sử dụng 2 bảng dữ liệu: roles và permissions.

Bảng roles chứa các thông tin về nhóm quyền, bao gồm id, tên nhóm quyền và mô tả.

Bảng permissions chứa các thông tin về quyền cụ thể, bao gồm id, tên quyền, mô tả và đường dẫn router (url) tương ứng.

Chúng ta cũng cần một bảng trung gian để liên kết giữa các user với nhóm quyền và quyền cụ thể, bảng này có tên là role_user_permission hoặc tên tùy chọn.

Bảng role_user_permission sẽ bao gồm các trường: id, user_id, role_id và permission_id.

Dưới đây là thiết kế bảng và liệt kê theo dạng table:

Bảng `roles`
|------------------------------------------------|
| id | name | description |
|----|--------------|---------------------------|
| 1 | Administrator| Quản trị hệ thống |
| 2 | Manager | Quản lý nội dung |
| 3 | User | Người dùng thường |
|------------------------------------------------|

Bảng `permissions`
|---------------------------------------------------------------|
| id | name | description | router |
|----|---------------|-------------------------------|--------------|
| 1 | Manage users | Quản lý người dùng | /users |
| 2 | Manage posts | Quản lý bài viết | /posts |
| 3 | View profile | Xem trang cá nhân | /profile |
|---------------------------------------------------------------|

Bảng `role_user_permission`
|------------------------------------------|
| id | user_id | role_id | permission_id |
|----|---------|---------|---------------|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 2 |
| 3 | 2 | 2 | 2 |
| 4 | 2 | 3 | 3 |
|------------------------------------------|

 

Với thiết kế trên, chúng ta có thể xây dựng các câu lệnh query để tạo bảng trên 1 database tên testdb. Dưới đây là câu lệnh SQL để tạo các bảng trên database testdb:

#databse #họclạitừđầu

CREATE TABLE `roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `permissions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `router` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE role_user_permission (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL,
role_id int(11) NOT NULL,
permission_id int(11) NOT NULL,
PRIMARY KEY (id),
KEY fk_role_user_permission_users (user_id),
KEY fk_role_user_permission_roles (role_id),
KEY fk_role_user_permission_permissions (permission_id),
CONSTRAINT fk_role_user_permission_users FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
CONSTRAINT fk_role_user_permission_roles FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE,
CONSTRAINT fk_role_user_permission_permissions FOREIGN KEY (permission_id) REFERENCES permissions (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Lưu ý rằng các câu lệnh trên sử dụng `utf8mb4` để hỗ trợ các ký tự đặc biệt trong tiếng Việt. Nếu database của bạn không hỗ trợ `utf8mb4`, bạn có thể thay thế nó bằng `utf8` hoặc bất kỳ bộ ký tự nào khác được hỗ trợ.
Hy vọng rằng thiết kế này sẽ giúp bạn cấu trúc bảng để lưu trữ phân quyền users trên hệ thống một cách tối ưu.

Kết luận

ChatGPT hỗ trợ tương đối tốt trong việc phân tích nghiệp vụ theo từng thành phần và đưa ra kết quả gợi ý rất nhanh. Thời gian còn lại là dựa vào kinh nghiệm, kiến thức của bạn để điều chỉnh, tối ưu và tích hợp. Hiệu suất đặt ra trong trường hợp mô tuýp tương tự này là giảm đi 80% thời gian làm việc cho riêng case này đó chứ?