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)