PDA

View Full Version : روش بهینه join شدن دو جدول با یکدیگر



mohamad68
پنج شنبه 17 بهمن 1392, 01:12 صبح
سلام دوستان
من جدولی دارم با تعداد رکورد بالا که لیستی از کتاب ها در آن نگهداری می شه و در جدولی دیگر لیست دسته بندی کتاب ها قرار داره، که مقادیری ثابت هستند.
اگر هر کتاب در چندین دسته قرار بگیره. حال سوالی که مطرح می شه، این که join شدن کتاب و دسته از کدام یک از دو روش زیر انجام گیرد:
1- جدول سوم که شناسه کتاب و دسته در آن قرار گیرد. که ممکن است بازای هر کتاب چندین رکورد درج شود
2- در همان جدول کتاب، فیلدی تعبیه شده و شناسه دسته ها در آن قرار گرفته و با نشانه ویرگول از هم جدا شوند
لطفا راهکار پیشنهادی رو با درنظر گرفتن پارامترهایی مانند سرعت درج و بازیابی، فضای مورد نیاز، پیچیدگی کدنویسی و ... مطرح کنید
ممنووون

starting
پنج شنبه 17 بهمن 1392, 09:50 صبح
گزینه انتخابی من:

1- جدول سوم که شناسه کتاب و دسته در آن قرار گیرد. که ممکن است بازای هر کتاب چندین رکورد درج شود

به این خاطر که اصولی است. در روش لیست دسته ها که با کاما از هم جدا شدن، چند مورد قابل ذکر هست، اولین و مهمترین مشکلش عدم نرمال بودنش هست که باعث ناهنجاری هایی در عملیات به هنگام سازی میشه. این فرم حتی در نرمال اول هم قرار نداره چون فیلد مورد نظر Atomic نیست.

دومین مشکل مربوط میشه به همان عمل Join، فرض کنید می خواهید به جای کدهای دسته که لیست شدن، نام دسته ها یا مشخصات دیگه لیست شوند؛ حال چاره چیست؟ مجبورید که مجدد این لیست را از هم تجزیه کنید و سپس عمل Join را انجام دهید. یعنی دو عمل یکی تجزیه رشته و دیگری Join در حالی که در روش معمولی این مشکل وجود نداره.
اگر هم به جای کد نام دسته را لیست کردین باز هم مشکل اول پا بر جاست، فرض کنید نام دسته ای از "تکنولوژی کامپیوتر" به "فناوری رایانه" تغییر نام کند، آنگاه شما مجبورید تمام سطرهای جدول کتاب را بروزرسانی کنید.

mohamad68
پنج شنبه 17 بهمن 1392, 11:11 صبح
گزینه انتخابی من:


به این خاطر که اصولی است. در روش لیست دسته ها که با کاما از هم جدا شدن، چند مورد قابل ذکر هست، اولین و مهمترین مشکلش عدم نرمال بودنش هست که باعث ناهنجاری هایی در عملیات به هنگام سازی میشه. این فرم حتی در نرمال اول هم قرار نداره چون فیلد مورد نظر Atomic نیست.

دومین مشکل مربوط میشه به همان عمل Join، فرض کنید می خواهید به جای کدهای دسته که لیست شدن، نام دسته ها یا مشخصات دیگه لیست شوند؛ حال چاره چیست؟ مجبورید که مجدد این لیست را از هم تجزیه کنید و سپس عمل Join را انجام دهید. یعنی دو عمل یکی تجزیه رشته و دیگری Join در حالی که در روش معمولی این مشکل وجود نداره.
اگر هم به جای کد نام دسته را لیست کردین باز هم مشکل اول پا بر جاست، فرض کنید نام دسته ای از "تکنولوژی کامپیوتر" به "فناوری رایانه" تغییر نام کند، آنگاه شما مجبورید تمام سطرهای جدول کتاب را بروزرسانی کنید.

ممنون از پاسختون که همراه با ذکر دلیل بود
اما فرض کنید که جداو ل ثانویه فقط دسته کتاب نباشه. جداول دیگری مثل زبان یک کتاب و یا رشته های تحصیلی و ... هم وجود داشته باشه. که هر کتاب شامل چند نمونه از آن می شه
بنابراین بازای هر رکورد در جدول کتاب، چندین رکورد در چندین جدول ثالث وجود داره
آیا این کار سرعت عملیات درج و بروزرسانی و بازیابی آن را به شکل قابل توجه کاهش نمیده؟؟
آیا راهکاری برای بهینه سازی جداول به غیر از این روش وجود نداره ؟

starting
پنج شنبه 17 بهمن 1392, 12:08 عصر
چاره چیه؟

فرض کنید به صورت Comma List ذخیره کردین داده ها را و اکنون می خواهیم کتاب های را بازیابی کنیم که مربوط میشه به موضوع X. ناچارید از LIKE برای ارزیابی و فیلتر کردن داده ها استفاده کنید. ولی آیا LIKE قادر است داده ها را از روی Index به صورت Seek شده بازیابی کند؟