Hệ thống ecommerce là một trong những hệ thống phổ biến nhất hiện nay, giúp các doanh nghiệp có thể bán hàng trực tuyến một cách dễ dàng và tiện lợi hơn. Để thiết kế một hệ thống ecommerce hoạt động tốt và hiệu quả, cần phải đưa ra các quy trình thực hiện, thiết kế database và lựa chọn các công nghệ phù hợp.

 

Trong bài viết này chúng ta tìm tìm hiểu về các quy trình thiết kế hệ thống và design database cụ thể cho một hệ thống E-commerce cơ bản.

I. Quy trình thiết kế

1. Các bươc cơ bản

 

Thiết kế hệ thống ecommerce cần tuân theo một số quy trình cơ bản như sau:

  1. Phân tích nhu cầu: Điều này bao gồm việc xác định các tính năng và chức năng cần có trong hệ thống ecommerce, bao gồm cả các yêu cầu về bảo mật, thanh toán, vận chuyển, quản lý đơn hàng và khách hàng.

  2. Thiết kế cơ sở dữ liệu: Hệ thống ecommerce cần có một cơ sở dữ liệu đáp ứng các yêu cầu về quản lý sản phẩm, đơn hàng, khách hàng, thanh toán và vận chuyển.

  3. Thiết kế giao diện người dùng: Giao diện người dùng của hệ thống ecommerce cần thiết kế đẹp, dễ sử dụng và có khả năng tùy chỉnh cao.

  4. Lựa chọn nền tảng và công nghệ: Hệ thống ecommerce có thể được xây dựng trên các nền tảng như Magento, Shopify, WooCommerce hoặc PrestaShop, và sử dụng các công nghệ như PHP, Java, Ruby on Rails hoặc .NET.

  5. Xây dựng và triển khai: Sau khi thiết kế và chọn công nghệ, hệ thống ecommerce sẽ được xây dựng và triển khai, bao gồm các bước như phát triển mã nguồn, kiểm thử, triển khai và cấu hình.

 

2. Phân tích chức năng

 

