سؤال

لدي ويب التطبيق الذي صنعته شركة النقل بالشاحنات التي أود أن تقدم ادارة العلاقات.ما هي أفضل طريقة لتصميم قاعدة البيانات ؟

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

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

المحلول

في مواجهة موقف مماثل منذ حوالي 10 سنوات، اخترنا قاعدة بيانات لكل عميل. لدينا المئات (وليس الآلاف) من العملاء. إذا نظرنا إلى الوراء كان واحدا من أفضل المقررات التي صنعناها. النسخ الاحتياطية سهلة. نسخ عميل واحد لمكتبنا للتحليل سهل (فقط خذ النسخة الاحتياطية الأخيرة). Scaling سهل (نقل عميل كبير واحد إلى خادم مختلف، يمكن أن تحرير الموارد على خادم SQL المشدد). كان جويل وجيف مناقشة حول هذا على مكدس تجاوز بودكاست. (ليس مؤخرا) وجولة فعلت نفس الشيء الذي أقوم به ... كل عميل يحصل على قاعدة البيانات الخاصة بهم. غالبا ما يجادل أحواض قاعدة البيانات في كثير من الأحيان بلصق الجميع في DB واحد، لكنني لن أفعل ذلك أبدا.

-اتشح

نصائح أخرى

يجب أن أقوم بإنشاء قاعدة بيانات جديدة لكل شركة؟

نعم - كان دون ديكنسون على المال. ومع ذلك، راجع صياغة أدناه.

أو يجب علي استخدام قاعدة بيانات واحدة مع الجداول التي لها بادئة اسم الشركة؟

اللورد لا! يؤدي تغيير استعلامات قاعدة البيانات الخاصة بك المختلفة للعميل إنك تذهب مجنونا! أيضا، من شبه المؤكد أن تدير SQL ديناميكي (حيث يتم تغيير اسم الجدول في التعليمات البرمجية قبل تشغيل الاستعلام)، والذي من شأنه أن يؤذ الأداء لأن معظم الخوادم مثل خطط استعلام التخزين المؤقت والنتائج المؤقتة - هذا لا يعمل إذا أسماء الجدول استمر بالتغيير.

أو يجب علي استخدام قاعدة بيانات واحدة مع واحد من كل جدول وإضافة حقل معرف الشركة إلى الجداول؟

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

لذلك، قد تقول أن "النسخة التجريبية المجانية" و "البرونز" يتم تجميع جميعها في قاعدة بيانات واحدة، باستخدام معرف الشركة لفصلها؛ يحصل المستخدمون "الفضي" على قاعدة بياناتهم الخاصة (لكنك لا تزال تحتفظ بحقل Customer_ID في المخطط، لذلك لا يتعين عليك تغيير الاستعلامات بين مستويين من العملاء)، ويحصل العملاء "الذهب" على خادم قاعدة البيانات الخاصة بهم.

لقد قمت بشيء مماثل منذ بضع سنوات في شركة SAAS - وعادة ما يكون العملاء عادة ما يكون لديك مسار ترقية على البنية التحتية (اقرأ: الأداء والمرونة) بالإضافة إلى الميزات.

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

حفظ كل على نفسه server أو الخادم سبيل المثال يسمح لنا للحفاظ على بنية قاعدة البيانات نفس مع نفس الأسماء و يجعل من السهل نشر التغييرات إلى كافة ملقمات لأننا لا نملك تغيير اسم قاعدة البيانات.

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

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

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