در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش کوئری (Query) گرفتن از SQL قسمت 5 : رابطه بین جدول ها

nر مقاله قبلی در خصوص مفاهیمی مثل Trigger ، Constraint ، Primary Key و foreign Key صحبت کردیم. تمامی این مفاهیم در نهایت بر می گردد به موضوعی به نام رابطه بین Table ها یا Table Relationships ، یکی از مواردی که در انتهای مقاله قبلی به آن اشاره کردیم بحث کلید خارجی یا Foreign Key بود که می توانست بین چندین Table مختلف ارتباط برقرار کند. سئوال اصلی در اینجا پیش می آید که اصلا چرا ما باید بین چند Table ارتباط یا Relation برقرار کنیم و چه ضرورتی برای انجام اینکار می باشد؟ خوب دلایل استفاده از چنین قابلیتی زیاد هستند اما در این سری مقالات به مهمترین دلایل اشاره ای خواهیم داشت.

افزایش سرعت و کارایی در بروز رسانی رکوردها

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

انعطاف پذیری برای گرفتن گزارش ها و Query ها

علاوه بر این مورد تقسیم کردن داده ها به Table های مختلف انعطاف پذیری بیشتری به شما برای گرفتن Query ها و گزارش ها می دهد. برای مثال اگر قرار باشد شما برای تهیه یک گزارش Table ای که دارای محتوای انبار یا Storage است را در کنار Table دیگری که اطلاعات مشتریان یا Customer را در خود دارد قرار دهید تا بتوانید برای مثال مشتریانی که از فروشگاه های خاص شما خرید می کنند را پیدا کنید و نزدیکترین فروشگاه را برای مثال به آنها معرفی کنید ، یا میزان خرید هفتگی و ماهیانه آنها را محاسبه کنید ، با تفکیک کردن Table ها این امر ساده تر می شود ، در چنین مواقعی شما اگر نقطه اشتراکی بین Table های خود می خواهید ایجاد کنید می توانید با استفاده از امکاناتی که در SQL سرور به نام Join کردن Table ها وجود دارد این عملیات را انجام دهید ، در آینده در خصوص Join کردن Database ها بیشتر صحبت خواهیم کرد. فرآیند Join کردن را زمانی انجام می دهیم که الزامی برای ایجاد کردن Relationship بین دو Table وجود ندارد اما داده هایی در Table های مختلف وجود دارد که می تواند برای گزارش گیری یا فرآیند های اینچنینی مفید باشند ، برای مثال شما می خواهید بدانید که مشتریان شما هر چند وقت یکبار از فروشگاه های شما خرید می کنند ، چه چیزهایی را معمولا خرید می کنند ؟ از کدام فروشگاه شما خرید می کنند ؟ و امثال اینگونه گزارش ها که نیازمند برقراری ارتباط بین Table های Customers و Orders و Storage می باشد در چنین مواقعی شما می توانید از Join کردن Table ها استفاده کنید. مزیت Join کردن در این است که شما الزامی برای طراحی اولیه درست برای Database خود ندارد و می توانید Join ها را بعدها انجام دهید.

صحت داده ها یا Data Integrity ( مشخص بودن داده اصلی)

آخرین دلیلی که در این قسمت می توانیم برای تقسیم بندی داده ها به Table های مختلف عنوان کنیم بحث صحت داده ها یا Data Integrity می باشد. اینکار شامل این مورد می شود که مطمئن شویم که اگر بر فرض مثال ما نام یک مشتری را در Table خود Update یا بروز رسانی می کنیم ، فقط نیاز باشد اینکار یکبار انجام شود و نیازی نباشد که شما این عملیات را برای چندین Table دیگر نیز انجام دهید. از طرفی دیگر می توانیم این مثال را برای مواردی بزنیم که شما می خواهید یک مقدار را در یکی از Table های خود تغییر دهید اما می خواهید مقدار اولیه همیشه ثابت باقی بماند و شما می خواهید همیشه بدانید که داده اصلی شما چه بوده است. برای مثال اگر شما یک فروشگاه چند شعبه ای در سراسر کشور را در نظر بگیرید ، برای مثال فروشگاه انجمن تخصصی فناوری اطلاعات ایران که به امید خدا به زودی با آدرس shop.tosinso.com در دسترس خواهد بود ، شما برای پایگاه داده آن یک Table به نام سفارش ها یا Orders ایجاد می کنید ، در حقیقت برای من مهم این نیست که مشتری من اکنون در چه مکانی یا شهری قرار دارد بلکه برای من محلی مهم است که مشتری سفارش خود را ثبت کرده است ، ممکن است مشتری ما در کرج سفارش ثبت کرده باشد اما الان ساکن تبریز باشد. خوب در همینجا یک مثال می زنیم ، ما می خواهیم به فروشندگانی که تا کنون موفق شده اند بیشترین محصول را به این مشتری بفروشند جایزه بدهیم و یا اینکه به اشخاصی که از فروشگاه ما بارها و بارها خرید کرده اند تخفیف های ویژه بدهیم ، اگر اطلاعات اصلی خرید این مشتری در شهر قبلی در اختیار نباشد و مشتری ما در شهر جدید خرید انجام دهد به عنوان یک مشتری جدید محسوب می شود و تمامی تخفیف هایی که باید شامل وی می شد را از دست داده است. با جدا کردن Table ها از همدیگر شما می توانید مطمئن باشید داده های اصلی شما دست نخورده باقی می مانند و مشتری جدید برای اینکه بررسی شود که قبلا مشتری شما بوده است یا خیر کاملا از Table دیگر قابل استعلام می باشد چون داده های اصلی Integrity خود را حفظ کرده اند.

