ورود

View Full Version : فرق index با foreign key



hercules_3d
شنبه 04 اسفند 1386, 20:07 عصر
سلام
چرا توی فرم های اپن سورسی مثل phpbb و یا myBB و سی ام اس هایی مثل mambo از هیچ foreign key استفاده نشده؟
مثلا توی phpbb یه جدوله categories وجوداره و یه جدوله forums که میشه گفت یه رابطه ی 1 به n وجود داره. ولی با این حال هیچ FK داخل forums تعرف نشده. فقط فیلد cat_id که کتگوری فرم رو مشخص میکنه و به عنوان PK جدوله categories هستش توی جدوله forums به عنوان index تعریف کرده.
آیا دلیل خاصی برای این کار وجود داره. در ضمن جدولاشم از نوع InnoDB هستش

mehdi_kamari
یک شنبه 05 اسفند 1386, 08:28 صبح
اولا InnoDB چه اشکالی داره ؟ خیلی مزایا نسبت به انواع دیگه داره که برتری زیادی هم بهش میده .
دوما سوالت فکر کنم اشتباه باشه Index , Foreign Key دو موجودیت کاملا بی ربط نسبت به هم هستند و نباید با هم مقایسه کرد

hercules_3d
یک شنبه 05 اسفند 1386, 15:28 عصر
خوب اولا InnoDB هیچ ایرادی نداره منظورم از گفتن نوع جدول این بود که جدولا از نوع InnoDB هستند و ساپورت خوبی نسبت به FK دارند
کاملا درست که index و FK دو چیز کاملا مجزا هستند و هدف من از طرح این سوال مقایسه این دو نبود!
خوب مگه از FK به منظور ایجاد ارتباطات استفاده نمی شه؟
اگه آره می خوام اینو بگم وقتی دو تیبل با هم ارتباط دارند چرا به جای اینکه فیلدی توی جدول فرزند FK تعریف شه فقط index رو اون فیلد تعریف کردن؟

reza_rad
سه شنبه 07 اسفند 1386, 07:41 صبح
با این حال هیچ FK داخل forums تعرف نشده
لزومی بر استفاده از ساختار FK نیست. این امکان می تونه توسط منطق برنامه شما روی دیتابیس حکمفرما بشه. البته وجودش بعنوان FK در دیتابیس بهتر هست ولی نبودش به معنای اشتباه بودن نیست.

فقط index رو اون فیلد تعریف کردن؟
تعریف فیلد ایندکس برای سرعت کار جستجو ها است.

hercules_3d
سه شنبه 07 اسفند 1386, 16:21 عصر
خوب استفاده از fk به جای index یه خوبی که داره ایجاد یه محدودیتی که نمیشه مقادیری رو که توی جدول پدر نیست رو وارد جدول فرزند کرد ولی همچین پیاده سازی رو که نمیشه با index کرد؟

tabib_m
سه شنبه 07 اسفند 1386, 16:44 عصر
ولی همچین پیاده سازی رو که نمیشه با index کرد؟
همون طور که آقای راد گفتن:

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

vahid4134
سه شنبه 07 اسفند 1386, 17:30 عصر
یه نکته دیگه هم خواستم به دوستان متذکر بشم که درسته innoDB مزایایی رو داره اما موتور myISAM از innoDB سریعتر و سبکتر هست. پس اگه نیازی به امکانات innoDB ندارید از این موتور استفاده نکنید