ما هو أفضل تنفيذ لنماذج الويب القابلة للإنشاء والتعديل للعميل في قاعدة بيانات علائقية؟

StackOverflow https://stackoverflow.com/questions/131759

سؤال

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

لقد رأيت ذلك يتم بطريقتين:

  1. على افتراض أن العميل يحدد فقط عدد الحقول، وما هي التسميات المرتبطة بهذه الحقول؛يمكننا التوصل إلى حل يتضمن أربعة جداول. FormDefinition, FormFieldDefinition, FormInstances, FormFieldValues.يقوم العميل بإجراء تغييرات على FormDefinition و FormFieldDefinition, ، ويستخدم تطبيق الويب تلك المعلومات لعرض نموذج ويب بتنسيق HTML، والذي سيرسل عليه زائر موقع الويب (المستخدم النهائي) النموذج، حيث يوجد صف جديد في FormInstances يتم إنشاؤه ويتم حفظ القيم في FormFieldValues طاولة.

    صفوف في FormDefinition يحدد النموذج، أي. form definition ID = 2, form title = 'Car Registration Form'.صفوف في FormFieldDefinition يحدد حقول النموذج في FormDefinition, ، أي. field definition ID = 7, field label = 'Car Model', field type = 'varchar(50)'.صفوف في FormInstance هو مثيل لكل نموذج يملأه المستخدم، أي. definition id = 2, date_entered = '2008-09-24'.والصفوف فيه FormFieldValues هي إدخالات من قبل المستخدم، أي. field definition = 7, value = 'Tiburon'.

    لسوء الحظ، فهذا يعني عمود القيمة في FormFieldValues يجب أن يكون نوع حرف بأكبر حجم ممكن قد يحدده عميلك في نموذج ويب...وعندما تتغير تعريفات النماذج، تصبح إدارة البيانات القديمة غير واضحة.لكن إدخالات المستخدم قابلة للاستعلام (كتبت ملف استعلام سريع الذي يسرد إدخالات المستخدم مع معرف النموذج، والذي يشبه سؤال محوري آخر).

  2. قد يكون البديل لاستخدام أربعة جداول هو إجراء تسلسل لتعريفات النماذج وإدخالات نماذج المستخدم في XML (أو YAML أو شيء مشابه) وتخزينها كنص.الجانب الإيجابي هو أن النماذج يمكن قراءتها بواسطة الإنسان في قاعدة البيانات.الجانب السلبي هو أنه سيكون هناك المزيد من الحمل التطبيقي مع تحليل XML، وتصبح قاعدة البيانات أقل قابلية للاستعلام من وجهة نظر SQL.

سؤالي الحقيقي هو، ما اسم نموذج قاعدة البيانات هذا؟(حتى أتمكن من البحث في Google عن هذه المشكلة.) لكنني سأستقر على إجابة لـ:ما هو التنفيذ الأفضل أم أن هناك تطبيقات أفضل (أو بنفس الجودة)؟

هل كانت مفيدة؟

المحلول

غالبًا ما يطلق على ما تصفه "قيمة الكيان" ، وأحيانًا يوصف بأنه "خلط البيانات والبيانات الوصفية". أي أن أسماء السمات (الحقول) يتم تخزينها كسلاسل (بيانات).

يؤدي هذا إلى مجموعة من المشكلات المعقدة مثل التأكد من أن كل مثيل نموذج يتضمن نفس مجموعة الحقول، أو التأكد من ملء الحقول الإلزامية (أي ما يعادل NOT NULL في جدول تقليدي).

لقد سألت عن أفضل السبل للقيام بذلك باستخدام قاعدة بيانات علائقية.في قاعدة البيانات العلائقية، يجب عليك استخدام بيانات التعريف لبيانات التعريف.في هذه الحالة، يعني ذلك إنشاء جدول (جداول) جديدة لكل نموذج، واستخدام الأعمدة لحقول النموذج.لذا فإن تعريف النموذج الخاص بك هو ببساطة بيانات تعريف الجدول، ومثيل النموذج الواحد هو صف واحد في هذا الجدول.إذا كنت تدعم النماذج ذات الإجابات متعددة القيم (على سبيل المثال،مربعات الاختيار)، فأنت بحاجة إلى جداول تابعة أيضًا.

قد يبدو هذا مكلفًا أو يصعب توسيع نطاقه.ربما كان صحيحا.لذلك قد لا تكون قاعدة البيانات العلائقية هي أفضل أداة لهذه المهمة.لقد ذكرت إمكانية XML أو YAML؛في الأساس نوع من تنسيق الملفات المنظم الذي يمكنك تحديده بشكل مخصص.يجب عليك تحديد DTD لكل نموذج خاص بالعميل، بحيث يمكن التحقق من صحة كل نموذج تم جمعه.

يحرر: إذا كنت تحتاج حقًا إلى مرونة EAV في تطبيقك، فلا بأس، فعادةً ما تكون هناك ظروف تبرر انتهاك القواعد.فقط كن على دراية بالعمل الإضافي الذي يتطلبه الأمر، وخطط له في جدول التطوير الخاص بك وأثناء قيامك بتوسيع نطاق الخادم الخاص بك للتعامل مع العبء.انظر أيضا آخر إجابة الألغام حول EAV على ستاكوفرفلوو.

نصائح أخرى

ما هو اسم نموذج قاعدة البيانات هذا؟

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

انظر أيضًا إلى مواقع إنشاء النماذج، مثل http://wufoo.com/ أو http://frevvo.com/ لأفكار واجهة المستخدم (إذا كنت تجعلها تعتمد على الويب).

هناك خيار ثالث، حيث يمكنك إنشاء الجداول وإضافة الأعمدة إذا لزم الأمر.يعتمد ذلك على عدد النماذج التي تم إنشاؤها، ولكن يمكن لقواعد البيانات التعامل بسهولة مع الكثير من الجداول.لذا، إذا أراد المستخدم إضافة نموذج "نموذج تسجيل السيارة"، يمكنك إضافة جدول "نموذج تسجيل السيارة".بالنسبة لكل حقل يريدونه في النموذج، يمكنك السماح لهم بالاختيار بين بعض الأنواع الأساسية مثل التاريخ وint والنص.وعندما يتم اختيار النص، يتعين عليهم إدخال الحد الأقصى للطول من قائمة الانتقاء، مما يوفر لك معلومات إذا كان الحقل يجب أن يكون varchar أو clob.

يعمل هذا على SQL Server، حيث يمكنك بسهولة إضافة الأعمدة وإسقاطها.بالنسبة لـ DB2، يمكن أن يكون ذلك مشكلة، لأنه لم يتم تنفيذ عمود الإسقاط.بالنسبة لـ mysql لست متأكدا.

لا تزال بحاجة إلى تسجيل النماذج والحقول الموجودة بها في جدولين منفصلين.

ربما تريد نموذج العلاقة بين الكيان

توجد بالفعل أدوات واجهة المستخدم الرسومية لإنشاء المخطط بشكل تفاعلي من هذه النماذج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top