PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مبانی طراحی یک پایگاه داده



~M*E*H*D*I~
2013/10/23, 05:35
http://exceliran.com/up/up/fb912cbee9321cbb53d53580e9b3ed14.jpg (http://www.exceliran.com)



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

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

~M*E*H*D*I~
2013/10/23, 05:37
http://exceliran.com/up/up/e431a390123cd640962185e63224acbb.GIF (http://www.exceliran.com)


در یک پایگاه داده به عنوان مثال اکسس ، اطلاعات در جداول (Tables ) سازماندهی می شوند، مجموعه ای از ستون ها و ردیف ها که یادآور یک شیت اکسل است. در یک پایگاه ساده ممکن است یک جدول وجود داشته باشد اما در پایگاه های بزرگتر معمولا بیش از یک جدول نیاز خواهد بود . به عنوان مثال جدولی شامل مشخصات محصولات ، جدولی شامل جزئیات سفارشات و جدول دیگری شامل مشخصات مشتری ها ،هر جدول از سطرها و ستون هایی تشکیل شده است که به هر سطر رکورد و به هر ستون فیلد می گویند ، هر رکورد امکان سازماندهی اطلاعات مرتبط به هم در مورد یک چیز را می دهد و هر فیلد آیتم واحدی از اطلاعات است که این آیتم برای همه رکورها وجود دارد به عنوان مثال در جدول محصولات هر رکورد، اطلاعات یک محصول را نگه می دارد و هر فیلد شامل نوعی از اطلاعات در مورد تمامی محصولات است به عنوان مثال وزن محصولات .

Amin_D
2013/10/23, 05:38
با سلام
تشکر بحث خیلی خوبی رو شروع کردین .

~M*E*H*D*I~
2013/10/23, 05:43
http://exceliran.com/up/up/c43531a444bac8eb9dd3aa22d58b9302.gif (http://www.exceliran.com)


اصل اول در طراحی یک پایگاه داده کارامد این است که اطلاعات تکراری وجود ندارد (Redundant Data ) ، اطلاعات تکراری موجب اتلاف فضا و بروز اشتباهات و تناقضات می شود ، اصل دوم صحت و کامل بودن اطلاعات است ، اطلاعات غلط گزارش های غلط و در نهایت نتایج غلط را در پی خواهد داشت ، تصمیم گیری منتج از این اطلاعات مطمئنا صحیح نخواهد بود.

بطور خلاصه یک پایگاه داده با طراحی مناسب ویژگی های زیر را دارد.

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

~M*E*H*D*I~
2013/10/23, 05:45
با سلام
تشکر بحث خیلی خوبی رو شروع کردین .

خواهش می کنم ، با توجه به اینکه این مطالب تالیفی و ترجمه ای هست ، خیلی خوبه با نشرش تو سایر وب سایت ها انجمن رو معرفی کنیم و سطحش رو بالا ببریم:)

~M*E*H*D*I~
2013/10/23, 05:53
http://chakane.persiangig.com/image/master-database-binary-cube.png



پروسه طراحی شامل گام های زیر است:


تعیین هدف از طراحی پایگاه داده



این گام تعیین کننده نحوه اجرای گام های بعدی است .



جمع آوری و سازماندهی اطلاعات مورد نیاز



جمع آوری همه انواع اطلاعاتی که به آن نیاز دارید و می بایست در پایگاه ثبت شود به عنوان مثال نام محصولات ، شماره سفارش و..



تقسیم اطلاعات در جداول



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



انتخاب آیتم های تشکیل دهنده ستون ها)فیلدها)



تصمیم گیری در این باره که چه آیتم هایی در جداول ذخیره خواهد شد، هر آیتم تشکیل دهنده یک فیلد است و در یک جدول به صورت یک ستون نمایش داده خواهد شد به عنوان مثال در جدولی با موضوع کارمندان، فیلد هایی مانند نام ، نام خانوادگی ، تاریخ استخدام و... مد نظر خواهد بود.



تعیین کلید اولیه(Primary key )



برای هر جدول یک کلید اولیه تعیین کنید کلید اولیه ستونی است حاوی کد های منحصر به فرد که هر ردیف را از ردیف های دیگر متمایز می کند به عنوان مثال شماره پرسنلی در جدول اطلاعات کارمندان یا شماره سفارش در جدول سفارشات.



