Database Schema Design

Cách hiểu bằng lời của tôi

Database Schema Design là cách mô hình hóa dữ liệu để cân bằng correctness, query performance, khả năng thay đổi và chi phí vận hành. Normalization giảm trùng lặp và giữ integrity tốt hơn; denormalization đổi thêm storage/duplication để đọc nhanh hoặc đơn giản hơn ở scale.

Trade-off chính

  • Normalization: dữ liệu sạch, ít duplication, dễ giữ invariant; query có thể cần nhiều join.
  • Denormalization: read path nhanh hơn hoặc đơn giản hơn; write path phải cập nhật nhiều bản sao và dễ inconsistency.
  • Document model: lưu chung dữ liệu thường đọc chung, nhưng phải tránh biến mỗi query thành nhiều join runtime.
  • Schema không tĩnh: khi workload đổi, schema tối ưu hôm nay có thể thành bottleneck ngày mai.

Khi áp dụng

Thiết kế schema nên bắt đầu từ access pattern quan trọng: hệ đọc-heavy, write-heavy, analytics, transactional hay event-driven sẽ cần shape khác nhau.

Schema và semantics

Schema không chỉ là column/type. Ở hệ nhiều team, cùng một entity nghiệp vụ có thể bị định nghĩa khác nhau giữa API, database và pipeline. Unified Domain Model giải quyết tầng này bằng cách định nghĩa business entity một lần rồi generate/project ra schema cụ thể, giảm schema drift và integration debt.

Schema-on-write và schema-on-read

  • Schema-on-write kiểm tra structure khi ghi, nên mọi record đi qua cùng một contract trước khi lưu.
  • Schema-on-read diễn giải structure khi đọc, linh hoạt hơn với heterogeneous data nhưng chuyển validation, version compatibility và migration logic sang reader.
  • “Schemaless” không có nghĩa là không schema; schema thường chỉ trở thành implicit assumption trong application code.

Liên kết