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

و

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

آموزش کوئری (Query) گرفتن از SQL قسمت 7 : طراحی ساده یک DB

خوب در مقاله قبلی با مفاهیم اولیه طراحی Database ها آشنا شدیم و متوجه شدیم که فرآید Normalization به چه منظور انجام می شود اما تا نتوانید این مفاهیم را بصورت ملموس و عملی کار کنید همیشه برای شما ابهام وجود دارد. بهترین راهکار از نظر بنده و بسیاری دیگر از دوستان برای یادگیری بهتر بحث Normalization طراحی کردن یک سناریوی فرضی و جلو بردن درس بر اساس این سناریو است. سناریوی ها به این شکل است که انجمن تخصصی فناوری اطلاعات ایران دارای یک فروشگاه بین المللی است که در سراسر ایران و جهان دارای شعبه است و شما می خواهید برای Database این مجموعه ضمن طراحی عملیات Normalization را نیز انجام دهید. به این دلیل از فروشگاه معمولا به عنوان سناریو استفاده می شود زیرا ملموسترین حالت برای شما عزیزان برای انجام فرآیند های خرید و فروش است و حداقل یکبار در روز شما این فرآیند را انجام می دهید. خوب در این سناریو ما می خواهیم سفارش های مشتریان ( Customer Orders ) را در Database ذخیره کنیم ، یک مشتری قاعدتا می تواند در هر سیستم فروشی چندین سفارش ( Order ) داشته باشد ، یک سفارش ( Order ) می تواند شامل چندین کالا ( Product ) باشد و در نهایت یک کالا ( Product) می تواند چندین بار سفارش ( Order ) داده شود. دقت کنید برای سناریو های واقعی هیچوقت از زبان فارسی استفاده نکنید ، قاعدتا چیزی هم به نام فینگلیش و پینگلیش هم نخواهیم داشت بنابراین حداقل عناوین اصلی را به زبان انگلیسی بنویسید تا طراحی زیباتری داشته باشید. خوب به جدول اولیه زیر یا Table اولیه ما دقت کنید :

طراحی دیتابیس در SQL سرور انجام سطح یک Normalization

گام اول : مجتمع کردن موجودیت ها

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

خوب همانطور که مشاهده می کنید در اولین Column ما تاریخ سفارش ( Order Date ) را قرار داده ایم تا اطلاعات مربوط به زمان و یا تاریخ سفارش در آن ذخیره شود ، در دومین Column شما نام مشتری ( Customer ) را مشاهده می کنید که اطلاعات هویتی اشخاصی می باشد که از شما خرید می کنند . سومین Column مربوط به نوع کالا یا محصول اول ( Product ) سفارش داده شده است ، چهارمین Column تعداد سفارش های مربوط به کالا یا محصول اول را نمایش می دهد که ما به عنوان Quantity 1 آن را نمایش داده ایم ، به همین ترتیب پنجمین Column نوع محصول و کالای دوم و ششمین Column تعداد سفارش محصول دوم را به شما نمایش می دهد. برای مثال در جدول بالا مشاهده می کنید که مهندس احمدی عزیز برای بچه خود در تاریخ 1//1//1392 20 عدد پوشک بچه My Baby در وهله اول و تعداد 4 عدد پوشک بچه Molfix در وهله دوم سفارش داده است ( بسوزه پدر بچه داری D: ) . خوب تا اینجای کار مشکلی نیست ، شاید بتوانید نرم افزارهایی را پیدا کنید که با همین ساختار و فقط با شناسایی موجودیت ها Database خود را آماده کار می کنند اما ما می خواهیم اصولی پیش برویم. خوب اگر یک مشتری بخواهد 3 درخواست کالای متفاوت را در لحظه داشته باشد چه اتفاقی می افتد ؟ یا شاید چهار یا شاید پنج و یا تعداد بیشتری درخواست در لحظه ! سئوالی که در اینجا یک طراح Database از خود می پرسد این است که در نهایت چه تعداد Column باید ایجاد شود ؟ کی باید این فرآیند متوقف شود ؟ چه مقدار فضای ذخیره اطلاعات نیاز خواهد بود ؟ سرعت کار در نهایت به چه اندازه خواهد شد ؟ خوب در اینجاست که ما با پرسیدن این سئوالات به مشکلات اولیه پی خواهیم برد. اولین مشکل این است که در Table اولیه اطلاعات بسیار زیادی تکراری خواهند بود.