تنظیم روابط بین جداول



تعیین ارتباط بین جداول یعنی کدام جدول با دیگری در رابطه است و در صورت لزوم اضافه کردن فیلد و یا یک جدول جدید برای روشن کردن این ارتباط



تصحیح کردن پروژه



پروژه و طرح خود را برای یافتن خطاها آنالیز کنید ، داده های نمونه را در جداول خود ذخیره کنید ببینید آنچه از نتایج نشان می دهد با آنچه طراحی کرده و نیاز دارید تطابق دارد یا خیر



بکار گیری قوانین نرمال سازی



قوانین نرمال سازی داده ها را بکار گیرید تا متوجه شوید جداول از ساختار مناسبی برخوردار هستند یا خیر؟ و جداول با نیاز های شما تطابق دارند؟

Nima
2013/10/23, 06:08
با تشکر از جناب اقای وطن پرست به خاطر ارائه این مطالب کاربردی.

اگه میشه بحث رو به سمت استفاده از اکسل به عنوان یک پایگاه داده پیش ببریم، گرچه شاید در نگاه اول اکسل جزو برنامه های معروف ایجاد پایگاه داده مثل Oracle,SQL, access و... به چشم نیاد .

با تشکر

~M*E*H*D*I~
2013/10/23, 07:03
http://chakane.persiangig.com/image/shutterstock_69124924%5B1%5D.JPG



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

~M*E*H*D*I~
2013/10/24, 06:40
http://chakane.persiangig.com/image/inf.jpg

برای جمع آوری و ساماندهی اطلاعات از اطلاعات موجود شروع کنید به عنوان مثال ممکن است اطلاعات سفارشات خرید را در یک دفتر کل ثبت کرده باشید و یا اطلاعات فروشندگان را در یک برگ فرم ثبت کرده باشید این اسناد را جمع آوری کنید و اطلاعاتی را که نشان می دهند لیست کنید (به عنوان مثال هر کادری که در یک فرم پر کرده اید ) اگر اینگونه اطلاعات وجود ندارد تصور کنید به عنوان مثال می خواهید فرمی برای مشتریان طراحی کنید ، چه چیزهایی لازم دارید؟ چه اطلاعاتی برای پر کردن کادرهای یک فرم نیاز دارید؟ آیتم های مورد نیاز را روشن کرده و لیست کنید ، فرض کنید در حال حاضر اطلاعات مشتریان را در ایندکس کارت نگهداری می کنید ، هر کدام از این کارت ها اطلاعاتی از مشتری نشان می دهند مثلا نام ، شماره تلفن ، شهر ، کد پستی و ... هر کدام از این آیتم ها یک ستون از جدول اطلاعات مشتریان را تشکیل خواهد داد .

همانطور که این لیست را آماده می کنید در مورد کامل بودن آن در ابتدای کار نگران نباشید، در عوض هر آیتمی که به ذهن می رسد لیست کنید . اگر فرد دیگری از این اطلاعات استفاده خواهد کرد از ایده های او نیز بهره بگیرید ، بعد می توان این لیست را دقیق تر کنید.

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

فکر کردن به گزارشات و نامه های مورد نیاز به شما کمک می کند که لیست فیلد های مورد نیاز در پایگاه داده را تکمیل کند برای مثال فرض کنید به صورت دوره ای برای مشتریان خود ایمیل ارسال می کنید و لیستی از مشتریانی که ایمیل دریافت می کنند نیاز دارید بنابراین فیلدی برای مشخص شدن این موضوع نیاز دارد پس فیلد دریافت ایمیل با گزینه های بله و خیر را به پایگاه خود اضافه می کنید.

با طراحی گزارش در ذهن خود به آیتم دریافت ایمیل پی بردید پس نیاز به فیلدی نیز برای ثبت آدرس ایمیل نیاز خواهید داشت پس فیلد ایمیل هم به پایگاه شما اضافه خواهد شد.

