Khởi tạo Schema cơ bản với EdgeQL
Chúng ta bắt đầu bằng việc tạo file định nghĩa Schema (.esdl) để mô tả cấu trúc dữ liệu. EdgeQL sử dụng cú pháp tương tự GraphQL nhưng mạnh mẽ hơn cho việc định nghĩa quan hệ và ràng buộc.
Để tạo file schema, chúng ta sẽ sử dụng trình soạn thảo văn bản để tạo file schema.esdl tại thư mục làm việc hiện tại.
cat > schema.esdl
Kết quả mong đợi: File schema.esdl được tạo thành công, chứa định nghĩa 3 loại (Type) là User, Post, Tag và các mối liên kết (Link) giữa chúng.
Triển khai Schema vào EdgeDB
Sau khi đã có file định nghĩa, ta cần đẩy (migrate) schema này vào database đang chạy của EdgeDB để tạo các bảng vật lý và ràng buộc.
edgedb schema load schema.esdl
Kết quả mong đợi: CLI trả về thông báo Success hoặc Schema loaded, xác nhận các loại dữ liệu đã được tạo trong database.
Verify kết quả triển khai
Để xác minh schema đã được áp dụng chính xác, ta dùng lệnh edgedb query để liệt kê các loại dữ liệu hiện có.
edgedb query "SELECT schema::ObjectType.name"
Kết quả mong đợi: Trả về danh sách JSON chứa tên các object type: User, Post, Tag.
Xây dựng quan hệ (Links) và thuộc tính (Properties)
Trong EdgeDB, quan hệ giữa các đối tượng được định nghĩa bằng link. Điều này khác với SQL nơi ta phải dùng foreign key. EdgeDB tự động xử lý các quan hệ này.
Định nghĩa thuộc tính có ràng buộc
Chúng ta cần mở rộng schema để thêm các ràng buộc chặt chẽ hơn, ví dụ: email phải là chuỗi hợp lệ, hoặc một bài viết chỉ có một tác giả duy nhất.
cat > schema_v2.esdl
Kết quả mong đợi: File schema_v2.esdl được cập nhật với các ràng buộc IsUnique, IsEmail và giá trị mặc định default.
Áp dụng Schema mới (Migration)
Vì chúng ta đã có schema cũ từ phần trước, việc cập nhật schema mới sẽ tạo ra một migration tự động để thay đổi cấu trúc database.
edgedb schema load schema_v2.esdl
Kết quả mong đợi: EdgeDB sẽ thông báo về các thay đổi (change) cần thực hiện, ví dụ: Added constraint, Added link. Sau đó là thông báo thành công.
Verify cấu trúc quan hệ
Chúng ta cần kiểm tra xem các liên kết (links) và ràng buộc (constraints) đã được tạo đúng chưa.
edgedb query "SELECT schema::ObjectType { name, links, properties } FILTER .name = 'Post'"
Kết quả mong đợi: Trả về JSON chi tiết của Object Post, bao gồm danh sách links (có author, tags) và properties (có các ràng buộc đã định nghĩa).
Thực hành tạo dữ liệu và kiểm tra ràng buộc
Bây giờ schema đã sẵn sàng, ta sẽ thử tạo dữ liệu để EdgeDB kiểm tra các ràng buộc (constraints) và quan hệ (links) có hoạt động như thiết kế không.
Tạo đối tượng cơ bản
Trước tiên, tạo một đối tượng User để làm tác giả cho bài viết sau này.
edgedb query "
INSERT User {
name := 'Nguyen Van A',
email := 'nguyenvana@example.com'
}
"
Kết quả mong đợi: Trả về đối tượng User được tạo với id (UUID), name và email đúng như nhập. created_at được tự động điền.
Tạo quan hệ (Link) khi chèn dữ liệu
Tạo một Post và liên kết nó với User vừa tạo. EdgeDB cho phép chèn dữ liệu và tạo link trong cùng một lệnh.
edgedb query "
INSERT Post {
title := 'Giới thiệu về EdgeDB',
content := 'EdgeDB là một database hiện đại...',
author := (SELECT User FILTER .email = 'nguyenvana@example.com'),
tags := (
INSERT Tag { name := 'Database' }
UNION
INSERT Tag { name := 'EdgeQL' }
)
}
"
Kết quả mong đợi: Tạo thành công một Post mới. Quan hệ author trỏ về User đã tạo, và quan hệ tags trỏ về 2 đối tượng Tag mới được tạo.
Kiểm tra ràng buộc IsEmail
Thử tạo một User với email không hợp lệ để xem EdgeDB có từ chối không.
edgedb query "
INSERT User {
name := 'User Sai',
email := 'khong_hop_le'
}
"
Kết quả mong đợi: Lệnh bị lỗi (Error). EdgeDB trả về thông báo lỗi ConstraintViolationError với chi tiết IsEmail không thỏa mãn, ngăn dữ liệu rác vào database.
Verify quan hệ qua truy vấn
Kiểm tra xem dữ liệu đã được liên kết đúng chưa bằng cách truy vấn từ Post ra User.
edgedb query "
SELECT Post {
title,
author: { name, email }
}
"
Kết quả mong đợi: JSON trả về hiển thị thông tin của Post, và bên trong trường author có chứa đầy đủ thông tin của User (name, email) mà không cần join thủ công.
Điều hướng series:
Mục lục: Series: Triển khai Database Edge-native với EdgeDB trên Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và cài đặt EdgeDB
Phần 3: Thực thi truy vấn dữ liệu và tối ưu hóa hiệu năng »