0Pricing
SQL Academy · درس

النمذجة: متى يتفوق JSONB على التطبيع

قرّر بين عمود JSONB وجدول منفصل — سمات مرنة مقابل مخططات صارمة

النمذجة: متى يتفوق JSONB على التطبيع درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

الخيار

لكل جزء من البيانات قد تخزنه: هل تختار عمودًا أم مفتاح JSONB؟ تؤثر الإجابة في تصميم المخطط وأداء الاستعلامات وقابلية الصيانة.

متى تتفوق الأعمدة

استخدم أعمدة حقيقية عندما تكون البيانات:

  • معروفة ومستقرة
  • يُستعلم عنها كثيرًا باستخدام الفهارس
  • متحققًا منها بواسطة قيود CHECK أو FK
  • مستخدمة في التقارير أو عمليات الربط

متى يتفوق JSONB

استخدم JSONB عندما:

  • تختلف البنية من صف إلى آخر (حقول يحددها المستأجر، وبيانات وصفية للإضافات)
  • يتطور المخطط بسرعة (لتجنب عمليات الترحيل)
  • تكون قراءة المستندات أو كتابتها بالكامل هي النمط المعتاد
  • تخزن حمولات غير شفافة (مثل أجسام webhook)

النمط الهجين

أفضل ما في الخيارين: أعمدة منظمة للنواة المستقرة، وJSONB للجزء المتغير:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL,
  event_type TEXT NOT NULL,
  user_id BIGINT,
  data JSONB NOT NULL DEFAULT '{}'::JSONB
);

فخ EAV

كان نموذج "الكيان-السمة-القيمة" الكلاسيكي — جدولًا واحدًا يحتوي صفوفًا من (مفتاح، قيمة) — الخيار الوحيد للبيانات المتناثرة. ويستبدل JSONB نموذج EAV بعمود مستند واحد:

-- Old EAV:
CREATE TABLE user_attrs (
  user_id BIGINT,
  attr TEXT,
  val TEXT
);

-- Modern:
ALTER TABLE users ADD COLUMN attrs JSONB NOT NULL DEFAULT '{}';

-- JSONB queries are faster and easier than the EAV joins.

استراتيجية الترحيل

إضافة عمود إلى جدول كثير الاستخدام → 5 دقائق من التوقف في جدول كبير. أما مع JSONB، فإضافة حقل لا تتطلب سوى تغيير في تعليمة التطبيق البرمجية.

القيود على JSONB

أضف قيود CHECK لفرض الحد الأدنى من البنية:

ALTER TABLE events
  ADD CONSTRAINT data_has_type CHECK (data ? 'type'),
  ADD CONSTRAINT type_is_string CHECK (jsonb_typeof(data->'type') = 'string');

ترقية الحقول كثيرة الاستخدام

إذا أصبح الاستعلام عن حقل JSONB متكررًا، فانقله إلى عمود حقيقي. ويؤدي نص UPDATE + فهرس جديد + عمود جديد إلى تسريع الوصول إليه.

عمليات تصحيح JSONB

حدّث حقلًا واحدًا:

UPDATE users
SET attrs = jsonb_set(attrs, '{plan}', '"pro"')
WHERE id = 1;

لا تخزن الأموال في JSONB

تحتاج القيم المالية إلى أنواع NUMERIC دقيقة وقيود مناسبة. استخدم دائمًا أعمدة حقيقية.

متى يسبب JSONB مشكلات

إذا وجدت نفسك تستخرج مفتاح JSONB نفسه وتحوله في كل استعلام، فهذه علامة على أنه ينبغي أن يكون عمودًا. وتتراكم التكلفة الإجمالية لـ (data->>'k')::INT عبر ملايين الصفوف.

توثيق المخطط

من السهل الكتابة إلى أعمدة JSONB، لكن يصعب توثيقها. حافظ على مخطط خارجي (JSON Schema أو تعليمة التطبيق البرمجية) حتى يعرف المتعاونون ما يتوقعونه.

مراجعة

JSONB أداة قوية — استخدمه للأجزاء المتغيرة، والأعمدة الحقيقية للنواة المستقرة. وانقل الحقول كثيرة الاستخدام إلى أعمدة حقيقية عند ظهور أنماط واضحة.

تحقق سريع

أنتم تخزّنون أحداث التدقيق. نوع الحدث موجود دائمًا، لكن بعض الأحداث تحتوي على مصفوفة من "actors" يختلف شكلها. كيف تمثّلونها؟

الأسئلة الشائعة

هل درس «النمذجة: متى يتفوق JSONB على التطبيع» مجاني؟

نعم — نص درس «النمذجة: متى يتفوق JSONB على التطبيع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «النمذجة: متى يتفوق JSONB على التطبيع»؟

قرّر بين عمود JSONB وجدول منفصل — سمات مرنة مقابل مخططات صارمة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «النمذجة: متى يتفوق JSONB على التطبيع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. JSONB مقابل JSON: متى تستخدم كلًّا منهما
  2. معاملات المسار: -> ->> @>
  3. فهرسة JSONB باستخدام GIN
  4. النمذجة: متى يتفوق JSONB على التطبيع
← العودة إلى SQL Academy