مدل درختی ( والد فرزندی) در دیتابیس های no-sql مثل mongodb

به نام دانای بر حق

مقدمه

فک کنم در حدود سه سال پیش بود در مورد مدل کاردینالیتی در دیتبایس های sql base صحبت کردیم در این مبحث که بازخورد خوبی داشت ، اما به قول صادق دیتابیس های اسکیوالی توسط ریاضی دانان طراحی شده و دیتابیس های nosql توسط برنامه نویسان، به شخصه از موقعی که با no-sql آشنا شدم حالم از دیتابیس های کلاسیک بهم میخوره و ولی به موقع دقیق تر و قشنگ تر در مورد no-sql ها من یا سایر x های 4xmen صحبت میکنیم و اما یکی از بحث هایی که در پایگاه داده ها مطرح هستش ارتباط هستش این ارتباط گاهی به صورت پدر و فرزندی یا مادر فرزندی میباشد به عکس زیر نگاه کنین تا بریم در مورد بحث صحبت کنیم:

 

در این مبحث فرض شده است شما با دیتابیس های کلاسیک و nosql آشنایی لازم و کافی را دارید

مقایسه و توضیحات

این مدل مدلی درختی میباشد در اصطلاح یا tree model در برنامه نویسی شما در تصویر بالا یک head به نام book  میبینید و زیر مجموعه programming را داراست در زیر مجموعه آن Databases , Languages می باشد و …

حال اگر این رو میخواستیم در دیتابیس های sql base طراحی کنیم بایستی جدولی به شکل زیر طراحی میکردیم با یک فیلد پرنت که در آن head را با ۰ نشان میدادی و فرزندان رو با id parent  در این فیلد مشخص می کردیم به جدول زیر توجه کنین:

 

ID title PranentID
1 Books 0
2 Programming 1
3 Languages 2
4 Databases 2
5 dbm 4
6 MongoDB 4

همه چیز کاملا واضح است و حالانمایش در حالت modren:

 

پیاده سازی این مدل درختی در دیتابیس

nosql خیلی ساده تر و جالب تر است و باز خوانیشون خیلی ساده اس به دستورات زیر توجه کنید برای ورود این اطلاعات:

خب ما در کلاکشن categories میایم مقادیر رو به شکل بالا وارد میکنیم یعنی id میشود title و در هر ورود ما children های زیر مجموعه رو مشخص میکنیم در اینجا ترتیب به اون صورتی که در دیبتایس کلاسیک هست نمیباشد میتونین با توجه ببنید.

اما در این روش ما برعکس هم داریم قطعه کد زیر نیز میتونه جایگزین کد بالا باشه:

 

اما بازیابی جالب و ساده این مدل:

پیدا کردن فرزندان یک دسته:

پیدا کردن والد یا پدر:

خب حالا شما میتونید برای افزایش سرعت شاخص (ایندکس) گذاری هم کنید که به شکل زیر هستش:

یا index گذاشت برای والد ها:

حالا قسمت جالب داستان شما میخواهین تمامی اجداد یک دسته رو پیدا کنین به سادگی زیر میتونین این کار رو انجام بدین:

پیدا کردن زادگان یا نوادگان یک دسته:

 

اکنون آیا شما هنوز هم به دیتابیس های کلاسیک علاقه دارید با این اوصاف؟

‌A1Gard

اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم. در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :‌ Delphi, PHP, C++ ,Python, JavaScript, Unity game engine, C#, asm و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم. تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه. یا حق، با حق، تا حق

More Posts

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *