سؤال

وجوابا على السؤال من الألغام على تصميم DB اقترح ما يسمى واحد الميراث الجدول. لقد فعلت قليلا من البحث في ذلك، ولكن لا أستطيع العثور على ما يبدو أن معلومات واضحة كثيرا على ذلك.

وأساسا ما يبدو لي أن نفهم من ذلك هو أن لديك طاولة كبيرة مع كافة الحقول في ذلك، وأيضا حقل نوع - وبعد ذلك يستخدم طبقة ORM الخاص بك حقل نوع لتعطيك وجهات النظر وجوه مختلفة. فهل هذا صحيح؟

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

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

وأي مساعدة بتقدير كبير.

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

المحلول

هل هو فكرة جيدة؟ هذا يعتمد. كان وقوع التطبيع في هذا الجدول ليس لديها هدف واحد. ماذا يحدث عند توسيع قاعدة الطبقة للمرة الألف؟ سيكون لديك لإضافة أعمدة إلى الجدول. معظم قواعد بيانات حديثة لم يكن لديك مشكلة في ذلك كما يمكنك تعديل الجدول ولكن ماذا عن إعادة الهيكلية وإزالة فئة. الآن لديك الأعمدة التي لم يكن لديك الغرض.

ووبحكم التجربة - إذا كان معظم من تصميم تم التوصل إليه، هو على الأرجح آمنة للاستخدام. إذا كان التصميم يتغير كثيرا - لديك قضايا أخرى وتحتاج إلى تأمين حالات الاستخدام الاحتياجات الخاصة بك / المستخدم. (نعم، لا حقا ودية XP)

وأنا لا أعرف عن الآثار القضبان.

نصائح أخرى

وSTI هو وسيلة للتعامل مع عدم تطابق بين التفكير object- وموجهة نحو قاعدة بيانات. لأنها تتيح تمثيل معقول من المعلومات ضمن قاعدة البيانات وتمثيل مختلف في طراز كائن.

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

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

وSTI هو (أصلا؟) موثقة في "أنماط تطبيق المشاريع المعمارية" مارتن فاولر الكتاب، ويوصف أيضا في DHH كتاب القضبان الكنسي 'الشبكة العالمية للتنمية رشيق مع القضبان "(القسم 18.4، على ما أعتقد.) أود أن أشير لك هذه الكتب لأنها توفر تفسيرا أفضل بكثير مما يمكن أن نأمل أن تفعل في هذا المجال.

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

إشارة . انها تسمح جدول واحد لتخزين كائنات متعددة التي لديها فئة أساسية مشتركة.

وروبي على القضبان يستخدم مكتبة دعا تواجد في سجل . هذا هو الإطار روبي المشترك الذي يدعم STI.

وأستطيع أن أتكلم فقط من (جديد) ADO إطار الكيان المنظور، والذي يتضمن الجدول لكل نوع (تي بي تي) وظيفة.

هنا هو سلسلة جيدة من بلوق وظائف إدخال المفاهيم الأساسية (باستخدام إطار الكيان) وهناك ورقة MSDN على ذلك أيضا <لأ href = "http://msdn.microsoft.com/en-us/library/bb738685.aspx" يختلط = "نوفولو noreferrer"> هنا .

ويبدو أيضا أن يكون بعض التوجيهات عند استخدام nHibernate لTPT، انها تقع على هنا .

وهناك هذا الرابط وهو ما يفسر الميراث الجدول لكل نوع في SQL Server . هذا يبدو ان لديه ملخص جيد جدا ومقدمة لهذا المفهوم.

ولست متأكدا ما أثر ذلك على القضبان.

ولقد رأيت للتو HTTP: //www.matthewpaulmoore.com/articles/1276-ruby-on-rails-code-quality-checklist#sti مما يوحي لها فكرة سيئة.

وعموما أجد أنه من المفيد، ولكن لقد واجهت بعض الخلل

والمثال في هذا الارتباط قد يقدم صورة مفيدة عن الكيفية التي يمكن استخدامها.

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