ورود

View Full Version : کدوم رو انتخاب میکنی؟ دو را برای طراحی جدول



Arsham**
پنج شنبه 27 آبان 1389, 09:58 صبح
سلام دوستان:لبخند:
پیشاپیش به خاطر طولانی شدن پست عذر خواهی می کنم می خواستم کامل توضیح بدم که طولانی شد:خجالت:
من می خوام بانکی رو طراحی کنم که چند ارتباط n به n داره. نکته اینجاست که ارتباط این ها هم مهم هستند و در واقع باید ارتباط هر هر کدوم رو با یک ID نگه دارم.:متفکر:
فرض کنید می خوام بین چند تا کتابخانه ارتباط برقرار کنم.

راه اول:
1-جدول گروه ها:یک جدول برای گروه کتابها که نام گروه و ID اونها رو داره
ID -----------نام
------------------------------------------------
1 ------------داستانی
2 ------------علمی

2-جدول کتابخانه ها: جدولی برای کتابخانه ها که شامل مشخصات و ID اونهاست.

جدولی که برای ارتباط اونها استفاده میشه به این صورت خواهد بود
کتابخانه ------گروه کتاب----------- ID ارتباط
-------------------------------------------------------------------------------------
1------------------ 1------------------- 101
1 ----------------- 9--------------------102
2 ----------------- 6--------------------201
2 ----------------- 1--------------------202
3 ----------------- 9--------------------301


راه دوم:
می تونیم جدول شماره ی یک یعنی جدول گروه ها رو حذف کنیم. :بامزه:
که در نهایت جدول ارتباط اونها به این شکل در میاد:
کتابخانه ----------گروه کتاب ------------عنوان گروه کتاب
-------------------------------------------------------------------------------------
1 ---------------------101 ----------------- داستانی
1 ---------------------102 ----------------- دانشگاهی
2 ---------------------201 ----------------- علمی
2 ---------------------202 ----------------- داستانی
3 ---------------------301 ----------------- دانشگاهی

منظورم اینه که دیگه گروه ها یکتا نیستند بلکه فقط ارتباط گروه ها با کتابخانه ها یکتا محسوب میشن. توی این جدول با توجه به محدود بودن گروه های کتاب (بیشتر از 15 گروه در نظر نمی گیریم) ایرادی به تکرار شدن عنوان کتاب وارد نمیشه.


روش اول:
1-به جدول گروه کتاب نیاز داریم
2-به متودی برای محاسبه ی ID نیاز داریم.(چون ID با توجه به شماره ی کتابخانه باید ساخته بشه)
3-برای عملیاتی مثل جستجو که از نام گروه کتاب استفاده ی میشه باید برای دیدن عنوان گروه و ID اون به جدول گروه کتاب مراجعه کنیم.
4-تعداد کلید های بیشتر

روش دوم:
1-به جدول گروه کتاب نیاز نداریم
2-به متودی برای محاسبه ی ID نیاز داریم.(در اینجا هم ID با توجه به شماره ی کتابخانه باید ساخته بشه)
3-برای عملیاتی مثل جستجو که از نام گروه کتاب استفاده ی میشه نباید برای دیدن عنوان گروه و ID اون به جدول گروه کتاب مراجعه کنیم، چون نام گروه کتاب تو همین جدول هست.
4-تعداد کلید های کمتر

امیدوارم منظورم رو خوب رسونده باشد.:چشمک:
شما جای من بودین کدوم روش رو انتخاب می کردین؟(لطفا دلیلش رو هم ذکر کنید)

m.hamidreza
پنج شنبه 27 آبان 1389, 11:55 صبح
روش دوم اشتباهه. در روش اول ID ارتباط یعنی چی؟ در رکورد اول، گروه کتاب کتابخانه 1، طبق IDش داستانی هست. من منظور شما رو از ID ارتباط نمیفهمم.

Arsham**
پنج شنبه 27 آبان 1389, 12:11 عصر
قبل از هر چیز از توجهتون متشکرم:قلب:
ببینید، تو این سیستم مهمه که "هر کتابخونه ای چه گروهی از کتابها رو داره"، برای همین مجبورم ارتباط هر گروه رو با کتابخانه به عنوان یک موجودیت در نظر بگیرم و با یک ID اون رو یکتا در نظر بگیرم.
یک راه حل برای پیاده سازی ارتباطات nبهn استفاده از یک جدول میانی که ارتباط چند به چند رو به دو ارتباط 1 به n تبدیل می کنه. مثل جدول مشخصات فروش و افراد که هر کسی می تونه چند کالا رو بخره و هر کالایی هم می تونه به چند نفر فروخته بشه اون موقع توی جدول میانی که گفتیم هم ID کالا و هم ID خریدار ذکر میشه.
حالا شما تصور کنین که رکوردهای جدول میانی(یا همون فاکتور فروش) اونقدر مهم هستن و ازشون جاهای دیگه استفاده میشه که باید به هر کدوم یک ID بدیم.
منظورم از ID ارتباط این بود(ارتباط خریدار با کالا)

mohsensaghafi
پنج شنبه 27 آبان 1389, 12:31 عصر
سلام دوست عزیز.
من روش اول رو انتخاب می کردم چون از لحاظ بهینه سازی کاملتر و بهینه تر و اصولی تر به نظر می رسد.
موفق باشید

Arsham**
پنج شنبه 27 آبان 1389, 13:14 عصر
پس چرا من خودم فکر می کنم روش دوم راه خوبیه؟:گیج:
تو روش اول باید با دو جدول ارتباط برقرار کنیم ولی تو روش دوم کار فقط نیازی نیست که ارتباطتمون رو با جدول قطع کنیم و به جدول دیگه متصل بشیم. با توجه به اینکه میزان سرچ توی این قسمت خیلی زیاده.
میشه واضحتر توضیح بدید؟:متفکر:

m.hamidreza
پنج شنبه 27 آبان 1389, 18:32 عصر
من فکر کنم منظور شما از فیلد سوم، کلید اصلی جدول هست که اسمش ID هم باشه کافیه و میتونه Auto Number باشه.
برای اینکه دقیقا متوجه بشین که اشتباهتون کجاست باید مباحث سطح های نرمالسازی رو مطالعه کنید ضمن اینکه کلاس دیاگرام شما در مرحله طراحی موید طراحی دیتابیس به شیوه الف هست.
موفق باشید.

mohsensaghafi
جمعه 28 آبان 1389, 13:22 عصر
پس چرا من خودم فکر می کنم روش دوم راه خوبیه؟:گیج:
تو روش اول باید با دو جدول ارتباط برقرار کنیم ولی تو روش دوم کار فقط نیازی نیست که ارتباطتمون رو با جدول قطع کنیم و به جدول دیگه متصل بشیم. با توجه به اینکه میزان سرچ توی این قسمت خیلی زیاده.
میشه واضحتر توضیح بدید؟:متفکر:

سلام دوست عزیز.
همیشه تعداد کمتر برای جداول دلیلی بر درستی راه نیست.
در ضمن شما برای گرفتن query ها اونها رو با هم join می کنید و نیازی نیست که ارتباط رو قطع کنید و دوباره به یک جدول دیگر متصل شوید؟!!!!!!
همونظوری که دوستمون m.hamidreza گفتن باید یک مرور دیگر بر مبحث نرمال سازی داشته باشید.
موفق باشید.