Bài 3: Phân tích quan hệ cơ sở dữ liệu và thiết kế mô hình dữ liệu

Doanh nghiệp gần bạn nhất

được xác nhận bởi itcctv

Bài 3: Phân tích quan hệ cơ sở dữ liệu và thiết kế mô hình dữ liệu
Hình ảnh rao vặt

Bài 3: Phân tích quan hệ cơ sở dữ liệu và thiết kế mô hình dữ liệu

Trong một hệ thống website bán hàng, cơ sở dữ liệu là thành phần cốt lõi giúp lưu trữ toàn bộ thông tin về người dùng, sản phẩm, đơn hàng, giao dịch và nhiều phân hệ chức năng khác. Một hệ thống quản lý dữ liệu tốt sẽ giúp việc vận hành trở nên trơn tru, giảm thiểu lỗi phát sinh và dễ dàng mở rộng khi cần thiết. Ở bài viết này, chúng ta sẽ cùng phân tích kiến trúc cơ sở dữ liệu của hệ thống Shop-main và làm rõ các mối quan hệ giữa các bảng.

Hệ thống Shop-main sử dụng cơ sở dữ liệu quan hệ, điển hình là MySQL. Dữ liệu được tổ chức theo mô hình chuẩn hóa, phân chia thành các bảng riêng biệt đại diện cho từng thực thể, đồng thời liên kết với nhau thông qua các khóa ngoại để đảm bảo tính toàn vẹn và khả năng truy xuất thuận tiện. Tùy vào đặc điểm nghiệp vụ, một số bảng có quan hệ một – một, một – nhiều, hoặc nhiều – nhiều.

Ví dụ điển hình là mối quan hệ giữa bảng người dùng và bảng vai trò. Mỗi người dùng có thể đảm nhận nhiều vai trò khác nhau như khách hàng, nhân viên kho, hoặc quản trị viên. Do đó, hệ thống thiết lập bảng trung gian để liên kết người dùng với vai trò, từ đó hình thành mối quan hệ nhiều – nhiều. Trong khi đó, mỗi người dùng lại có thông tin thiết lập cá nhân riêng biệt, như địa chỉ mặc định hay hình đại diện, được lưu trong một bảng khác có quan hệ một – một với bảng người dùng chính.

STTTên bảngMô tả chức năngKhóa chínhKhóa ngoạiQuan hệ
1usersQuản lý thông tin người dùng (khách, admin, nhân viên)id1–1, 1–n
2rolesVai trò người dùng (admin, kho, khách hàng, v.v.)idn–n (qua pivot)
3user_rolesBảng trung gian giữa users và rolesiduser_id, role_idn–n
4user_settingsCài đặt cá nhân người dùngiduser_id1–1 với users
5productsQuản lý sản phẩmidcat_id, brand_id1–n
6product_extendThuộc tính mở rộng của sản phẩm (giá, màu, thông số...)idproduct_id1–1
7categoriesDanh mục sản phẩmid1–n
8brandsThương hiệu sản phẩmid1–n
9tag_productThẻ (tag) sản phẩmidproduct_id, tag_idn–n
10tagsDanh sách các tag (phân loại đặc biệt)idn–n (qua bảng phụ)
11ordersĐơn đặt hàng của người dùngiduser_id, wh_id, status_id1–n
12order_detailsChi tiết sản phẩm trong đơn hàngidorder_id, product_id1–n
13paymentsGiao dịch thanh toán (VNPAY, SEPAY)idorder_id, user_id, gateway_id1–n
14gatewaysDanh sách các cổng thanh toán hỗ trợid1–n
15warehousesDanh sách kho hàngid1–n
16warehouseinPhiếu nhập khoidwh_id, user_id, supplier_id1–n
17warehousein_detailChi tiết phiếu nhập khoidwarehousein_id, product_id1–n
18warehouseoutPhiếu xuất khoidwh_id, user_id, reason_id1–n
19warehouseout_detailChi tiết phiếu xuất khoidwarehouseout_id, product_id1–n
20inventory_logsNhật ký kiểm kê khoidwh_id, user_id1–n
21suppliersNhà cung cấpid1–n
22transactionsQuản lý giao dịch tài chínhiduser_id, order_id, type_id1–n
23cashbookPhiếu nhập quỹ / xuất quỹiduser_id, type1–n
24blogsBài viết blog, tin tứciduser_id, cat_id1–n
25tag_blogGắn thẻ vào bài viếtidblog_id, tag_idn–n
26blog_commentsBình luận bài viếtidblog_id, user_id, parent_id1–n
27returnsPhiếu trả hàngidorder_id, user_id, type1–n
28warrantiesThông tin bảo hành sản phẩmidproduct_id, user_id, order_id1–n

