سؤال

أنا أستخدم مفهوم single table inheritance بسبب اعتبارات OOP بالطبع.
على سبيل المثال، PostLike و TopicLike يرث من Like فصل.
أرى مشكلتين في هذه المنهجية:

  1. بدلاً من جدولين (PostLike وTopicLike) أحصل على "جدول واحد كبير" من الإعجابات.
  2. يحتوي هذا الجدول على عمود إضافي يسمى dtype مما يتيح تحديد السجل (أي.نوع مثل).على المدى الطويل يمكن أن يكون مضيعة ضخمة من مساحة القرص.أليس كذلك؟

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

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

المحلول

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

دعونا نحصل على مثال.إليك النموذج (بدون تعليقات JPA التوضيحية):

public abstract class Like {
    public Long id;

    public String foo;
}

public class PostLike extends Like {

    public String post;
}


public class TopicLike extends Like {

    public String topic;
}

سوف تحصل على الطاولة Like:

----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post  |  1 |   a |  NULL |   p1 |
|topic |  2 |   b |    t1 | NULL |
----------------------------------

وكما ترون، بالنسبة لعنصر "PostLike"، سيكون لديك قيمة "موضوع" فارغة.

ولكن في الوقت الحاضر، مساحة القرص إن لم تكن مشكلة حقيقية.

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

و أفيك، يدعم إيبين فقط "ميراث جدول واحد".

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