ساختن این نمونه های اولیه از گزارشات و فرم ها و تعیین آیتم های مورد نیاز خود بر اساس آنها حس خوبی را ایجاد خواهد کرد مانند حس یک معمار از بنای مرحله به مرحله یک ساختمان ، مثال های بیشتری را بررسی کنیم ، در ایمیل دوره ای که برای مشتریان ارسال می کنید عبارت " سلام آقای....." را می خواهید داشته باشید مسلما نرم افزار قادر به تشخیص زن یا مرد بودن مشتری بر اساس نامش نخواهد بود پس فیلدی برای تعیین جنسیت نیاز دارید یا میخواهید نامه به صورت" آقای علی احمدی عزیز " شروع شود از این عبارت سه فیلد را می توان استخراج کرد فیلد جنسیت ، فیلد نام و فیلد نام خانوادگی.

~M*E*H*D*I~
2013/10/24, 08:16
http://chakane.persiangig.com/image/database-search.jpg


برای تعیین جداول بر اساس موضوع و ماهیت تصمیم گیری کنید . به عنوان مثال بعد از جمع آوری و ساماندهی اطلاعات لیست اولیه برای جداول می تواند مانند تصویر زیر باشد.



http://exceliran.com/up/up/c43531a444bac8eb9dd3aa22d58b9302.gif (http://www.exceliran.com)


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



http://exceliran.com/up/up/b4fa72b98c4666ccaf1f602c401aad32.gif (http://www.exceliran.com)


در این نمونه هر ردیف شامل نام محصول و تامین کننده آن است . محصولات زیادی وجود دارد که یک تامین کننده دارند و این باعث می شود نام و آدرس تامین کننده بارها و بارها تکرار شود و فضای زیادی از حافظه شما اشغال خواهد شد پس ایده بهتر آن است که این دو مفهوم یعنی محصولات و تامین کنندگان جدا شده و سپس به یکدیگر مرتبط گردند.

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

حال فرض کنید برای محصول A تنها یک تامین کننده دارید . میخواهید محصول را حذف کنید اما اطلاعات تامین کننده را داشته باشید ، در ایده اول با حذف محصول اطلاعات تامین کننده نیز حذف خواهد شد، با تعیین دو مفهوم یعنی تامین کننده و محصول و تجزیه آن به دو جدول با حذف یک مفهوم تنها همان حذف می شود نه دیگری.

نکته دیگر در تعیین آیتم های تعیین کننده ستون ها ، می بایست آیتم ها در خصوص مفهوم همان جدول باشد برای مثال آدرس تامین کننده در ارتباط با جدول تامین کنندگان است و نمی بایست در جدول محصولات این آیتم وجود داشته باشد.

~M*E*H*D*I~
2013/10/26, 06:41
http://chakane.persiangig.com/image/database.gif

برای تعیین ستون ها در یک جدول باید تصمیم بگیرید بر اساس نوع موضوع جدول به چه اطلاعاتی نیاز دارید به عنوان مثال برای جدول مشتریان ستون های نام، نام خانوادگی، آدرس، شهر، استان، آدرس ایمیل و تایید ارسال ایمیل برای شروع لیست ستون ها مناسب خواهد بود . هر رکورد جدول شامل مجموعه اطلاعات ستون ها خواهد بود و هر رکورد اطلاعات مختص یک مشتری است.

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

در اکثر موارد نمی بایست در جداول محاسبات را واردکنید، بجای آن می توانید در گزارشات و نتایج این محاسبات را انجام دهید. به عنوان مثال در گزارش سفارشات مجموع واحد سفارش هر دسته از محصولات نشان داده شده است با این حال هیچ ستونی به عنوان مجموع واحد ها در جدول سفارشات پایگاه داده وجود ندارد در عوض ستونی جهت نمایش واحد سفارش وجود خواهد داشت که می توان در هر بار پرینت گزارش سفارش مجموع واحد سفارش را محاسبه نمود.


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



http://exceliran.com/up/up/bc23e4e0212169a68bdc0d6602dfb4c5.gif (http://www.exceliran.com)


هنگامی لیست فیلد ها را بازبینی و اصلاح کردید آنگاه می توانید نسبت به انتخاب primary key اقدام کنید.

~M*E*H*D*I~
2013/10/26, 06:52
http://chakane.persiangig.com/image/Primary%20Security%20Key.jpg


