Khi phát triển Backend bằng NestJS và làm việc với các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) như PostgreSQL, MariaDB hay MS SQL, khái niệm Entity (Thực thể) đóng vai trò là cầu nối cốt lõi giữa mã nguồn ứng dụng và cơ sở dữ liệu vật lý. Tài liệu này giúp bạn thấu hiểu bản chất của Entity, cách thiết lập cấu trúc bảng, các loại mối quan hệ và cách tương tác hiệu quả với Claude Code để sinh thực thể chuẩn xác nhất.
Entity là gì?
Trong các thư viện ORM (Object-Relational Mapping) như TypeORM hay Prisma, một Entity là một lớp (Class) trong mã nguồn được ánh xạ (map) trực tiếp với một bảng (Table) trong cơ sở dữ liệu. Mỗi thực thể đại diện cho cấu trúc của bảng, các thuộc tính của lớp đại diện cho các cột (Columns), và mỗi đối tượng (instance) của lớp đại diện cho một bản ghi (Row).Các thành phần cốt lõi của một Entity
Khi định nghĩa một Entity cho CSDL quan hệ như PostgreSQL, bạn cần xác định rõ các yếu tố sau:1. Primary Key (Khóa chính)
Mỗi bảng trong CSDL quan hệ bắt buộc phải có một khóa chính để định danh duy nhất cho từng bản ghi.- ID tự tăng (Auto-increment Integer): Thường sử dụng số nguyên (
1, 2, 3...). Ưu điểm là hiệu năng truy vấn cao, dung lượng lưu trữ nhỏ. - UUID (Universally Unique Identifier): Chuỗi ký tự ngẫu nhiên duy nhất trên toàn cầu (ví dụ:
f81d4fae-7dec-11d0-a765-00a0c91e6bf6). Rất an toàn và phù hợp cho các hệ thống phân tán, tránh lộ ID thật của bản ghi ra URL.
2. Columns & Data Types (Cột & Kiểu dữ liệu)
Việc chọn kiểu dữ liệu phù hợp trong PostgreSQL giúp tối ưu hóa dung lượng đĩa và tốc độ truy vấn:varchar(N)hoặctext: Dành cho chuỗi ký tự.integerhoặcbigint: Dành cho số nguyên.decimal(precision, scale)hoặcnumeric: Dành cho tiền tệ, số có phần thập phân cần độ chính xác tuyệt đối.boolean: Trạng thái Đúng/Sai.timestamphoặctimestamptz: Thời gian (có hoặc không có múi giờ - khuyến nghị sử dụngtimestamptzcho PostgreSQL).
3. Constraints (Ràng buộc dữ liệu)
Nullable: Cột có được phép để trống (null) hay không.Unique: Đảm bảo giá trị trong cột không được trùng lặp (ví dụ:email,username).Default: Giá trị mặc định khi tạo mới bản ghi.
Định nghĩa Các Mối Quan hệ (Relationships)
Điểm mạnh của CSDL quan hệ là khả năng liên kết các bảng thông qua khóa ngoại (Foreign Key). TypeORM cung cấp các Decorator để mô tả điều này một cách trực quan:- Many-to-One / One-to-Many
- One-to-One
- Many-to-Many
Đây là mối quan hệ phổ biến nhất. Ví dụ: Một User có thể có nhiều Order (Một-Nhiều), nhưng mỗi Order chỉ thuộc về một User duy nhất (Nhiều-Một).
order.entity.ts
Hướng dẫn viết Prompt cho Claude Code thiết kế Entity chuẩn xác
Khi sử dụng Claude Code để phát triển Backend, việc viết prompt rõ ràng về cấu trúc cơ sở dữ liệu sẽ giúp AI sinh mã nguồn chính xác ngay từ lần đầu tiên.Cấu trúc một Prompt chuẩn cho Entity:
- Tên thực thể và Tên bảng vật lý.
- Kiểu khóa chính (UUID hay Auto-increment).
- Danh sách các cột kèm kiểu dữ liệu, ràng buộc (unique, nullable, default).
- Mối quan hệ cụ thể với các thực thể khác (nếu có) và hành vi xóa khóa ngoại (
onDelete: 'CASCADE'). - Thư viện sử dụng (ví dụ: TypeORM).
Phân biệt Entity và DTO (Request & Response)
Đối với những bạn mới bắt đầu học Backend, một lỗi rất phổ biến là sử dụng trực tiếp Entity để nhận dữ liệu gửi lên hoặc trả về cho Client. Đây là thói quen nguy hiểm, dễ gây lộ dữ liệu nhạy cảm (như mật khẩu đã mã hóa, khóa bí mật) hoặc cho phép người dùng tự ý ghi đè các cột hệ thống (nhưid, role, createdAt).
Hãy phân biệt rõ ràng trách nhiệm của 3 thành phần này:
1. Request DTO (Dữ liệu yêu cầu đầu vào)
- Nhiệm vụ: Định nghĩa cấu trúc và luật kiểm tra dữ liệu mà Client gửi lên (ví dụ: bắt buộc nhập email đúng định dạng, mật khẩu phải dài từ 6 ký tự).
- Đặc điểm: Không chứa các trường hệ thống tự sinh như
id,createdAt,updatedAt. - Ví dụ: Client gửi thông tin đăng ký chỉ gồm
email,password,fullName.
2. Entity (Thực thể CSDL)
- Nhiệm vụ: Định nghĩa cấu trúc bảng lưu trữ vật lý trong Database.
- Đặc điểm: Chứa đầy đủ các trường (bao gồm cả mật khẩu đã băm, quyền hạn
role, trạng tháiisActive, thời gian tạo). - Ví dụ: Thực thể
Userchứaid(UUID),email,password(hashed),role,createdAt.
3. Response DTO / Serialization (Dữ liệu phản hồi đầu ra)
- Nhiệm vụ: Định nghĩa cấu trúc dữ liệu an toàn trả về cho Client.
- Đặc điểm: Tuyệt đối không chứa các trường nhạy cảm.
- Ví dụ: Dữ liệu trả về chỉ gồm
id,email,fullNamevàcreatedAt(đã giấu cộtpasswordđã mã hóa).