Một hệ thống ecommerce cần có các chức năng chính sau:

  1. Quản lý sản phẩm: cho phép người quản trị cập nhật và quản lý thông tin sản phẩm như tên sản phẩm, mô tả, giá cả, số lượng còn lại, ảnh sản phẩm, thương hiệu, danh mục sản phẩm, v.v.

  2. Quản lý đơn hàng: cho phép khách hàng đặt hàng và thanh toán trực tuyến, đồng thời cung cấp cho người quản trị thông tin chi tiết về đơn hàng như tên khách hàng, địa chỉ, sản phẩm đặt hàng, số lượng, giá cả, phí vận chuyển, v.v.

  3. Quản lý khách hàng: cho phép người quản trị quản lý thông tin khách hàng như tên, địa chỉ, email, số điện thoại, lịch sử mua hàng, v.v.

  4. Quản lý kho hàng: cho phép người quản trị theo dõi số lượng hàng tồn kho, lịch sử nhập xuất kho, đồng thời cung cấp thông tin chi tiết về mỗi sản phẩm như số lượng còn lại, số lượng đã bán, v.v.

  5. Hỗ trợ khách hàng: cung cấp cho khách hàng một kênh hỗ trợ trực tuyến như chat trực tiếp, email hoặc điện thoại để giải đáp các thắc mắc hoặc giải quyết các vấn đề liên quan đến sản phẩm và đơn hàng.

  6. Quản lý bán hàng: cho phép người quản trị theo dõi doanh số bán hàng, lợi nhuận, chi phí vận hành và quản lý các hoạt động khác liên quan đến bán hàng.

  7. Coupon và khuyến mãi: cho phép người quản trị quản lý các chương trình khuyến mãi, mã giảm giá, coupon để khách hàng có thể sử dụng để giảm giá hoặc nhận các ưu đãi khác khi mua hàng.

  8. Quản lý vận chuyển: cho phép người quản trị quản lý các thông tin về vận chuyển như đối tác vận chuyển, phí vận chuyển, thời gian giao hàng, v.v.

  9. Affiliate: cho phép người quản trị tạo các chương trình liên kết, hỗ trợ các đối tác khác quảng cáo và bán sản phẩm để tăng doanh số bán hàng.

  10. Thống kê và báo cáo: cho phép người quản trị theo dõi các số liệu thống kê như doanh thu, số lượng sản phẩm bán ra, số lượng đơn hàng, v.v. và tạo ra các báo cáo phân tích để đưa ra các quyết định kinh doanh.

  11. Tính năng tìm kiếm: cho phép khách hàng tìm kiếm sản phẩm dễ dàng bằng cách nhập từ khóa tìm kiếm và tìm kiếm theo danh mục sản phẩm, thương hiệu, giá cả, v.v.

  12. Chức năng đánh giá và nhận xét: cho phép khách hàng đánh giá và viết nhận xét về sản phẩm mình đã mua, giúp người dùng khác có thể đưa ra quyết định mua hàng tốt hơn.

  13. Chức năng đăng ký và đăng nhập: cho phép khách hàng đăng ký tài khoản để mua hàng và theo dõi đơn hàng, đồng thời cung cấp cho khách hàng một phương thức đăng nhập an toàn để bảo vệ thông tin cá nhân.

  14. Chức năng giỏ hàng: cho phép khách hàng thêm sản phẩm vào giỏ hàng và có thể thay đổi số lượng sản phẩm hoặc xóa sản phẩm ra khỏi giỏ hàng trước khi hoàn thành việc đặt hàng.

  15. Chức năng thanh toán trực tuyến: cho phép khách hàng thanh toán trực tuyến bằng các phương thức thanh toán phổ biến như thẻ tín dụng, ví điện tử, chuyển khoản ngân hàng, v.v.

  16. Chức năng xử lý đơn hàng: cho phép hệ thống xử lý đơn hàng và thông báo cho khách hàng về tình trạng đơn hàng, thời gian giao hàng, v.v.

  17. Chức năng phản hồi và góp ý: cho phép khách hàng phản hồi và góp ý về chất lượng sản phẩm và dịch vụ, giúp người quản trị cải thiện chất lượng sản phẩm và dịch vụ.

  18. Chức năng quản lý tài khoản: cho phép khách hàng quản lý thông tin tài khoản của mình như địa chỉ, thông tin thanh toán, đổi mật khẩu, v.v.

Một hệ thống e-commerce thành công cần có các chức năng trên để đáp ứng nhu cầu của khách hàng và giúp người quản trị quản lý và phát triển kinh doanh một cách hiệu quả. Tuy nhiên, việc thiết kế hệ thống e-commerce phải được thực hiện cẩn thận, bao gồm phân tích yêu cầu, thiết kế cơ sở dữ liệu, lựa chọn công nghệ, phát triển và triển khai hệ thống, kiểm tra và bảo trì để đảm bảo tính ổn định và bảo mật của hệ thống.

 

3. Lựa chọn công nghệ

 