Ghi chú

  • 1–1: Quan hệ một – một (ví dụ: useruser_settings)
  • 1–n: Quan hệ một – nhiều (ví dụ: category chứa nhiều product)
  • n–n: Quan hệ nhiều – nhiều thông qua bảng phụ (pivot table)
  • Một số bảng có thêm các cột như created_at, updated_at, deleted_at để hỗ trợ quản lý dữ liệu theo chuẩn Laravel Eloquent

Bên cạnh đó, hệ thống sản phẩm cũng được thiết kế theo hướng linh hoạt, có thể mở rộng. Mỗi sản phẩm thuộc một danh mục cụ thể và có thể gắn với một thương hiệu nhất định. Ngoài ra, sản phẩm còn có thể có các thuộc tính bổ sung như màu sắc, kích thước, mã SKU, và được tổ chức trong một bảng mở rộng để không làm phình to bảng chính. Trong trường hợp cần lọc theo thẻ sản phẩm, một bảng trung gian giúp kết nối sản phẩm với các tag được định nghĩa trước, thể hiện mối quan hệ nhiều – nhiều.

Đối với quy trình bán hàng, mỗi đơn hàng do người dùng tạo ra sẽ được lưu vào bảng đơn hàng chính. Mỗi đơn có thể chứa nhiều mặt hàng khác nhau, vì vậy cần một bảng chi tiết đơn hàng để lưu từng sản phẩm được đặt kèm theo số lượng, giá và tổng tiền. Đơn hàng cũng liên kết với bảng trạng thái giao dịch để biết đơn đã được xác nhận, thanh toán hay hủy. Đồng thời, hệ thống còn có bảng ghi nhận lịch sử thanh toán, bảng liên kết giao dịch với các cổng như VNPAY hoặc SEPAY.

Một số phân hệ đặc biệt như nhập kho, xuất kho, nhập quỹ hoặc kiểm kê cũng có thiết kế riêng với cấu trúc tách bảng phiếu chính và bảng chi tiết. Cách thiết kế này giúp hệ thống dễ kiểm soát dữ liệu theo nhóm phiếu, tránh trùng lặp và đảm bảo có thể dễ dàng tính toán khi tạo báo cáo.

Để thiết kế mô hình dữ liệu chuẩn xác, bạn nên sử dụng các công cụ như MySQL Workbench hoặc Draw.io để xây dựng sơ đồ quan hệ thực thể. Việc biểu diễn các bảng và mối quan hệ trên sơ đồ sẽ giúp bạn dễ nhìn, dễ kiểm soát và phát hiện ra những mối quan hệ còn thiếu hoặc chưa hợp lý. Ngoài ra, trong quá trình xây dựng hệ thống bằng Laravel, các mối quan hệ này sẽ được ánh xạ thành các model với các hàm như belongsTo, hasMany hoặc belongsToMany để xử lý truy vấn một cách tối ưu.

Tóm lại, việc thiết kế cơ sở dữ liệu không chỉ là bước kỹ thuật mà còn phản ánh trực tiếp hiểu biết nghiệp vụ của bạn đối với hệ thống. Một mô hình dữ liệu chặt chẽ sẽ giúp quá trình xây dựng hệ thống sau này trở nên dễ dàng hơn rất nhiều, đồng thời hạn chế tối đa lỗi trong lưu trữ và truy xuất thông tin. Ở các bài viết tiếp theo, chúng ta sẽ đi sâu vào từng quy trình nghiệp vụ cụ thể như nhập hàng, bán hàng, kiểm kê và thanh toán.

💬 bình luận

Bình luận

Trở thành viên của itcctv — Đăng ký
Thủ thuật tin học văn phòng Thủ thuật Word Thủ thuật Excel
Cuộn