هر جدول در پایگاه داده می بایست دارای فیلد یا فیلد هایی باشد که هر رکورد را از سایر رکورد ها متمایز کند که اغلب یک عدد منحصر به فرد این عمل را انجام می دهد مانند شماره پرسنلی یک کارمند با شماره سریال یک محصول در اصطلاح فنی به این اطلاعات primary key می گویند ، در اکسس ستون کلید اولیه به صورت پیش فرض تعیین می شود و برای وابسته کردن جداول یک پایگاه داده مورد استفاده قرار می گیرد .

اگر اطلاعات شما شامل ستونی از داده های منحصر به فرد بود مثلا شماره سریال محصول در این صورت می توانید از این ستون به عنوان ستون primary key استفاده کنید نکته اساسی یونیک بودن داده است شما نمی توانید در ستون کلید اولیه از داده های تکراری استفاده کنید به عنوان مثال نام افراد نمی تواند استفاده شود چون همواره امکان هم نام بودن افراد وجود دارد .
نکته دیگر اینکه کلید اولیه می بایست ارقامی مشخص باشند به عنوان مثال یک عبارت تکست کلید اولیه مناسبی نیست چون کوچکترین تغییر آنرا غیرقابل استفاده خواهد نمود . در یک پایگاه داده با جداول متعدد یک کلید اولیه می تواند در جدول دیگر یک مرجع باشد لذا هر تغییری در کلید اولیه باید در هر جایی که از آن استفاده شده اعمال گردد ، استفاده از یک کلید اولیه غیر قابل تغییر امکان بروز مشکل عدم هماهنگی با سایر جداول را کاهش می دهد .
اغلب یک شماره منحصر به فرد دلخواه به عنوان کلید اولیه استفاده می شود برای مثال شما ممکن است برای هر سفارش شماره سفارش منحصر به فرد اختصاص دهید تنها هدف استفاده از این شماره شناسایی یک سفارش که یک بار تخصیص یافته و تغییر نخواهد کرد.
اگر برای کلید اولیه ستونی در اختیار ندارید می توانید ستونی حاوی اعداد اتوماتیک برای این کار در نظر بگیرید به عنوان مثال در اکسس شماره ردیف ها به عنوان کلید اولیه تخصیص داده می شوند این نوع داده ها حاوی مفهومی نیستند (factless ) و برای استفاده در ستون primary key ایده آل هستند چون امکان در آنها بسیار کم است ، گفته شد کلید اولیه می بایست منحصر به فرد باشد به عنوان مثال شماره تلفن یک فرد می تواند منحصر به فرد باشد اما حاوی مفهوم است و قابل تغییر لذا گزینه مناسبی برای کلید اولیه نخواهد بود .


http://exceliran.com/up/up/afb10a12705949848cef658f58d63f55.gif (http://www.exceliran.com)

در ستون 1 اعداد اتوماتیک به عنوان کلید اصلی استفاده شده اند

~M*E*H*D*I~
2013/10/27, 14:03
http://chakane.persiangig.com/image/PuzzlePiece-300x214.jpg


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

http://chakane.persiangig.com/image/ZA010007333.gif



اطلاعات این بخش از جدول مشتری ها می آید
اطلاعات این بخش از جدول کارمندان می آید
میزان سفارش از جدول سفارشات استخراج می شود
... جدول محصولات...
...جدول جزئیات سفارشات...


به عنوان مثال اکسس دیتا بیسی بر پایه سيستم مديريت پايگاه داده هاي رابطه اي (RDBMS: Relational Database Management System) طراحی شده است.در پایگاه داده های رابطه ای اطلاعات در جدوال موضوعی مجزا ذخیر شده سپس بر اساس روابط فی مابین در جدول دیگری مرتبط می گردند.

ایجاد ارتباط یک به چند

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


http://exceliran.com/up/up/090fb395a5ea64f869f2c0a8222510bf.gif (http://www.exceliran.com)


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


http://chakane.persiangig.com/image/ZA010007270.gif

در واقع اگر مطمئن نیستید که در جداول یک ستون مشترک به اشتراک بگذارید ایجاد یک ارتباط یک به چند شما را مطمئن خواهد کرد که دو جدول در ارتباط با هم هستند .