گام دوم : بررسی مشکلات مجتمع کردن موجودیت ها و ارائه راهکار اولیه

چه تعداد Column باید ایجاد شود ؟ این همانجایی است که فرآیند Normalization شروع به کار می کند ، فرآیند Normalization در واقع یک راهنما برای بهینه سازی طراحی Database های ما می باشد. سئوالاتی که در انتهای پاراگراف قبلی با هم شنیدیم همه و همه در فرآیند Normalization به پاسخ خود خواهند رسید.اولین فرم یا سطح Normalization این است که شما یک Table ایجاد کنید که در آن گروه ها یا Group های تکراری وجود نداشته باشد ، در واقع شما نباید در سطح Column های خود داده های تکراری داشته باشید. بنابراین ما در اولین مرحله یک Table ایجاد می کنیم که در آن Column های تکراری وجود نداشته باشد. اما اینکار چگونه انجام می شود ؟ پاسخ ساده است ، در این مرحله شما Table اولیه را به دو Table به نام های Orders یا سفارشات و محصولات یا Products تفکیک می کنید.خوب همانطور که در تصویر پایین مشاهده می کنید ما اطلاعات مربوط به Products یا محصولات را از درون Orders یا سفارشات خارج کردیم و یک Table جدید ایجاد کردیم ، حالا کاری که باید انجام شود این است که اطلاعات مربوط به Order ها باید به اطلاعات موجود در Products دسترسی داشته باشند ، اما نکته در اینجاست که این اتصال یا بهتر بگوییم ارتباط چگونه ایجاد می شود ؟

طراحی بانک اطلاعاتی در SQL سرور

گام سوم : ایجاد رابطه بین Table های Orders و Products ( سطح اول Normalization )

همانطور که در مرحله قبلی مشاهده کردید ما Table اولیه را بررسی کردیم و با توجه به وجود داده های تکراری ، یک Table دیگر به نام Products را اضافه کردیم و همه اطلاعات مرتبط با Products ها در آن قرار دادیم. در این Table های جدیدی ایجاد شده شما چند Column جدید مشاهده می کنید ، Column ای به نام Order ID به Table ها اضافه شده است. همانطور که در جداول بالا مشاهده می کنید جدول Orders دارای چند Column به نامهای Order ID یا شناسه سفارش ، Order Date یا تاریخ سفارش و Customer یا نام مشتری می باشد ، ما علاوه بر داده های اولیه ، در مرحله اول Column ای به نام Order ID را هم در جدول Orders و هم در جدول Products داریم ، با توجه به اینکه رابطه بین Table ها از طریق کلید خارجی یا Foreign Key انجام می شود ، ابتدا برای هر یک از Table ها ما یک primary Key تعریف می کنیم ، در مثال بالا Order ID کلید اصلی یا Primary Key ما می باشد که می توانیم از طریق این کلید بصورت منحصر به فرد هر سفارش را شناسایی کنیم. اما این ساختار جدول Orders بود ، جدول دوم که جدول Products می باشد همه اطلاعات مورد نیاز در خصوص کالاهای سفارشی را در خود نگه می دارد ، اگر به این جدول نیز توجه کنید خواهید دید که یک Column مشابه چیزی که در جدول Orders وجود دارد به نام Order ID قرار گرفته است ، شما برای برقراری رابطه بین Orders و Products از این Column می توانید به عنوان Foreign Key برای ربط دادن دو جدول استفاده کنید. این Column که به نام Order ID می باشد به Order ID ای که در جدول Orders وجود دارد اشاره خواهد کرد.

طراحی کردن دیتابیس در SQL سرور انجام سطح دوم Normalizat

