ما هي أفضل طريقة لنموذج العلاقات التسلسل الهرمية المعرفة من قبل المستخدم في قاعدة بيانات؟

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

سؤال

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

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

المحلول

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

unit:
    unit id,
    name,

unit relationship:
    unit id,
    foreign unit id

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

unit id يتعلق بالوحدة التي تصفها.foreign unit id يجب أن تكون خالية.

أ unit مع عدم وجود سجلات العلاقة موجودة فقط في جذر Heirarchy. أ unit مع null foreign unit id يمكن أن يكون أي شيء آخر unit كما والديه. خلاف ذلك، أ unit يجب أن يكون لديك آخر unit كما الوالد، يجب أن يكون النوع من المعرفين في سجلات العلاقة.

أما بالنسبة لتخزين الحالات نفسها، يجب أن تكون واضحة ..

instance:
    instance id,
    unit id,
    parent instance_id

أنا متأكد من أنه سيكون هناك حقول أخرى تحتاجها (الاسم، على سبيل المثال)، لكنني أفترض أنك تحصل على الانجراف.

نصائح أخرى

تحتاج إلى تنفيذ ثلاثة مفاهيم:

  • "أنواع الوحدة" ورابطاتها المسموح بها
  • التسلسل الهرمي
  • الوحدات الفعلية

يمكن أن تعايش هذه المفاهيم أكثر أو أقل بشكل مستقل في النموذج، ولكن العمل معا.

create table unittype
(
    id int;
    name varchar(20);
)

create table unitrelationship
(
    id int;
    parent_id int;
)

يمكنك نموذج التسلسل الهرمي كجدول مراجع ذاتي:

create table hierarchy
(
    id int;
    parent_id int;
    unit_type_id int;
    unit_id int;
)

يمكنك بعد ذلك الحصول على مثيلات الوحدة الخاصة بك في جدول واحد أو أكثر مما تفعل معهم ما وصفته.

create table unit
{
    id int;
    ....
}

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

أنا أعمل في مشكلة مماثلة على الرغم من أنني بحاجة إلى دعم التسلسلات الهرمية المتعددة (مجموعة واحدة من الأطفال، وجهات نظر هرمية متعددة). لقد وجدت جو سيلكو "الأشجار والأهرافات الهرمية في SQL for Smarties" (ISBN: 1558609202) مفيدة. ما زلت أعمل على المشكلة، لكن الأمر يتعلق الأمر كثيرا عند مناقشة هذا الموضوع أنه يبدو مناسبا للذكر.

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