ایجاد ارتباط چند به چند

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


http://chakane.persiangig.com/image/ZA001233060.gif


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




بعد از تشکیل جدول جزئیات سفارش مجموعه جداول در پایگاه داده به شکل زیر خواهد بود.


http://chakane.persiangig.com/image/ZA0100072712.gif

ایجاد ارتباط یک به یک

نوع دیگری از ارتباط بین جداول ارتباط یک به یک است . برای مثال فرض کنید می خواهید برخی اطلاعات تکمیلی را که به ندرت مورد نیاز است و یا محصولات کمی دارای آن هستند ثبت کنید ، چون اغلب به این اطلاعات نیاز ندارید و همچنین همه محصولات به این اطلاعات نیاز ندارند برای جلوگیری از ایجاد ستونی با ردیف های خالی زیاد جدول دیگر ی تشکیل می دهید ، در این جدول همانند جدول محصولات ستون primary key را بر اساس ستون جدول محصولات تشکیل داده و اطلاعات محصولاتی که مد نظر دارید در آن وارد می کنید . ارتباط بین این جدول تکمیلی و جدول محصولات یک ارتباط یک به یک خواهد بود . هر محصول در جدول محصولات دارای یک رکورد در جدول تکمیلی خواهد بود و ستون مشترک PRIMARY KEY برقرار کننده این ارتباط است .

در صورت نیاز به یک ارتباط یک به یک و تشخیص آن بررسی کنید که می توان اطلاعات دو جدول را در یک جدول قرار داد؟ اگر شما به دلایلی مثلا جلوگیری از وجود ردیف های خالی فراوان جدول دیگری را تشکیل دادید حالات زیر را در نظر بگیرید :

اگر دو جدول دارای موضوع یکسانی بودند در این صورت با اشتراک ستون PRIMARY KEY می توانید ارتباط بین دو جدول را برقرار کنید.
اگر دو جدول دارای موضوعات متفاوتی بودند در این صورت به دلخواه یکی از جداول را انتخاب کرده و با وارد کردن ستون کلید اولیه جدول دیگر به عنوان کلید خارجی ارتباط به دو جدول را برقرار سازید.

تعیین روابط بین جداول به شما کمک می کند تا اطمینان حاصل کنید که جداول وستون های صحیح دارید، هنگامی که یک ارتباط یک به چند یا یک به یک دارید با به اشتراک گذاری یک ستون کلید اولیه می توانید ارتباط را برقرار سازید و در صورت وجود یک ارتباط چند به چند از طریق ایجاد جدول سومی این ارتباط برقرار می شود.

~M*E*H*D*I~
2013/10/28, 13:11
http://chakane.persiangig.com/image/logo_refine.jpg



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

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

اصلاح جدول محصولات

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

جدول رده بندی و محصولات ارتباط یک به چند خواهند داشت به این صورت که یک رده بندی می تواند متعلق به چند محصول باشد.
هنگامی بازبینی جداول پایگاه به دنبال گروه های تکراری باشید برای مثال جدولی شامل ستون های زیر را در نظر بگیرید:



Product ID
Name
Product ID1
Name1
Product ID2
Name2
Product ID3
Name3

می بینید که ماهیت فیلد ها یکسان است وتنها با اضافه شدن یک عدد به انتهای نام از یکدیگر متمایز شده اند در این صورت می بایست جدوا خود را مجددا طراحی کنید.
طراحی اینچنینی چندین نقص دارد ، در ابتدا اینکه شما مجبورید یک حد نهایی برای تعداد محصولات خود تعریف کنید و به محض اینکه از این حد گذشتید یک گروه جدید تعریف کنید و این از وظایف اصلی مدیر سیستم است.
در صورت وجود گروه های تکراری و مشاهده آن حین بازبینی که به صورت چشمی هم متوجه خواهید شد جدول را به دو جدول تقسیم کنید در مثال بالا بهتر است از دو جدول یکی برای تامین کنندگان و دیگری برای محصولات استفاده کرده و از طریق SUPPLIERT ID آنها را به هم لینک کنید.
دومین نقص اینکه تامین کنندگانی که محصولات کمتری از حد نهایی شما دارند فضای زیادی از پایگاه را هدر خواهد داد. زیرا ستون های اضافه خالی خواهد ماند . نقص جدی دیگری که این نوع طراحی دارد کارهای دشواری است که باید صورت گیرد به عنوان مثال برای مرتب کردن بر اساس نام یا PRODUCT ID مشکلات زیادی خواهید داشت.

~M*E*H*D*I~
2013/10/29, 12:24
http://chakane.persiangig.com/image/images.jpg

در گام آخر طراحی پایگاه داده می بایست قوانین نرمال سازی را اعمال کنید ، این قوانین برای بررسی اینکه پایگاه داده ساختار و اسکلت بندی صحیحی داشته باشند استفاده می شود.این گام نرمال سازی (normalization) نام دارد.
نرمال سازی پس از آنکه همه جداول و آیتم ها مورد بازبینی قرار گرفت و در طرح اولیه وارد شد فرآیندی مفید خواهد بود ، این کار باعث می شود اطمینان حاصل کنید که اطلاعات شما به نحو مناسبی در بین جداول تقسیم شده اند. البته نرمال سازی نمی تواند این اطمینان را حاصل کند که شما همه اطلاعات صحیح برای شروع کار را دارید یا خیر.
اعمال قوانین نرمال سازی در هر مرحله این اطمینان را حاصل میکند که طراحی ما با آنچه با نام فرم های نرمال می شناسیم تطابق دارد. 5 فرم نرمال سازی وجود دارد که سه فرم اول برای همه پایگاه های داده مشترک است.

فرم اول نرمال

بر اساس فرم اول از تقاطع یک سطر و یک ستون باید یک مقدار به دست آید به عنوان مثال فیلدی برای قیمت داشته باشید اما از تقاطع ردیف وستون مربوطه بیش از یک قیمت به دست آید بنابراین هر سلول از جدول مربوطه در بردارنده یک مقدار مشخص خواهد بود.

فرم دوم نرمال

بر اساس فرم دوم نرمال هر ستون غیر از ستون کلید اولیه باید به طور کامل به ستون کلید اولیه وابسته باشد نه فقط بخشی از کلید این قائده زمانی است که شما از دو کلید اولیه بهره می برید مانند جدول جزئیات سفارش . جدول زیر را فرض کنید


Order ID (primary key)
Product ID (primary key)
Product Name

این طراحی ناقض فرم دوم است چون نام محصول به product id وابسته است و به order id وابستگی ندارد لذا باید نام محصول را حذف کرده و آن را در جدول محصولات وارد کنید.

فرم سوم نرمال

در فرم سوم نرمال تمام ستون های غیر کلید به ستون کلید وابسته هستند اما از یکدیگر مستقل خواهند بود ، به عبارت دیگر هر ستون غیر کلید فقط و تنها فقط به ستون primary key وابستگی دارد . فیلد های زیر را در نظر بگیرید


ProductID (primary key)
Name
SRP
Discount

فرض کنید ستون تخفیف (discount) به ستون قیمت خرده فروشی (srp) وابسته باشد ، این ناقض فرم سوم است چون علاوه بر وابستگی به ستون کلید اولیه به ستون دیگری نیز وابسته است ، استقلال ستون های به این معنی است که بتوانید بدون تاثیر گذاری یک ستون به ستون دیگر مقادیر آن را تغییر دهید .در این مثال اگر قیمت خرده فروشی تغییر کند میزان تخفیف نیز تغییر خواهد کرد پس ناقض فرم سوم است در این حالت یا ستون تخفیف را باید از طریق محاسبه در گزارش بدست آورید و یا اگر امکان پذیر نبود جدول دیگری را تشکیل دهید.

تصویر زیر به طور خلاصه آنچه در این مطالب گفته شد بازگو می کند ، امید است این مطلب مورد استفاده قرار گیرد.


http://chakane.persiangig.com/image/normalization.gif

~M*E*H*D*I~
2014/05/03, 20:20
جزوه مطالب مطروحه رو متونید دانلود کنید

tinarahmati25
2015/06/03, 18:38
تشکر جناب وطن پرست عالی بود موفق باشید