ورود

View Full Version : سوال: رابطه درختی در بانک اطلاعاتی



Reza798
چهارشنبه 16 تیر 1389, 00:12 صبح
با سلام

بهترین راه برای پیاده سازی یک رابطه درختی (والد - فرزندی) مثلا یک قاره - کشورهای آن - شهرها و روستا های آن در یک بانک اطلاعاتی رابطه ای چه روشی است؟

حمیدرضاصادقیان
چهارشنبه 16 تیر 1389, 08:09 صبح
سلام.
برای پیاده کردن رابطه درختی دوراه پیشنهاد میشه.
1- استفاده از جدولی با ساختار زیر:
ID,Name,IdPArent
این جدول به چه صورت کار میکنه؟

فیلد id همون کد مربوط به قاره هست و name هم نام قاره. فیلد idparent مربوط به پدر ردیف مورد نظر هست.
الان برای قاره ما دیگه پدری نداریم پس مقدار این فیلد null قرار میگیره.
ولی برای کشور مقدار این فیلد برابر مقدار id قاره ای میشه که اون کشور در اون قرار داره.و به همین ترتیب تا انتها میره.
برای چک کردن این که یک رکورد شاخه اصلی هست یا خیر مقدار idparent کنترل میشه که null هست یا خیر.که در صورت null بودن در شاخه اصلی قرار میگیره.

2- در این روش ساختار جدول شما به شکل زیر خواهد شد.
id,name,left,right

که id همون کد قاره و name هم نامش هست. حالا در اینجا فیلدهای left و right مشخص میکنند که زیر مجموعه این رکورد از چه شماره ای تا چه شماره ای هست.
به مثال توجه کنید:

فرض کنید کد قاره آسیا 1 هست.
کد کشور ایران 2، عربستان 3 ، عراق 4 هست.
حالا در این جدول به این صورت مقدار میگیرن.

2,4 , آسیا,1
که مشخص میشه قاره آسیا از کشور ایران تا عراق در اون قرار داره.

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

روش دوم پیاده سازی اون مقداری مشکلتره. وقتی بخواهید بین رکوردها درج کنید راحتتره.
برای تهیه لیست راحت هستید ولی برای ورود اطلاعات مقداری کار پیچیده میشه.

یک کتاب هم در این زمینه هست به نام Trees and Hierarchies in sql server که 270 صفحه هست.اون کامل در این زمینه توضیح داده.

موفق باشید.