Materialized Path (Đường dẫn vật lý hóa) - Lưu trữ cây đơn giản
Lưu cấu trúc cây (danh mục, thư mục, tổ chức) bằng cách lưu TOÀN BỘ đường dẫn trong mỗi node - thay vì chỉ parent_id (phải đệ quy khi truy vấn).
-- PostgreSQL (với extension ltree):
CREATE EXTENSION ltree;
CREATE TABLE categories (path LTREE);
INSERT INTO categories VALUES ('Food'), ('Food.Fruit'), ('Food.Fruit.Cherry');
-- Tìm tất cả con của Food.Fruit:
SELECT * FROM categories WHERE path ~ 'Food.Fruit.*{1,}';
-- Tìm tổ tiên của Food.Fruit.Cherry:
SELECT * FROM categories WHERE path @> subpath('Food.Fruit.Cherry', 0, -1);Ưu điểm: truy vấn cả nhánh cây bằng 1 query (không đệ quy). Nhược: di chuyển node phải cập nhật path của toàn bộ con cháu.
Liên quan
- Denormalization - materialized path là dạng denormalize cấu trúc cây
- LIKE và Wildcard - không có ltree có thể dùng path VARCHAR + LIKE ‘Food.Fruit.%’ (prefix → dùng được index)