الگوی طراحی داده

الگوهای مدل‌سازی داده: Denormalization، Wide Table و JSON columns — بهینه‌سازی برای خواندن

مدل‌سازی: برای خواندن طراحی کن

در سیستم‌های بزرگ، داده را برای الگوی خواندن شکل می‌دهیم نه «کیفیت نظری» — این تفاوت اصلی SQL دانشگاهی و System Design واقعی است.

Normalization در برابر Denormalization

نرمال (3NF): هر داده یک‌جا؛ بدون تکرار — خواندن = Join زیاد!

Denormalized: تکرار عمدی برای خواندن سریع:

نرمال:
orders(id, user_id) + users(id, name)

Denormalized:
orders(id, user_id, user_name)   ← name کپی شده!

قاعده: در مقیاس بزرگ، خواندن ۱۰۰ برابر نوشتن است — تکرار کن، Join را بکش!

Wide Table (جدول عریض)

همه‌چیز در یک جدول — حتی ستون‌های خالی زیاد:

JSON Columns — انعطاف هوشمند

PostgreSQL/MongoDB: ستون JSON برای بخش متغیر داده:

products(id, name, price, attributes JSON)
-- لپ‌تاپ: {"ram": 16, "cpu": "i7"}
-- کتاب: {"author": "...", "pages": 300}

مزیت: اسکیمای متغیر بدون جدول‌های EAV پیچیده؛ عیب: ایندکس و اعتبارسنجی سخت‌تر.

الگوهای پرکاربرد

الگوکاربرد
ماده‌سازی (Materialized View)نتیجه کوئری سنگین، از پیش محاسبه و ذخیره
شمارنده از پیش محاسبهfollowers_count به‌جای COUNT(*) زنده!
جدول خلاصه (Summary)آمار روزانه به‌جای تجمیع لحظه‌ای
Soft Deletedeleted_at به‌جای DELETE واقعی
Audit Logتاریخچه تغییرات در جدول جدا

مثال: شمارنده فالوور

❌ هر پروفایل: COUNT از جدول follows (میلیون‌ها ردیف!)

✓ ستون followers_count + به‌روزرسانی با هر فالو/آنفالو — خواندن O(1)!

نکته مصاحبه: وقتی مدل داده می‌دهید، بگویید «برای خواندن غالب denormalize می‌کنم و شمارنده‌ها را از پیش محاسبه» — این جمله‌ها نشانه تفکر مقیاس‌پذیرند.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط