سؤال

أسمع الكثير عن الجداول الفرعية عند تصميم قاعدة بيانات، وأنا أدرك تماما النظرية وراءهم. ومع ذلك، لم أر قط الفرعي الفرعي في الواقع في الواقع. كيف يمكنك إنشاء فرعية من الجداول؟ أنا أستخدم MS Access، وأنا أبحث عن طريقة للقيام بذلك في SQL وكذلك من خلال واجهة المستخدم الرسومية (Access 2003).

هتافات!

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

المحلول

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

على أي حال، فقط تذكر ما يلي:

  • يصرخ التسلسل الهرمي العلاقة بين السوبرتيين والحركة الفرعية
  • Supertypes لديه سمات شائعة
  • الفرعية لها سمات لا يتجول

نصائح أخرى

الفرعية من الجداول هي شيء مفاهيمي في مخططات EER. لم أر شركة RDBMS (باستثناء DBMSs العلائقية للكائنات) التي تدعمها مباشرة. عادة ما يتم تنفيذها في أي منهما

  1. مجموعة من الأعمدة المطلقة لكل خاصية الفرعية في طاولة واحدة
  2. مع جدول خصائص نوع الأساس وبعض الجداول الأخرى التي تحتوي على صف واحد لكل جدول أساسي يحتوي على خصائص فرعية

مفهوم الأنواع الفرعية الجدول مفيد عند استخدام Mapper Orm لإنتاج هيئة إرساء من النوع الفرعي من النوع الفرعي نطاقات المجال بالضبط.

سيكون لدى جدول النوع الفرعي مفتاحا أجنبيا يعود إلى والده وهو أيضا المفتاح الأساسي للأنواع الفرعية.

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

على سبيل المثال، إذا كان لديك جدول SuperType مع ثلاثة جداول فرعية وتحتاج إلى عرض الثلاثة في نموذج واحد في وقت واحد (وتحتاج إلى إظهار ليس فقط تاريخ SuperType)، فأنت في نهاية المطاف مع اختيار استخدام ثلاثة ينضم و NZ ()، أو تحتاج إلى اتحاد كل ثلاثة بيانات اختيار متبادلة (واحدة لكل فرعية). لا أحد من هذه سوف تكون قابلة للتحرير.

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

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

لدي مشكلة مماثلة كنت أعمل عليها.

أثناء البحث عن نمط قابل للتكرار، أردت أن أتأكد من أنني لم أتخلى عن النزاهة المرجانية، مما يعني أنه لن أستخدم محلول (table_name، pk_id).

استقر أخيرا على:

طاولة نوع الأساس: العميل

الجداول النوع الفرعي: شخص، أعمال، govt_entity

أضع حقل Prerson_id و Business_id و GOVT_ENTATITY_ID في العملاء، مع مفاتيح أجنبية على كل منها، وعيد التحقق من عدم وجود واحد فقط غير فارغ. من السهل إضافة أنواع فرعية جديدة، فقط تحتاج إلى إضافة المفتاح الأجنبي النظري وتعديل قيود الشيك.

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