الحد الأقصى لعدد الحقول في النموذج
إذا كنت تقوم بتخصيص BITEX عن طريق إضافة حقول مخصصة إلى النماذج، فقد تصل إلى نقطة حيث:
- يؤدي الحقل المخصص المُضاف حديثًا إلى حدوث خطأ في الخادم عند محاولة إرسال مستند، أو
- يرفض BITEX الحفظ بعد إضافة الحقل.
تشرح هذه المقالة سبب حدوث ذلك وترشدك عبر الطرق العملية لإصلاحها - دون الحاجة إلى معرفة بقاعدة البيانات.
ماذا تعني الأخطاء
عندما تصل إلى الحد الأقصى، قد يعرض BITEX أحد هذين الخطأين على الشاشة:
الخطأ 1: "عمود غير معروف في INSERT INTO"
يظهر هذا الخطأ عند إرسال نموذج بعد إضافة حقل مخصص جديد. يحاول BITEX حفظ البيانات لعمود لم يتمكن من العثور عليه في قاعدة البيانات بعد، وهي إشارة إلى أن الجدول الأساسي قد وصل إلى الحد الهيكلي الخاص به ولا يمكن تسجيل الحقل الجديد بشكل صحيح.
الخطأ 2: "حجم الصف كبير جدًا"
هذا الخطأ أكثر مباشرة. لقد تجاوز صف جدول قاعدة البيانات الحد الأقصى للحجم المسموح به وهو 65,535 بايت.
لماذا يحدث هذا؟
في BITEX (وFrappe)، كل نموذج، يسمى DocType، يتوافق مع جدول في قاعدة البيانات. كل حقل في هذا النموذج هو عمود في هذا الجدول.
فكر في الأمر كجدول بيانات: كل صف يمكنه استيعاب عدد كبير من الأعمدة فقط قبل نفاد المساحة. يفرض MySQL (قاعدة البيانات التي تستخدمها BITEX) حدًا لحجم الصف يبلغ 65,535 بايت لكل صف جدول. يدعم MySQL أيضًا من الناحية الفنية ما يصل إلى 4096 عمودًا لكل جدول، ولكن عمليًا يتم الوصول إلى الحد الأقصى لحجم الصف أولاً.
فيما يلي مثال ملموس على مدى سرعة الوصول إلى هذا الحد:
- يتم تخزين الحقول من النوع البيانات، والارتباط، والتحديد، والارتباط الديناميكي، وكلمة المرور، وللقراءة فقط** كأعمدة
VARCHAR(140)في قاعدة البيانات. - يخصص عمود
VARCHAR(140)الذي يستخدم مجموعة الأحرفutf8mb3ما يصل إلى 420 بايت لكل قيمة (140 حرفًا × 3 بايت لكل منهما). - وهذا يعني أن الجدول يمكن أن يحتوي على 65,535 ÷ 420 = ~156 على الأكثر تقريبًا مثل هذه الأعمدة قبل الوصول إلى الحد الأقصى.
يحتوي النموذج/النوع المعني بالفعل على العديد من الحقول المضمنة. يضيف تثبيت التطبيقات المخصصة المزيد. بمجرد أن تقترب من هذا السقف، فإن إضافة حقل مخصص واحد آخر قد يؤدي إلى دفعه إلى ما هو أبعد من الحافة، مما يتسبب في حدوث أخطاء الإرسال الموضحة أعلاه.
الحلول الوظيفية
هناك عدة طرق لمعالجة هذه المشكلة، بدءًا من الإصلاحات السريعة وحتى التغييرات الهيكلية. ابدأ بالإصلاحات السريعة إذا كنت تحتاج فقط إلى مساحة أكبر قليلاً، أو انتقل إلى الخيارات الهيكلية إذا كنت بحاجة إلى إضافة العديد من الحقول.
الإصلاح 1: إنشاء DocType منفصل وربطه بالـ DocType الأساسي
يعد هذا هو أفضل نهج طويل المدى عندما تحتاج إلى إضافة مجموعة متميزة من الحقول ذات الصلة (على سبيل المثال، حقول خاصة بقسم أو عملية أو متطلبات امتثال معينة).
الخطوات:
- انتقل إلى تخصيص > DocType (أو ابحث عن "New DocType" في شريط البحث).
- قم بإنشاء DocType جديد بجميع الحقول التي تحتاجها.
- في DocType الجديد، أضف حقل رابط يشير إلى DocType الأساسي (الذي تريد إضافة جميع الحقول فيه)، وهذا يربط كل سجل مرة أخرى بإدخال المخزون الأصلي الخاص به.
- اختياريًا، قم بإضافة حقل رابط في نموذج التخصيص الخاص بإدخال المخزون مع الإشارة مرة أخرى إلى DocType الجديد لسهولة التنقل.
لماذا يعمل هذا: يحصل DocType الجديد على جدول قاعدة بيانات منفصل خاص به مع ميزانية حجم الصف الخاصة به، وهو مستقل تمامًا عن جدول إدخال المخزون.
الإصلاح 2: إنشاء جدول فرعي وإضافته إلى إدخال المخزون
يعمل هذا الأسلوب بشكل أفضل عندما تمثل الحقول الإضافية صفوفًا متكررة من البيانات. على سبيل المثال، قائمة التحقق من الجودة أو قائمة العناصر، على غرار كيفية عمل جدول العناصر داخل إدخال المخزون.
الخطوات:
- انتقل إلى تخصيص > DocType وقم بإنشاء DocType جديد. قم بتمكين مربع الاختيار "هو جدول فرعي".
- أضف كافة حقولك كأعمدة داخل هذا الجدول الفرعي.
- انتقل إلى تخصيص النموذج > إدخال المخزون.
- قم بإضافة حقل جديد من النوع Table وقم بتعيين Options الخاص به للإشارة إلى طفلك الذي تم إنشاؤه حديثًا DocType.
لماذا يعمل هذا: يتم تخزين الجدول الفرعي في جدول قاعدة بيانات منفصل خاص به، مما يتخطى تمامًا حد حجم الصف للنموذج الأصلي.
الإصلاحات الفنية
الإصلاح 1: تحويل بعض الحقول إلى أنواع تعتمد على النص
يتم تخزين الحقول من النوع **Text، أو Small Text، أو Text Editor، ** أو Code بشكل مختلف في MySQL (كأعمدة TEXT أو BLOB). على عكس أعمدة VARCHAR، يتم تخزين محتواها خارج الصف الرئيسي - فهي تشغل فقط 9–12 بايت في الصف نفسه بدلاً من ما يصل إلى 420 بايت.
ما يجب فعله: في تخصيص النموذج، ابحث عن أي حقول مخصصة تستخدم حاليًا أنواعًا مثل البيانات أو الارتباط أو التحديد، حيث تكون القيمة طويلة أو لا تحتاج إلى تصفيتها/فرزها، واستبدلها بنوع الحقل إلى نص صغير أو نص. يحرر كل تحويل مساحة صف كبيرة ويسمح بإضافة المزيد من الحقول.
الإصلاح 2: تقليل خاصية "الطول" للحقول الموجودة
عند إنشاء حقل مخصص لنوع البيانات، يقوم BITEX بتعيين الطول الافتراضي وهو 140. ويتحكم هذا بشكل مباشر في عدد البايتات التي يخصصها MySQL لهذا العمود. يؤدي تقليله في الحقول التي يكون فيها الإدخال الأقصر كافيًا (على سبيل المثال، حقل الكود الذي لن يتجاوز 20 حرفًا أبدًا) إلى تحرير المساحة بشكل متناسب.
ما يجب فعله: في تخصيص النموذج، افتح إعدادات كل حقل مخصص وخفض قيمة الطول إلى ما هو مطلوب بالفعل. على سبيل المثال، يؤدي تغيير الطول من 140 إلى 20 إلى تقليل تخصيص هذا العمود من 420 بايت إلى 60 بايت فقط.
الإصلاح 3: إزالة الحقول المخصصة غير المستخدمة باستخدام جداول القطع
الحقول المخصصة التي تم حذفها من نموذج التخصيص لا تتم إزالتها تلقائيًا من جدول قاعدة البيانات — تظل أعمدتها قائمة، ولا تزال تستهلك مساحة الصف.
إذا كنت متأكدًا من أنك لم تعد بحاجة إلى البيانات من بعض الحقول المخصصة القديمة، فيمكنك إزالة هذه الأعمدة بشكل دائم من قاعدة البيانات عن طريق تشغيل أمر trim-tables bench:
https://frappeframework.com/docs/user/en/bench/reference/trim-tables
ملاحظة: هذه العملية لا يمكن التراجع عنها. سيتم حذف أي بيانات مخزنة في هذه الأعمدة نهائيًا. قم دائمًا بأخذ نسخة احتياطية لقاعدة البيانات قبل تشغيل هذا الأمر.
اختيار الحل الصحيح
| حالتك | النهج الموصى به |
|---|---|
| أنت بحاجة إلى العديد من الحقول الجديدة ذات القيمة الواحدة (قيمة واحدة في نموذج) | قم بإنشاء DocType مرتبط منفصل |
| تحتاج إلى تكرار صفوف البيانات لكل إدخال مخزون | إنشاء جدول تابع |
| بعض الحقول تدفعك إلى ما هو أبعد من الحد الأقصى | تحويل بعض الحقول إلى نص صغير / نص، أو تقليل طول الحقل |
| لقد قمت بحذف الحقول المخصصة ولكن بقيت أعمدتها | قم بتشغيل trim-tables لاستعادة المساحة |