تا اینجای کار مشکلی نیست اما قانون Normalization به ما می گوید که تا جاییکه ممکن است نبایستی داده تکراری وجود داشته باشد اما در این سناریو اگر در جدول Products دقت کنید مشاهده می کنید که تعدد و تکرار رکوردها به وضوح قابل مشاهده است ، در واقع هر باری که مشتری شما یک سفارش در سیستم ثبت کند یکبار اطلاعات مجددا در جدول Products درج می شود ، به جدول بالا نگاه کنید در اولین نگاه متوجه می شوید که کاربر Mohammad Nasiri دوبار به عنوان سفارش Product ها در لیست Product Table ذخیره شده است و این به معنای زیاد شدن داده های تکراری به مرور زمان خواهد شد. البته این تازه یک مثال ساده در خصوص این سناریو است ، در سناریو های واقعی شما برای جدول Products خود ممکن است اطلاعات دیگری از قبیل آدرس ایمیل ، شماره تلفن و بسیاری دیگر از موارد را داشته باشید اما هر بار این داده ها بصورت تکراری در این جدول درج خواهند شد که این مورد عکس قانون Normalization می باشد. خوب ما همچنان داده های تکراری در مجموعه خواهیم داشت ! راهکار چیست ؟ این دقیقا همان زمانی است که Second Level Normalization یا Normalization سطح دوم شروع به کار می کند.

گام چهارم : ایجاد Table ای به نام Customers ( سطح دوم Normalization )

خوب در مرحله قبلی توجه کردید که Table ای که به نام Orders وجود دارد دارای تکرار رکورد Customers خواهد شد ، برای اینکه بتوانیم این دادها های تکراری مربوط به نام مشتری را از این مجموعه حذف کنیم نیازمند ایجاد و طراحی یک Table دیگر به نام Customers می باشیم که اطلاعات مشتریان یا Customers ما را در خود نگه می دارد . این جدول همانطور که در شکل زیر نیز مشاهده می کنید دارای یک رابطه One TO Many می باشد . هر مشتری می تواند چندین Order و هر Order می بایست توان سفارش داده شدن بسیاری را داشته باشد. این رابطه بایستی بین Products و Orders ایجاد شود که یک رابطه چند به چند یا Many TO Many می باشد بدین معنی که هر Products می تواند چندین بار Order داده شود و هر Order نیز می تواند شامل چندین Products باشد. خوب ایجاد کردن Table ای به نام Customers در واقع Second Normalization Form یا حالت دوم Normalization می باشد ، ما هنوز ارتباط چند به چند بین Orders و Products را ایجاد نکرده ایم ، اگر به خاطر داشته باشید گفتیم که SQL سرور توانایی ایجاد رابطه های چند به چند بصورت مستقیم را ندارد و می بایست این ارتباط از طریق یک Table میانی انجام شود که به Join Table معروف است ، دقت کنید در مرحله بعدی ما Join Table را ایجاد می کنیم که مشخصات کامل سفارش ها را در خود نگه دارد.

طراحی بانک های اطلاعات در SQL سرور 2012

در مقاله بعدی با هم مرحله سوم Normalization را تکمیل می کنیم و Table میانی که الان عنوان کردیم را با هم خواهیم ساخت و به سراغ مشکلات احتمالی نهایی و نکاتی که در خصوص این طراحی باید در نظر بگیرید خواهیم پرداخت. در نهایت طرح جامعی که ایجاد کرده ایم را در کنار هم قرار داده و به بررسی نهایی آن می پردازیم. ITPRO باشید.

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

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

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

#normalization_چیست #آموزش_گام_به_گام_sql_سرور #آموزش_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
2 نظر
حسین احمدی

چیزی بهتر از My Baby و Molfix واسه من پیدا نکردی؟!!! :دی

ایشاالله نوبت خودت بشه عزیزم. ولی خیلی خوب بود...

ndr053

سلام و ممنون بابت آموزشتون

فکر کنم شکل آخر توی قسمت Orders و ستون Customers orders اشتباهی شده

ما 4 مشتری داریم اما اونجا تا شماره 5 رفته و ظاهراً order id شماره 3 و 4 یکی هستش

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

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