Việc lựa chọn công nghệ phù hợp cũng là một yếu tố quan trọng trong việc xây dựng hệ thống e-commerce. Dưới đầy là các công nghệ cần thiết để phát triển một hệ thống e-commerce.

  1. Ngôn ngữ lập trình: Các ngôn ngữ lập trình phổ biến được sử dụng cho phát triển hệ thống e-commerce bao gồm PHP, Python, Ruby on Rails, Node.js, v.v. Các ngôn ngữ này đều có những ưu điểm riêng và phù hợp với các mục đích và yêu cầu khác nhau của doanh nghiệp.

  2. Cơ sở dữ liệu: Cơ sở dữ liệu là một phần không thể thiếu của hệ thống e-commerce để lưu trữ thông tin sản phẩm, khách hàng, đơn hàng, v.v. Các hệ quản trị cơ sở dữ liệu phổ biến được sử dụng cho hệ thống e-commerce bao gồm MySQL, MongoDB, Redis, Elasticsearch, v.v.

  3. Framework: Framework là một công cụ hỗ trợ để phát triển nhanh chóng và hiệu quả các ứng dụng web. Các framework phổ biến được sử dụng cho phát triển hệ thống e-commerce bao gồm Laravel, Django, Ruby on Rails, Express, v.v.

  4. Thư viện và công cụ phát triển: Các thư viện và công cụ phát triển phổ biến như jQuery, Bootstrap, AngularJS, ReactJS, v.v. cũng được sử dụng để phát triển giao diện người dùng và các tính năng khác cho hệ thống e-commerce.

  5. Công nghệ tích hợp: Hệ thống e-commerce cần phải tích hợp với các dịch vụ bên ngoài như hệ thống thanh toán, hệ thống vận chuyển, v.v. Các công nghệ tích hợp phổ biến như RESTful API, SOAP, OAuth2, v.v. được sử dụng để thực hiện tích hợp này.

  6. Công nghệ bảo mật: Các công nghệ bảo mật như SSL, mã hóa dữ liệu, xác thực người dùng, v.v. cũng là một phần quan trọng trong phát triển hệ thống e-commerce để bảo vệ thông tin cá nhân và đảm bảo an toàn cho các giao dịch thanh toán.

  7. Công nghệ đám mây: Công nghệ đám mây được sử dụng để lưu trữ và quản lý dữ liệu của hệ thống e-commerce. Các dịch vụ đám mây phổ biến như Amazon Web Services, Google Cloud Platform, Microsoft Azure, v.v. được sử dụng để lưu trữ và quản lý dữ liệu của hệ thống e-commerce.

  8. Công nghệ Big Data và AI: Công nghệ Big Data và AI (Trí tuệ nhân tạo) có thể giúp các hệ thống E-commerce phân tích, xử lý và phân loại dữ liệu khách hàng, giúp tối ưu hóa trải nghiệm mua sắm cho người dùng. Ví dụ, hệ thống có thể tự động gợi ý sản phẩm cho khách hàng dựa trên lịch sử mua sắm hoặc thói quen mua hàng trên trang web. Ngoài ra, công nghệ này còn có thể giúp phát hiện các hành vi gian lận hoặc giả mạo thông tin khách hàng.
  9. Công nghệ Blockchain: Công nghệ Blockchain là một giải pháp tiên tiến để giảm thiểu rủi ro và xác thực giao dịch trực tuyến. Với Blockchain, các giao dịch trực tuyến có thể được mã hóa và lưu trữ trong các khối được kết nối với nhau, đảm bảo tính toàn vẹn và an toàn cho người dùng. Ngoài ra, công nghệ này còn có thể giúp theo dõi các sản phẩm từ nguồn gốc đến khách hàng cuối cùng, giúp tăng tính minh bạch và đáng tin cậy trong việc mua bán trực tuyến.
  10. Công nghệ Cloud Computing: Công nghệ Cloud Computing cho phép lưu trữ và truy xuất dữ liệu từ xa thông qua internet. Với Cloud Computing, các hệ thống E-commerce có thể giảm thiểu chi phí về phần cứng và phần mềm, đồng thời cung cấp khả năng mở rộng và linh hoạt cao cho hệ thống. Ngoài ra, việc lưu trữ dữ liệu trên đám mây còn giúp tăng tính bảo mật và độ tin cậy của hệ thống.

II. Thiết kế Database

Dưới đây là ví dụ để thiết kế database cho một hệ thống E-Commerce cơ bản mà các bạn có thể tham khảo

Cơ sở dự liệu dưới đây sử dụng cho MySQL.

 

Bảng Product trong hệ thống e-commerce lưu trữ thông tin về các sản phẩm được bán trên trang web. Bảng này bao gồm các trường sau:

Field Name Data Type Key Description
id int PK (Primary Key) Khóa chính của sản phẩm
category_id int FK (Foreign Key) Khóa ngoại liên kết đến bảng Category
name varchar Not Null Tên sản phẩm
slug varchar Unique Đường dẫn của sản phẩm
description text   Mô tả chi tiết sản phẩm
price float Not Null Giá bán của sản phẩm
discount float   Giảm giá của sản phẩm (nếu có)
quantity int Not Null Số lượng sản phẩm còn lại
sold int   Số lượng sản phẩm đã bán. 
status tinyint(1) Not Null Trạng thái của sản phẩm: 0 - ngừng kinh doanh, 1 - kích hoạt
featured tinyint(1) Not Null Sản phẩm nổi bật: 0 - không, 1 - có
created_at datetime Not Null Thời gian tạo sản phẩm
updated_at datetime Not Null Thời gian cập nhật sản phẩm
deleted_at datetime   Thời gian xóa sản phẩm

