احمدرضا بشری
6 ماه پیش توسط احمدرضا بشری مطرح شد
1 پاسخ

نظر شما برای تعیین نوع رابطه در مسئله mysql

با سلام
فرض میکنیم که توی mysql جدولی به اسم users داریم که این به چندین جدول رابطه تک به تک داره
مثلا
profiles = پروفایلش
options = اپشن هایی که میخواد توی سایت فعال کنه
و .....
1- خب میدونید کاری که میکنیم معمولا اینه که نمیایم توی جدول users ی ستون بسازیم به اسم optionid که بشه کلید خارجی !
2- میایم توی جدول options ی ستون میسازیم به اسم userid و بعد اونو وصلش میکنیم
دلیلشم اینه که تا کاربری نباشه اپشنی هم در کار نیست ! ولی اگه اپشن نباشه میتونه که کاربر باشه, چون ممکنه کاربری نخواد اپشن خاصی توی سایت فعال کنه و اگه از مسیر 1 بریم اینجا ی optionid داریم که الکی الکی بلا استفادست!

ولی خب موضوغ چیه! من فرض میکنم که تعداد کاربرای سایت رسیده بالای ۳ میلیون رکورد و الان توی سایت میخوایم همه ی کاربرا و اپشن هایی که دارن رو برای مدیر نمایش بدیم! خب کاری نداره ! مثلا اگه از لاراول استفاده کنیم راحت ی رابطه توی مدلمون تعریف میکنیم و تمام
ولی چیزی که برام سواله اینه که اگه توی جدول options اومده باشیم userid رو گذاشته باشیم mysql به ازای هر user که توی جدول users داریم چطوری میاد option شونو پیدا میکنه ؟!

میدونید منظورم چیه؟ منظورم اینه که mysql محبور میشه به ازای هر کاربر, مثلا کاربر شماره ی ۲ بیاد توی جدول options سرچ کنه ببینه کدوم userid برابر ۲ هست ! یعنی به ازای هر کاربر ی سرچ توی جدول options داریم!
ولی اگه از راه حل اول بریم توی users ی optionid داشته باشیم دیگه نیازی به سرچ هم نداره و مستقیم میره بالا سر همون ! چون بهش گفتیم کجاست (البته میتونه null هم باشه جون میتونه کاربری option نداشته باشه)
حالا باز هم مشکلاتی هست
مثلا چی میشه اگه بخوایم به ازای هر option بریم user رو پیدا کنیم؟ :)

این فکر من بود راجب این موضوع ! ولی خب دوست داشتم نظر شماها رو هم بدونم.
ایا بنظرتون توی جداول با رکورد های بالا (مثلا ۵۰ میلیون) mysql اینقدری جواب هست که تعیین محل کلید خارجی (توی رابطه تک به تک البته) چندان هم براش فرقی نداشته باشه؟


ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 6 ماه پیش مطرح شد
0

سلام دوست عزیز
چه سوال کلی و ریشه ای از نوع کار mysql
شما وقتی میایی میگی با قرار دادن ایدی option میره دقیقا بالا سر همون option و سرچی نمیکنه تو حالت صحیحش هم روش فشاری نمیاد و سرجی نمیکنه دقیق میره ستونی که userId با خودش برابره رو بر میداره
تو هر دو حالت تو یه شناسه داری و میری سراغش و هیچ تفاوتی نیست اگر دقت کنی چه سر به کلاه جه کلاه به سر
اما اصول و پایه برنامه نویسی و رابطه مشخصه و درگیر بدیهیات و پایه اساس اصولی که قانون شده نباش
این که بیایی کلید خارجی رو برعکس تعریف کنی با این فکر که سریع تره وقتت روی چیزی هدر دادی که اشتباه بودنش بدیهی هست چون اصلا اصولی نیست.
این موضوعی که گفتی اصلا برای mysql هیچی نیست
شما ده ها جدول رو با هم join میدی و روش qrupBy میزنی و بعدش sort میکنی و کلی شرط میزاری میبینی در کسری از ثانیه داده تحویلت داده میشه
پس در کل درگیر این چیزا نباش ولی دیگ اگر واقعا bigData هست داده هات باید بری سمت اوراکل و بقیه موارد در غیر از نظر نوع سرچ طبق اصولی که تایید شده هست پیش برو
حرفی هم که زدی که با داشتن ایدی میره دقیقا سروقتش و سرچی نمیکنه تو حالت مخالفش هم دقیقا میره سر وقت ایدی ولی توی ستون کلید خارجی همین.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام