1. Tổng quan về cơ sở dữ liệu
Khi xây dựng một ứng dụng phần mềm, dữ liệu cần được lưu trữ để có thể truy xuất, cập nhật và quản lý trong suốt quá trình hoạt động. Chẳng hạn, một ứng dụng bán hàng cần lưu thông tin sản phẩm, khách hàng, đơn hàng và thanh toán.
Để thực hiện công việc này, hệ thống thường sử dụng cơ sở dữ liệu (Database) cùng với một hệ quản trị cơ sở dữ liệu (DBMS).
Database là gì?
Database (cơ sở dữ liệu) là tập hợp dữ liệu được tổ chức để có thể lưu trữ, truy xuất và quản lý.
Ví dụ, một database của ứng dụng bán hàng có thể chứa các bảng:
products: thông tin sản phẩm.users: thông tin người dùng.orders: thông tin đơn hàng.order_items: các sản phẩm thuộc từng đơn hàng.
Mỗi bảng lưu trữ một nhóm dữ liệu có liên quan đến nhau.
DBMS là gì?
DBMS (Database Management System) là hệ quản trị cơ sở dữ liệu, tức phần mềm cung cấp các chức năng để tạo, lưu trữ, truy vấn, cập nhật và quản lý dữ liệu.
DBMS có thể hỗ trợ kiểm soát quyền truy cập, quản lý giao dịch, sao lưu và phục hồi dữ liệu, tùy theo hệ thống.
Một số DBMS phổ biến gồm PostgreSQL, MySQL, Microsoft SQL Server và Oracle Database.
RDBMS là gì?
RDBMS (Relational Database Management System) là hệ quản trị cơ sở dữ liệu quan hệ.
Trong mô hình quan hệ, dữ liệu thường được tổ chức thành các bảng gồm hàng (row) và cột (column). Các bảng có thể liên kết với nhau thông qua khóa chính (Primary Key) và khóa ngoại (Foreign Key).
Ví dụ, bảng products có thể được tổ chức như sau:
| id | name | price |
|---|---|---|
| 1 | Keyboard | 500000 |
| 2 | Mouse | 200000 |
| 3 | Monitor | 3000000 |
Trong đó:
idđịnh danh từng sản phẩm.namelưu tên sản phẩm.pricelưu giá sản phẩm.
Nếu một bảng khác lưu thông tin đơn hàng, nó có thể tham chiếu đến sản phẩm thông qua khóa ngoại khi thiết kế dữ liệu phù hợp.
PostgreSQL và MySQL đều là những hệ quản trị cơ sở dữ liệu quan hệ phổ biến.
SQL là gì?
SQL (Structured Query Language) là ngôn ngữ được sử dụng để truy vấn và thao tác với dữ liệu trong các hệ quản trị cơ sở dữ liệu quan hệ.
Ví dụ:
SELECT *
FROM products
WHERE price > 100000;
Câu lệnh trên lấy những sản phẩm có giá lớn hơn 100.000.
Một số câu lệnh SQL thường gặp:
SELECT: truy vấn dữ liệu.INSERT: thêm dữ liệu.UPDATE: cập nhật dữ liệu.DELETE: xóa dữ liệu.CREATE TABLE: tạo bảng.ALTER TABLE: thay đổi cấu trúc bảng.
Cần phân biệt rõ: SQL là ngôn ngữ, còn PostgreSQL và MySQL là các hệ quản trị có khả năng thực thi những câu lệnh SQL. Mỗi hệ quản trị có thể hỗ trợ những cú pháp và tính năng riêng.
2. PostgreSQL là gì?