Trường sold nên được lưu lại để tăng performance thay vì query qua các bảng Order và OrderItem để lấy số lượng. Việc cập nhật trường này cần được thực hiện liên tục khi có giao dịch mua bán xảy ra.

 

Bảng Category:

Field Name Data Type Key Description
id int PK Mã danh mục
name varchar(255) Not Null Tên danh mục
slug varchar(255) Unique Đường dẫn của danh mục (VD: /danh-muc/thoi-trang/)
parent_id int FK Mã danh mục cha (nếu có)
description text Null Mô tả danh mục
image varchar(255) Null Đường dẫn ảnh danh mục
status tinyint(1) Not Null Trạng thái hoạt động (1 - Active, 0 - Inactive)
created_at timestamp Not Null Ngày tạo
updated_at timestamp Null Ngày cập nhật
deleted_at timestamp Null

Ngày xóa (nếu có)

 

 

Bảng Customer:

Field Name Data Type Key Description
id int(11) PK Khóa chính của bảng, định danh khách hàng
first_name varchar(255) NOT NULL Tên của khách hàng
last_name varchar(255) NOT NULL Họ của khách hàng
email varchar(255) NOT NULL Địa chỉ email của khách hàng
password varchar(255) NOT NULL Mật khẩu của khách hàng, được mã hóa để bảo mật
address varchar(255) NOT NULL Địa chỉ của khách hàng
city varchar(255) NOT NULL Thành phố của khách hàng
state varchar(255) NOT NULL Tỉnh/Thành phố của khách hàng
country varchar(255) NOT NULL Quốc gia của khách hàng
postal_code varchar(255) NOT NULL Mã bưu chính của khách hàng
phone_number varchar(255) NOT NULL Số điện thoại của khách hàng
created_at datetime NOT NULL Thời điểm khách hàng đăng ký tài khoản trên hệ thống
updated_at datetime NOT NULL Thời điểm cập nhật thông tin khách hàng trên hệ thống

 

Bảng Order:

Field Name Data Type Key Description
id int PK Mã đơn hàng
customer_id int FK Mã khách hàng
status varchar(255) Not Null Trạng thái đơn hàng (đang chờ xử lý, đã xử lý, đã giao hàng, hủy đơn hàng, ...)
shipping_fee decimal(18,2)   Phí vận chuyển (nếu có)
total decimal(18,2) Not Null Tổng tiền đơn hàng
payment_id int FK Khóa ngoại tham chiếu đến thông tin thanh toán
coupon_id int FK Mã giảm giá (nếu có)
affiliate_id int FK Mã affiliate (nếu có)
created_at datetime Not Null Thời điểm tạo đơn hàng
canceled_at datetime Null Thời điểm hủy đơn hàng
completed_at datetime Null Thời điểm hoàn thành đơn hàng
delivery_at datetime Null Thời điểm giao hàng cho đơn vị vận chuyển

Ngoài ra đối với các hệ thống cần có thông tin giao nhận hàng và vận chuyển, chúng ta có thể cần phải thiết lập thêm các trường shipping_address_id billing_address_id shipping_fee

 

Bảng OrderItem: để lưu thông tin chi tiết của sản phẩm trong đơn hàng

Field Name Data Type Key Description
id int(11) PK Khóa chính của bảng
order_id int(11) FK Khóa ngoại tham chiếu đến bảng Order
product_id int(11) FK Khóa ngoại tham chiếu đến bảng Product
name varchar(255)   Tên sản phẩm
quantity int(11)   Số lượng sản phẩm được đặt hàng
price decimal(10,2)   Giá của sản phẩm khi được đặt hàng
created_at datetime   Thời điểm tạo đơn hàng
updated_at datetime   Thời điểm cập nhật đơn hàng
deleted_at datetime   Thời điểm đánh dấu xóa đơn hàng

