كيف يمكنني إنشاء فئات متداخلة في قاعدة بيانات؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

أقوم بإنشاء موقع أشرطة الفيديو حيث سيتم تداخل الفئات:

EG Programming-> C Language -> MIT Videos -> فيديو 1 البرمجة -> C Language -> فيديو Stanford -> فيديو 1 برمجة -> Python -> Video 1

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

هل يمكن لشخص ما الرجاء مساعدتي في كيف يمكنني الذهاب حول إنشاء مثل هذه قاعدة البيانات؟

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

المحلول

قال Quassnoi:

يجب عليك استخدام مجموعات متداخلة أو نماذج الوالدين والطفل.

اعتدت أن تنفذ كل منهما. ما أستطيع أن أقوله هو:

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

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

فيما يلي مقالتان حول هذا الموضوع:

آخر شيء، لم أحاول ذلك، لكنني قرأت في مكان ما يمكنك الحصول عليه أكثر من شجرة واحدة في جدول مجموعة متداخلة، أعني العديد من الجذور.

نصائح أخرى

قم بإجراء جدول الفئات مع الحقول التالية:

  • Cationalid - عدد صحيح
  • DesiceName - سلسلة / varchar / أيا كان
  • Parentid - عدد صحيح

ثم سيتم الرجوع إلى Parentid الخاص بك إلى فئة الوالد.

مثال:

CategoryID CategoryName ParentID
---------------------------------
1          Dog          NULL
2          Cat          NULL
3          Poodle       1
4          Dachsund     1
5          Persian      2
6          Toy Poodle   3

من مثال على سؤالك، يبدو أنك تريد أن تكون ممكنا لصالح فئة معينة لديها أولياء أمور متعددة (على سبيل المثال، "مقاطع الفيديو" -> برمجة الفيديو 1 "وكذلك" برمجة الفيديو 1 ")، في هذه الحالة، ببساطة إضافة عمود ParentID لن يكون كافيا.

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

يجب عليك استخدام أي nested sets أو parent-child عارضات ازياء.

Parent-child:

اسم الوالد 1 0 المشترين 2 0 البائعين 3 0 حكم 4 1 الكهربائية 5 1 ميكانيكي
SELECT  *
FROM    mytable
WHERE   group IN
        (
        SELECT  typeid
        FROM    group_types
        START WITH
                typeid = 1
        CONNECT BY
                parent = PRIOR typeid
        )

سوف تحدد جميع المشترين في Oracle.

Nested sets:

TextID Lower Name الاسم العلوي 1 1 2 المشترون 2 3 3 البائعون 3 4 4 الحكم 4 1 1 الكهربائية 5 2 2 ميكانيكي
SELECT  *
FROM    group_types
JOIN    mytable
ON      group BETWEEN lower AND upper
WHERE   typeid = 1

سيختار جميع المشترين في أي قاعدة بيانات.

يرى هذه الإجابة لمزيد من التفاصيل.

Nested sets من السهل الاستعلام، ولكن من الصعب التحديث وأصعب بناء بنية شجرة.

ما تحتاجه هو علاقة الأساسي والطفل الأساسية:

Category (ID: int, ParentID: nullable int, Name: nvarchar(1000))

طريقة أفضل لتخزين الوالدين_ID من الجدول هي أن يكون لها متداخلة داخل المعرف

100000 برمجة 110000 C اللغة 111000 فيديو 1 برمجة 111100 C اللغة 111110 ستانفورد فيديو

إلخ.

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