PDA

View Full Version : اطلاعاتی در مورد کلید خارجی , index و join در mysql



sajadpm
شنبه 02 شهریور 1392, 13:59 عصر
با سلام و خسته نباشید

اطلاعاتی در مورد join و کلید خارجی همچنین index در mysql می خواستم و اینکه توصیه می کنید از index و کلید خارجی استفاده کنم ؟ همچنین سوالی دیگری که ذهن من رو درگیر کرده بود این که هر query چه مقدار در سرعت تاثیر داره مثال فرض کنید من یک جدول دارم که می خواهم اسامی کتاب ها رو همراه نویسنده هاش به داخل اون وارد کنم 2 راه دارم این که اسم نویسنده رو داخل همون جدول کتاب وارد کنم که در این روش دیگر نمی شود اگر یک کتاب چندین نویسنده داشت وارد کرد و مزیت این کار سرعت در query می باشد و راه دوم این که نام نویسنده رو در یک جدول جدا ذخیره کنم با شماره کتاب و وقتی خواستم کتاب رو نشون بدهم 2 query بزنم هم برای دریافت مشخصات کتاب و هم برای دریافت نام نویسنده که مزیت این کار می توان چندین نویسنده رو وارد کرد و معایبش هم اینه که باید 2 query صورت بگیره !

حالا شما به نظرتون کدام بهتره ؟ آیا query اضافه چقدر بر روی سرعت تاثیر داره !

تشکر و سپاس فراوان

sajadpm
شنبه 02 شهریور 1392, 20:19 عصر
دوستان کسی نیست راهنمایی کند ؟

parsboy
شنبه 02 شهریور 1392, 20:42 عصر
دوستان کسی نیست راهنمایی کند ؟
http://stackoverflow.com/questions/11957140/php-mysql-join-two-tables
http://developer1.ir/SQL/Join.aspx

sajadpm
یک شنبه 03 شهریور 1392, 01:53 صبح
تشکر از پاسخ شما , مفهوم join رو فهمیدم البته این لینک هم خوبه : http://www.phpknowhow.com/mysql/joins/ ; کلید خارجی رو هم فهدمیدم فقط به یک مشکل بر خوردم وقتی می خواهم یک ستون رو فیلد خارجی کنم یک قسمت جلوش میاد به صورت : ON DELETE و ON UPDATE این ها چی هستند ؟ همچنین مقدار های داخلش CASCADE و SET NULL و NO ACTION و RESTRICT ؟ منتظر پاسخ شما هستم - سپاس

parsboy
یک شنبه 03 شهریور 1392, 02:16 صبح
تشکر از پاسخ شما , مفهوم join رو فهمیدم البته این لینک هم خوبه : http://www.phpknowhow.com/mysql/joins/ ; کلید خارجی رو هم فهدمیدم فقط به یک مشکل بر خوردم وقتی می خواهم یک ستون رو فیلد خارجی کنم یک قسمت جلوش میاد به صورت : ON DELETE و ON UPDATE این ها چی هستند ؟ همچنین مقدار های داخلش CASCADE و SET NULL و NO ACTION و RESTRICT ؟ منتظر پاسخ شما هستم - سپاس
http://stackoverflow.com/questions/6720050/foreign-key-constraints-when-to-use-on-update-and-on-delete
http://stackoverflow.com/questions/5383612/setting-up-table-relations-what-do-cascade-set-null-and-restrict-do

sajadpm
یک شنبه 03 شهریور 1392, 10:52 صبح
http://stackoverflow.com/questions/6720050/foreign-key-constraints-when-to-use-on-update-and-on-delete
[

تشکر از پاسختون , با توجه به این لینک گفته بهترین حالتش این هست : ON DELETE RESTRICT ON UPDATE CASCADE

حالا من نفهمیدم ON DELETE RESTRICT این یعنی بعد از پاک شدن کلید اصلی چه کاری انجام می دهد با کلید خارجی ؟ میشه در موردش توضیح بدهید !

shahriyar3
دوشنبه 04 شهریور 1392, 00:23 صبح
کلید خارجی خیلی وقت نیست که به mysql اضافه شده . برنامه mysql workbech و روی سیستمت نصب کن
برای تعریف کلید خارجی نیازی به تعریف کردن event یا اکشن خاصی نیست . در واقع کلید خارجی معادل همون relation در mssql هست که اونجا بصورت ویژوال وجود داره.
شما باید بین تیبل ها relation تعریف کنید که کدوم جدول با هم چه نوع رابطه ای دارند. یک به یک . یک به چند . چند به چند
در مورد طراحی تیبل ها هم بستگی به نباز شما داره نمیشه همینجوری بدون دونشتن نیاز های شما برای سیستم شما تعیین تکلیف کرد.
ولی حالت بهینه اینه که اگر یک فیلد وجود داره بهتره که کنار بقیه اطلاعات باشه
مثلا من یک پروژه ثبت فروشگاه داشتیم
برای فروشگاه ها مدیر داشتیم
ما با این فرض سیستم و طراحی کردیم که یک مدیر ممکنه صاحب بیشتر از یک فروشگاه باشه بنابراین برای اینکه از ورود اطلاعات تکراری در تیبل جلوگیری کنیم مشخصات مدیر و توی یک تیبل جدا گذاشتیم فروشگاه و هم توی تیبل جدا گذاشتیم یک تیبل واسط داشتیم آیدی مدیر فروشگاه بود توش و آیدی فروشگاهی که صاحبش هست. این 3 تا تیبل و با هم رابطه هاشونو با بوسیله کلید خارجی مشخص میکردیم.