نکته منفی در خصوص تقسیم کردن Database ها به Table های متعدد

اما نقطه منفی در خصوص تقسیم کردن Database به Table های مختلف می تواند جمع آوری اطلاعات و قرار دادن چندین Table در کنار هم است که معمولا بصورت متناوبی اینکار انجام می شود و شما مجبور هستید برای بدست آوردن اطلاعات در قالب و ساختاری خاص Table های متعددی را در کنار هم قرار دهید ، در خصوص اینکه چگونه می توانیم چنین کاری انجام دهیم بعد ها در همین سری مقالات صحبت خواهیم کرد ، قرار دادن Table ها در کنار هم یکی از هسته های اصلی Relational Database ها می باشد ، به اینکار که قبلا هم تا حدودی اشاره کردیم در اصطلاح Join کردن Table ها می گویند که بعدها در خصوص آنها بیشتر صحبت خواهیم کرد. امروزه تقریبا همه Queryها از مجموعه ای از جداول Database گرفته می شوند.

در SQL سرور بصورت کلی سه نوع رابطه اصلی بین Table ها می توان برقرار کرد که به ترتیب شامل موارد زیر می باشند :

رابطه یک به یک یا One To One در Table های SQL سرور

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

رابطه یک به یک یا One to One در Table های SQL

رابطه یک به چند یا One To Many در Table های SQL سرور

این رابطه زمانی پیش می آید که یک رکورد در یک Table به چندین رکورد در Table های دیگر ارتباط پیدا می کند. معمولا رابطه های والد و فرزند یا Parent Child از این نوع رابطه تعریف می شوند ، برای مثال شما در یک فروشگاه ممکن است Table ای به نام دسته بندی ها یا Categories داشته باشید که دارای چندین محصول یا Product متنوع باشند ، در چنین مواقعی ممکن است یک دسته بندی دارای چندین نوع محصول باشد و رابطه در این حالت یک به چند خواهد شد. یا در مثالی دیگر ما می توانیم مشتری را داشته باشیم که چندین سفارش متنوع داشته باشد ، اینها مثال هایی از رابطه یک به چند در Database ها هستند ، این نوع رابطه مرسوم ترین و معمولترین رابطه ای است که امروزه بیشترین استفاده را در RDBMS ها دارد.

رابطه یک به چند یا One to Many در Table های SQL

رابطه چند به چند یا Many To Many در Table های SQL سرور

این رابطه زمانی پیش می آید که چندین رکورد به چندین رکورد دیگر مرتبط می شوند. ساده ترین مثالی که می توان با توجه به مثال های قبلی در حوزه فروشگاه نام برد این است که محصولات و سفارش ها می توانند با هم رابطه چند به چند داشته باشند ، یک محصول می تواند چندین بار سفارش داده شود و یک سفارش می تواند شامل چندین محصول باشد. نکته بسیار مهم در خصوص رابطه های چند به چند در Table های SQL سرور این است که SQL سرور بصورت مستقیم رابطه های چند به چند را پشتیبانی نمی کند و در نتیجه برای اینکه بتوانیم چنین رابطه ای ایجاد کنیم دو رابطه ی یک به چند بایستی ایجاد کنیم ، در چنین شرایطی ما یک Table بصورت رابط یا میانی ایجاد می کنیم که رابطه های بین محصولات و سفارش ها را بصورت یک به چند ایجاد کند. برخی اوقات به این Table میانی که برای ایجاد رابطه چند به چند استفاده می شود Join Table نیز گفته می شود.

رابطه چند به چند یا Many to Many در Table های SQL

ITPRO باشید.

نویسنده : محمد نصیری

منبع : جزیره بانک های اطلاعاتی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#رابطه_جداول_در_sql #آموزش_sql_server #آموزش_گام_به_گام_sql_سرور #عملیات_های_رابطه_ای_پایگاه_داده #آموزش_sql_سرور #پایگاه_های_داده_رابطه_ای #آموزش_گام_به_گام_query_گرفتن
عنوان
1 آموزش کوئری (Query) گرفتن از SQL قسمت 1 : معرفی SQL سرور رایگان
2 آموزش کوئری (Query) گرفتن از SQL قسمت 2 : Relational Database ها رایگان
3 آموزش کوئری (Query) گرفتن از SQL قسمت 3 : ساختار Table ها رایگان
4 آموزش کوئری (Query) گرفتن از SQL قسمت 4 : کلیدهای اصلی و فرعی رایگان
5 آموزش کوئری (Query) گرفتن از SQL قسمت 5 : رابطه بین جدول ها رایگان
6 آموزش کوئری (Query) گرفتن از SQL قسمت 7 : طراحی جدول ها رایگان
7 آموزش کوئری (Query) گرفتن از SQL قسمت 7 : طراحی ساده یک DB رایگان
8 آموزش کوئری (Query) گرفتن از SQL قسمت 8 : Normalization رایگان
9 آموزش کوئری (Query) گرفتن از SQL قسمت 9 : دستورات اولیه SQL رایگان
10 آموزش کوئری (Query) گرفتن از SQL قسمت 10 : محیط Management Studio رایگان
11 آموزش کوئری (Query) گرفتن از SQL قسمت 11 : اتصال به Database رایگان
12 آموزش کوئری (Query) گرفتن از SQL قسمت 12 : ساختار دستور SELECT رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....