PostgreSQL là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở, hỗ trợ SQL và cung cấp nhiều tính năng phục vụ việc quản lý dữ liệu, xử lý giao dịch và thực hiện các truy vấn phức tạp.
PostgreSQL thường được sử dụng trong các ứng dụng Backend, hệ thống nghiệp vụ, nền tảng thương mại điện tử và những ứng dụng cần mô hình dữ liệu linh hoạt.
Những đặc điểm nổi bật của PostgreSQL
1. Hỗ trợ SQL và truy vấn phức tạp
PostgreSQL hỗ trợ nhiều tính năng SQL như JOIN, truy vấn con, CTE, hàm cửa sổ (Window Functions) và các thao tác tổng hợp dữ liệu.
Những tính năng này hữu ích khi cần truy vấn dữ liệu từ nhiều bảng hoặc thực hiện các phép phân tích phức tạp.
2. Hỗ trợ nhiều kiểu dữ liệu
Ngoài các kiểu dữ liệu thông dụng như INTEGER, VARCHAR, DATE và BOOLEAN, PostgreSQL còn hỗ trợ các kiểu dữ liệu như:
UUID: lưu định danh duy nhất.JSONvàJSONB: lưu dữ liệu dạng JSON.ARRAY: lưu tập hợp giá trị cùng kiểu.TIMESTAMPTZ: lưu thời điểm có xét đến thông tin múi giờ khi biểu diễn và xử lý.- Các kiểu dữ liệu không gian địa lý thông qua những phần mở rộng phù hợp, chẳng hạn PostGIS.
Các kiểu dữ liệu này giúp PostgreSQL đáp ứng nhiều yêu cầu khác nhau mà không nhất thiết phải sử dụng thêm một hệ thống lưu trữ riêng cho từng loại dữ liệu.
3. Hỗ trợ giao dịch và tính toàn vẹn dữ liệu
PostgreSQL hỗ trợ transaction và các ràng buộc như PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL và CHECK.
Ví dụ, khi chuyển tiền giữa hai tài khoản, hệ thống cần trừ tiền ở tài khoản nguồn và cộng tiền ở tài khoản đích. Transaction giúp nhóm các thao tác này thành một đơn vị công việc để tránh trường hợp chỉ một thao tác được thực hiện thành công.
4. Khả năng mở rộng
PostgreSQL hỗ trợ nhiều loại index, các phần mở rộng và cơ chế tối ưu truy vấn. Hệ thống có thể được mở rộng theo nhu cầu thông qua việc tối ưu cấu trúc dữ liệu, câu truy vấn, cấu hình và kiến trúc triển khai.
PostgreSQL thường được sử dụng khi nào?
PostgreSQL là một lựa chọn đáng cân nhắc khi ứng dụng có:
- Nhiều quan hệ giữa các bảng dữ liệu.
- Các truy vấn SQL phức tạp.
- Nhu cầu sử dụng nhiều kiểu dữ liệu.
- Yêu cầu về tính toàn vẹn dữ liệu và giao dịch.
- Các chức năng phân tích dữ liệu hoặc xử lý dữ liệu địa lý thông qua phần mở rộng.
Tuy nhiên, mức độ phù hợp còn phụ thuộc vào yêu cầu cụ thể của dự án và năng lực vận hành hệ thống.
3. MySQL là gì?