Bảng này ta cần lưu lại thông tin chi tiết sản phẩm lúc đặt hàng như name quantity price mà không query qua bảng Product để lấy thông tin. Bởi vì khi một product bên bảng Product được update thì các thông tin đó sẽ không khớp với lúc người dùng đặt hàng.

 

Bảng Coupon:

Field Name Data Type Key Description
id int(11) PK Khóa chính của bảng, định danh cho mã giảm giá
coupon_code varchar(255) UNIQUE Mã code của coupon, duy nhất trên toàn hệ thống
coupon_type enum('percent', 'fixed_amount')   Loại giảm giá, có thể là giảm phần trăm hoặc một số tiền cố định
coupon_value decimal(10,2)   Giá trị giảm giá, nếu coupon_type là 'percent' thì giá trị này sẽ là phần trăm giảm, còn nếu coupon_type là 'fixed_amount' thì giá trị này sẽ là số tiền cố định giảm
coupon_start_date date   Ngày bắt đầu áp dụng coupon
coupon_end_date date   Ngày kết thúc áp dụng coupon
coupon_min_spend decimal(10,2)   Số tiền tối thiểu để sử dụng coupon
coupon_max_spend decimal(10,2)   Số tiền tối đa được giảm giá khi sử dụng coupon
coupon_uses_per_customer int   Số lần sử dụng coupon tối đa cho mỗi khách hàng
coupon_uses_per_coupon int   Số lần sử dụng coupon tối đa cho chính coupon đó
coupon_status enum('active', 'expired', 'disabled')   Trạng thái của coupon, có thể là đang hoạt động, hết hạn hoặc bị vô hiệu hóa
created_at datetime   Thời điểm tạo coupon
updated_at datetime   Thời điểm cập nhật thông tin coupon
deleted_at datetime   Thời điểm xóa coupon, nếu có

 

Bảng Affiliate:

Field Name Data Type Key Description
id int PK ID của affiliate
customer_id int FK ID của user liên kết với affiliate
code varchar   Mã code của affiliate
commission float   Tỉ lệ hoa hồng được nhận khi có đơn hàng
balance float   Số dư hoa hồng hiện tại
is_active boolean   Trạng thái kích hoạt của affiliate
created_at datetime   Ngày tạo affiliate
updated_at datetime   Ngày cập nhật affiliate

 

Bảng Cart:

Field Name Data Type Key Description
id int PK ID của giỏ hàng
customer_id int FK (Customer) ID của khách hàng
created_at timestamp   Thời điểm tạo giỏ hàng
updated_at timestamp   Thời điểm cập nhật giỏ hàng

 

Chúng ta cần một bảng phụ để lưu thông tin chi tiết về các sản phẩm trong giỏ hàng

Bảng CartItem:

Field Name Data Type Key Description
id int PK ID của sản phẩm trong giỏ hàng
cart_id int FK (Cart) ID của giỏ hàng
product_id int FK (Product) ID của sản phẩm
quantity int   Số lượng sản phẩm trong giỏ hàng
price float   Giá của sản phẩm tại thời điểm được thêm vào giỏ hàng
created_at timestamp   Thời điểm thêm sản phẩm vào giỏ hàng
updated_at timestamp   Thời điểm cập nhật số lượng sản phẩm trong giỏ hàng hoặc giá bán

Bảng CartItem sẽ lưu thông tin chi tiết về sản phẩm trong giỏ hàng, bao gồm ID của sản phẩm, số lượng, giá bán và thời điểm được thêm vào giỏ hàng. Bảng Cart sẽ lưu thông tin chung về giỏ hàng, bao gồm ID của khách hàng, thời điểm tạo giỏ hàng và thời điểm cập nhật giỏ hàng.

 

Bảng Review:

Field Name Data Type Key Description
id int PK ID của review
product_id int FK ID của sản phẩm được đánh giá
customer_id int FK ID của khách hàng đánh giá
rating int   Điểm đánh giá (từ 1-5)
title varchar   Tiêu đề đánh giá
content text   Nội dung đánh giá
is_approved boolean   Trạng thái duyệt đánh giá
created_at datetime   Ngày tạo đánh giá
updated_at datetime   Ngày cập nhật đánh giá

 

Bảng Assets:  cho phép quản lý các file ảnh, video, tài liệu,... trong hệ thống của bạn. Khi cần sử dụng các assets này cho các chức năng khác trong hệ thống, bạn có thể truy xuất thông tin từ bảng này.

Field Name Data Type Key Description
id INT PK Mã số duy nhất của asset
filename VARCHAR   Tên file của asset
path VARCHAR   Đường dẫn tới file asset
type VARCHAR   Loại của asset (image, video, document,...)
size INT   Kích thước của asset
created_at DATETIME   Thời điểm tạo asset
updated_at DATETIME   Thời điểm cập nhật asset
deleted_at DATETIME   Thời điểm xóa asset (nếu có)

 

Bảng Assets có quan hệ một-nhiều (many-to-one) với bảng Product, có nghĩa là mỗi sản phẩm trong bảng Product có thể có nhiều hình ảnh trong bảng Assets. Trong bảng Assets, cột product_id được sử dụng để lưu trữ khóa ngoại kết nối với khóa chính id trong bảng Product. Các bản ghi trong bảng Assets có product_id tương ứng với sản phẩm mà hình ảnh đó thuộc về trong bảng Product.

 

Bảng Product_Asset

Field Name Data Type Key Description
id int PK Primary key của bảng
product_id int FK Khóa ngoại đến bảng Product
asset_id int FK Khóa ngoại đến bảng Asset
type varchar   Loại của asset (ví dụ: ảnh chính, ảnh phụ, ...)

 

Ngoài ra mỗi Product còn có nhiều thuộc tính khác nhau như: Màu sắc, kích thước,... Để tối ưu cho việc quản lý các thuộc tính của sản phẩm ta cũng cần bổ sung thêm các bảng Attributes như sau

 

Bảng Attributes:

Field Name Data Type Key Description
id int PK ID của thuộc tính
name varchar   Tên thuộc tính (ví dụ: "Màu sắc", "Kích thước",...)
description varchar   Mô tả thuộc tính

 

Ta có thể sử dụng một bảng trung gian để lưu trữ thông tin về quan hệ giữa sản phẩm, ảnh và thuộc tính. Bảng trung gian này sẽ có các trường sau:

Field Name Data Type Key Description
id int PK ID của bản ghi
product_id int FK ID của sản phẩm
asset_id int FK ID của ảnh
attribute_id int FK ID của thuộc tính
value varchar   Giá trị của thuộc tính cho sản phẩm và ảnh tương ứng

 

Ví dụ, để lưu thông tin về màu sắc của một sản phẩm và ảnh tương ứng, ta có thể thêm vào bảng trung gian như sau:

 

id product_id asset_id attribute_id value
1 1 1 1 Đen
2 1 2 1 Trắng

Ở ví dụ trên, sản phẩm có ID là 1, ảnh đầu tiên của sản phẩm có ID là 1 và ảnh thứ hai có ID là 2. Thuộc tính "Màu sắc" có ID là 1 và giá trị của thuộc tính cho ảnh đầu tiên là "Đen".

 

Trên đây chỉ là Database của một hệ thống E-Commerce cơ bản. Tùy vào vào yêu cầu của khách hàng cũng như các tính năng khác của hệ thống mà chúng ta sẽ chỉnh sửa và bổ sung lại Database này cho phù hợp. Tuy nhiên đây là các tính năng cần thiết mà một hệ thống E-Commerce cần có để hoạt động tốt.

III. Kết luận

Tóm lại, để thiết kế một hệ thống E-commerce đòi hỏi phải có kiến thức chuyên sâu về lập trình, database, UX/UI design, bảo mật, quản lý dữ liệu, thương mại điện tử và nhiều yếu tố khác. Việc thiết kế và triển khai hệ thống E-commerce cần phải được thực hiện bởi các developer có kinh nghiệm và kiến thức đầy đủ.

Tuy nhiên, nếu bạn là một sinh viên chuyên ngành công nghệ thông tin và đang cân nhắc đến việc thiết kế một hệ thống E-Commerce cho đồ án tốt nghiệp của mình thì cũng đừng ngần ngại mà thử sức. Nó sẽ giúp các bạn nắm rõ hơn về quy trình phát triển, phân tích và thiết kế dữ liệu,... cho các hệ thống khác sau này.