MySQL là hệ quản trị cơ sở dữ liệu quan hệ được sử dụng rộng rãi trong các ứng dụng Web, hệ thống thương mại điện tử và các dịch vụ Backend.
MySQL hỗ trợ SQL, tổ chức dữ liệu theo bảng và cung cấp những chức năng quan trọng như giao dịch, khóa ngoại, index và kiểm soát quyền truy cập.
Những đặc điểm nổi bật của MySQL
1. Phù hợp với nhiều ứng dụng Web
MySQL thường xuất hiện trong các hệ thống quản lý nội dung, website doanh nghiệp, cửa hàng trực tuyến và các ứng dụng cần lưu trữ dữ liệu quan hệ.
Nó có thể được sử dụng với nhiều ngôn ngữ lập trình và framework Backend, bao gồm Go, PHP, Java, Python và Node.js.
2. Hỗ trợ các thao tác SQL thông dụng
MySQL hỗ trợ các câu lệnh như SELECT, INSERT, UPDATE, DELETE, cùng các phép JOIN, truy vấn con và những tính năng SQL khác.
Ví dụ:
SELECT id, name, price
FROM products
WHERE price > 100000
ORDER BY price DESC;
Câu lệnh lấy các sản phẩm có giá lớn hơn 100.000 và sắp xếp theo giá giảm dần.
3. Hỗ trợ giao dịch với InnoDB
InnoDB là storage engine được sử dụng phổ biến trong MySQL và là mặc định trong các phiên bản hiện đại.
InnoDB hỗ trợ transaction, khóa ngoại và cơ chế kiểm soát đồng thời. Những tính năng này rất quan trọng đối với ứng dụng cần đảm bảo tính nhất quán của dữ liệu, chẳng hạn quản lý đơn hàng hoặc thanh toán.
4. Hỗ trợ index và nhiều kiểu dữ liệu
MySQL hỗ trợ các kiểu dữ liệu số, chuỗi, ngày giờ, JSON và nhiều loại index, bao gồm B-tree index trong các trường hợp phù hợp.
Index giúp hệ quản trị tìm kiếm dữ liệu hiệu quả hơn trong những truy vấn phù hợp, nhưng cũng làm tăng chi phí lưu trữ và cập nhật dữ liệu. Vì vậy, việc lựa chọn index cần dựa trên cách ứng dụng truy vấn dữ liệu.
MySQL thường được sử dụng khi nào?
MySQL là lựa chọn phù hợp để cân nhắc cho:
- Website và ứng dụng Web.
- Hệ thống quản lý nội dung.
- Ứng dụng bán hàng và thương mại điện tử.
- Backend có mô hình dữ liệu quan hệ.
- Các dự án cần một hệ quản trị phổ biến, có nhiều tài liệu và công cụ hỗ trợ.
Tương tự PostgreSQL, khả năng đáp ứng thực tế phụ thuộc vào thiết kế dữ liệu, cấu hình, tải công việc và cách triển khai.
4. So sánh PostgreSQL và MySQL
Cả PostgreSQL và MySQL đều có thể đảm nhiệm vai trò lưu trữ dữ liệu cho Backend. Sự khác biệt nằm ở các tính năng cụ thể, cách xử lý dữ liệu, cú pháp và mức độ phù hợp với từng yêu cầu.
| Tiêu chí | PostgreSQL | MySQL |
|---|---|---|
| Loại hệ thống | RDBMS mã nguồn mở | RDBMS |
| Ngôn ngữ | SQL, có các tính năng và cú pháp mở rộng riêng | SQL, có các tính năng và cú pháp mở rộng riêng |
| Kiểu dữ liệu | Hỗ trợ nhiều kiểu dữ liệu nâng cao, JSONB, ARRAY, UUID |
Hỗ trợ nhiều kiểu dữ liệu thông dụng và JSON |
| Giao dịch | Hỗ trợ transaction và nhiều mức cô lập | InnoDB hỗ trợ transaction và nhiều mức cô lập |
| Ràng buộc dữ liệu | Hỗ trợ nhiều ràng buộc và tính năng nâng cao | Hỗ trợ các ràng buộc quan hệ; cần chú ý storage engine và phiên bản |
| Index | B-tree, GIN, GiST, BRIN và các loại khác | B-tree và các loại index khác tùy kiểu dữ liệu, engine và phiên bản |
| Truy vấn phức tạp | Có nhiều tính năng SQL nâng cao | Hỗ trợ nhiều tính năng SQL và truy vấn phức tạp |
| Khả năng mở rộng | Có hệ sinh thái extension phong phú | Có hệ sinh thái công cụ và các giải pháp mở rộng riêng |
| Trường hợp sử dụng | Hệ thống nghiệp vụ, truy vấn phức tạp, dữ liệu đa dạng | Website, ứng dụng Web, thương mại điện tử và nhiều hệ thống Backend |
4.1. Khác biệt về SQL
Hai hệ quản trị hỗ trợ phần lớn các thao tác SQL cơ bản, nhưng không phải mọi câu lệnh đều giống nhau.
Ví dụ, giới hạn số dòng kết quả thường được viết như sau:
-- MySQL
SELECT *
FROM products
LIMIT 10;
Trong SQL Server, cách viết phổ biến là TOP, còn PostgreSQL cũng hỗ trợ LIMIT 10.
Điều này cho thấy khi chuyển từ hệ quản trị này sang hệ quản trị khác, bạn có thể tái sử dụng nhiều kiến thức SQL nhưng vẫn cần học các khác biệt về cú pháp và tính năng.
4.2. Khác biệt về kiểu dữ liệu
PostgreSQL có kiểu JSONB, cho phép lưu dữ liệu JSON ở dạng nhị phân đã được xử lý và hỗ trợ các thao tác, index phù hợp với dữ liệu đó.
MySQL cũng hỗ trợ kiểu JSON, cung cấp khả năng lưu trữ và thao tác với dữ liệu JSON.
Vì vậy, nếu ứng dụng cần xử lý dữ liệu JSON linh hoạt, cả hai đều có thể đáp ứng. Việc lựa chọn cần dựa vào những thao tác thực tế mà ứng dụng cần thực hiện.
4.3. Khác biệt về giao dịch và tính toàn vẹn dữ liệu
Cả hai hệ quản trị đều hỗ trợ transaction và những cơ chế đảm bảo tính toàn vẹn dữ liệu.
Tuy nhiên, hành vi cụ thể còn phụ thuộc vào cách sử dụng transaction, mức cô lập, loại bảng hoặc storage engine, cấu hình và phiên bản hệ quản trị.
Do đó, không nên kết luận rằng một hệ quản trị luôn đảm bảo dữ liệu tốt hơn hệ còn lại trong mọi tình huống.
4.4. Khác biệt về hiệu năng
Không có hệ quản trị nào luôn nhanh hơn trong mọi trường hợp.
Hiệu năng phụ thuộc vào nhiều yếu tố:
- Số lượng và cấu trúc bảng.
- Cách viết câu truy vấn SQL.
- Các index được tạo.
- Tỷ lệ đọc và ghi dữ liệu.
- Số lượng kết nối đồng thời.
- Cấu hình máy chủ và cách triển khai.
Để lựa chọn chính xác, cần thử nghiệm trên dữ liệu và workload gần với ứng dụng thực tế thay vì chỉ dựa vào tên hệ quản trị.
5. PostgreSQL và MySQL trong Backend
Trong một ứng dụng Backend, cơ sở dữ liệu thường được đặt phía sau các lớp xử lý của ứng dụng.
Một kiến trúc phổ biến có thể được mô tả như sau:
Client → Gin Router → Handler → Service → Repository → Database
Mỗi thành phần có vai trò riêng:
- Client: gửi HTTP request đến API.
- Gin Router: xác định Handler xử lý request dựa trên route và HTTP method.
- Handler: tiếp nhận dữ liệu HTTP, thực hiện binding hoặc validation phù hợp và tạo HTTP response.
- Service: thực hiện các quy tắc nghiệp vụ.
- Repository: đảm nhiệm việc truy vấn và lưu trữ dữ liệu.
- Database: lưu dữ liệu lâu dài và thực thi các câu lệnh truy vấn.
Trong kiến trúc này, PostgreSQL hoặc MySQL là hệ quản trị được Repository sử dụng để truy xuất dữ liệu.
Ví dụ: Truy vấn danh sách sản phẩm
Giả sử database có bảng products:
CREATE TABLE products (
id BIGINT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(12, 2) NOT NULL
);
Để lấy danh sách sản phẩm có giá lớn hơn 100.000, Repository có thể thực hiện câu lệnh:
SELECT id, name, price
FROM products
WHERE price > 100000
ORDER BY price DESC;
Kết quả được chuyển về Service, sau đó Handler trả dữ liệu cho client dưới dạng JSON.
Ví dụ response:
[
{
"id": 1,
"name": "Keyboard",
"price": 500000
},
{
"id": 2,
"name": "Monitor",
"price": 3000000
}
]
Đây là ví dụ minh họa về luồng xử lý; trong ứng dụng thực tế, dữ liệu trả về cần được lấy từ kết quả truy vấn và có thể cần chuyển đổi kiểu dữ liệu trước khi tạo JSON.
Go kết nối với PostgreSQL hoặc MySQL như thế nào?
Go cung cấp package database/sql để làm việc với cơ sở dữ liệu quan hệ thông qua driver tương ứng.
Một số driver phổ biến gồm:
- PostgreSQL:
pgxhoặclib/pq. - MySQL:
go-sql-driver/mysql.
Ví dụ với database/sql, phần truy vấn dữ liệu có thể có dạng:
rows, err := db.QueryContext(
ctx,
`SELECT id, name, price
FROM products
WHERE price > $1`,
100000,
)
if err != nil {
return err
}
defer rows.Close()
Đoạn trên sử dụng placeholder $1, phù hợp với PostgreSQL. Khi dùng MySQL với driver thông dụng, placeholder thường là ?.
Điểm quan trọng là phải sử dụng truy vấn có tham số thay vì ghép trực tiếp dữ liệu đầu vào vào chuỗi SQL. Cách này giúp hạn chế nguy cơ SQL injection và xử lý dữ liệu đầu vào an toàn hơn.
6. Nên lựa chọn PostgreSQL hay MySQL?
Không có lựa chọn tốt nhất cho mọi dự án. Bạn nên xem xét yêu cầu dữ liệu, tính năng cần sử dụng, môi trường triển khai và kinh nghiệm của đội ngũ.
Khi nào nên cân nhắc PostgreSQL?
PostgreSQL đáng cân nhắc nếu:
- Ứng dụng có các truy vấn SQL phức tạp.
- Cần sử dụng nhiều kiểu dữ liệu hoặc extension.
- Muốn tận dụng
JSONBvà các tính năng truy vấn liên quan. - Có nhiều ràng buộc dữ liệu và yêu cầu xử lý nghiệp vụ cần được thể hiện chặt chẽ trong database.
Khi nào nên cân nhắc MySQL?
MySQL đáng cân nhắc nếu:
- Dự án hoặc đội ngũ đã có kinh nghiệm sử dụng MySQL.
- Ứng dụng Web có mô hình dữ liệu quan hệ thông dụng.
- Hệ thống hiện tại, nền tảng triển khai hoặc công cụ sẵn có đã được xây dựng quanh MySQL.
- Bạn muốn tận dụng hệ sinh thái và tài liệu phong phú của MySQL.
7. Kết luận
PostgreSQL và MySQL là hai hệ quản trị cơ sở dữ liệu quan hệ được sử dụng rộng rãi trong phát triển phần mềm. Cả hai đều hỗ trợ SQL, quản lý dữ liệu dạng bảng, giao dịch và nhiều cơ chế giúp duy trì tính toàn vẹn dữ liệu.
PostgreSQL cung cấp nhiều tính năng nâng cao về kiểu dữ liệu và truy vấn, trong khi MySQL có hệ sinh thái phổ biến trong nhiều ứng dụng Web. Tuy nhiên, hiệu năng và mức độ phù hợp của mỗi hệ thống cần được đánh giá theo yêu cầu thực tế.
Đối với lập trình viên Backend, điều quan trọng không chỉ là biết sử dụng một hệ quản trị cụ thể mà còn phải hiểu SQL, thiết kế dữ liệu, quan hệ giữa các bảng, transaction, index và cách ứng dụng tương tác với database.
Khi nắm vững những nền tảng này, việc chuyển đổi giữa PostgreSQL, MySQL hoặc các hệ quản trị quan hệ khác sẽ trở nên dễ dàng hơn.








Khoá học lập trình game con rắn cho trẻ em




