Transcript dbSession11

‫جلسه يازدهم‬
‫نرمال سازی‬
‫قسمت دوم‬
‫انچه در اين جلسه مي خوانيد‪:‬‬
‫‪ )I‬تبديل جداول غیر نرمال به صورتهاي نرمال اصلی‬
‫انچه در اين جلسه مي خوانيد‪:‬‬
‫‪ )II‬نوشتن دستورات ‪ SQL‬در ‪.Net‬‬
‫ اجرای دستورات ‪ Insert‬و ‪ Update‬و ‪Delete‬‬‫‪ -‬نحوه ذخيره و بازیابی فایل در ‪DB‬‬
‫نرمال سازي رابطهها‬
‫• يعني شكستن يك رابطه غير نرمال به چند رابطه كوچك تر با هدف مقابله با‪:‬‬
‫•افزونگی داده (‪)redundancy‬‬
‫• انومالي عمليات درج‪ ،‬حذف و بهنگامسازي‬
‫• وجود مقادير زياد ‪Null‬‬
‫فرم نرمال ‪1NF‬‬
‫•‬
‫جدولي در فرم نرمال ‪ 1NF‬است كه هيچ فيلد مركب نداشته‬
‫باشد‪.‬‬
‫•‬
‫از آنجا كه هيچيك از نرم افزارهاي بانك اطالعات رابطه اي‬
‫(مانند ‪ Sql Server ،Access‬و ‪ )...‬اجازه تعريف فيلدهاي‬
‫چندمقداري را نمي دهند‪ ،‬پس هر جدولي كه ما می سازيم می‬
‫دانيم که حداقل ‪ 1NF‬هست‪.‬‬
‫فرم نرمال ‪2NF‬‬
‫•‬
‫جدولي در فرم نرمال ‪ 2NF‬است كه‬
‫–‬
‫–‬
‫•‬
‫اوال ‪ 1NF‬باشد‪.‬‬
‫ثانيا تمام فيلدهاي غير كليد اصلي با كليد اصلي وابستگي تابعي كامل‬
‫داشته باشند‪.‬‬
‫(يعنی فيلدها به اجزای تشکيل دهنده کليد اصلی وابسته نباشند)‬
‫اگر کليد اصلی يک جدول ترکيبی نباشد (يک فيلد تک باشد)‪،‬‬
‫آن جدول حتما ‪ 2NF‬هم هست‪.‬‬
‫مثال‪:‬‬
‫•‬
‫فرض كنيم نمودار وابستگيها در جدول )‪R(A,B,C,D,E‬‬
‫بصورت زير باشد‪.‬‬
‫‪E‬‬
‫•‬
‫•‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫مشخص است كه كليد اصلي جدول )‪ (A,B‬است‪.‬‬
‫تنها فيلدي كه وابستگي آن به كليد ‪ ،‬كامل نيست ‪ D‬است‪ .‬پس‬
‫‪ D‬بايد از اين جدول جدا شود‪.‬‬
‫روش تبديل جدول از فرم ‪ 1NF‬به فرم ‪2NF‬‬
‫• جدول را بصورت زير مي شكنيم‪:‬‬
‫• فيلدهاي ي را كه به اجزائي از كليد اصلي وابسته هستند را از جدول جدا‬
‫كرده‪ ،‬به همراه ان اجزا در يك جدول قرار مي دهيم‪.‬‬
‫• كل كليد اصلي به همراه ساير فيلدها در جدول ديگر‬
‫مثال‪ :‬تبديل جدول مثال قبل به فرم ‪2NF‬‬
‫‪A B C D E‬‬
‫‪C‬‬
‫‪D‬‬
‫‪E‬‬
‫‪A‬‬
‫‪B‬‬
‫‪A B C E‬‬
‫‪E‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫ديگر در هيچيك از دو جدول‪ ،‬وابستگي تابعي غير كامل بين فيلدها با كليد اصلي نداريم‪.‬‬
‫‪B D‬‬
‫‪D‬‬
‫‪B‬‬
:‫مثالي ديگر‬
A B C D E
A
D
A
C
D
E
A B C
A E
B D
B
B
E
A
B
C
‫فرم نرمال ‪3NF‬‬
‫•‬
‫جدولي در فرم نرمال ‪ 3NF‬است كه‬
‫–‬
‫اوال ‪ 2NF‬باشد‪.‬‬
‫–‬
‫ثانيا فيلدهاي غير كليد اصلي به هم وابستگي نداشته باشند‪.‬‬
‫(بعبارت ديگر هر فيلد فقط بطور مستقيم (و نه با رابطه تعدي) به كليد‬
‫اصلي وابسته باشد‪).‬‬
‫مثال‪:‬‬
‫•‬
‫فرض كنيم نمودار وابستگيها در جدول )‪R(A,B,C,D,E‬‬
‫بصورت زير باشد‪ .‬جدول در چه سطح نرمالي قرار دارد؟ اگر‬
‫‪ 3NF‬نيست آنرا به فرم ‪ 3NF‬تبديل كنيد‪.‬‬
‫‪E‬‬
‫•‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫جدول در سطح ‪ 1NF‬است‪ .‬براي تبديل به ‪ 3NF‬بايد اول آنرا‬
‫به ‪ 2NF‬و سپس به ‪ 3NF‬تبديل كنيم‪.‬‬
‫روش تبديل جدول از فرم ‪ 2NF‬به فرم ‪3NF‬‬
‫• جدول را بصورت زير مي شكنيم‪:‬‬
‫• فيلدهاي ي (مثل ‪ )Y‬را كه به فيلد غير كليد اصلي (مثل ‪ )X‬وابسته هستند را‬
‫از جدول جدا كرده‪ ،‬به همراه ‪ X‬در يك جدول قرار مي دهيم‪.‬‬
‫•كليد اصلي به همراه تمام فيلدها بجز ‪ Y‬در جدول ديگر‬
‫مثال‪ :‬تبديل جدول مثال قبل به فرم ‪3NF‬‬
‫‪T‬‬
‫‪C‬‬
‫‪D‬‬
‫‪E‬‬
‫‪E‬‬
‫‪A‬‬
‫‪B‬‬
‫‪T2‬‬
‫‪ )1‬مرحله اول‪ :‬تبديل جدول ‪T‬به ‪2NF‬‬
‫‪D‬‬
‫‪A B C D E‬‬
‫‪T1‬‬
‫‪A B D E‬‬
‫‪B‬‬
‫‪A‬‬
‫‪ T2‬در سطح ‪ 2NF‬است‬
‫‪B C‬‬
‫‪C‬‬
‫‪T1‬در سطح ‪ 3NF‬است‬
‫‪B‬‬
‫ادامه‬
‫‪T2‬‬
‫‪A B D E‬‬
‫‪D‬‬
‫‪E‬‬
‫‪A‬‬
‫‪B‬‬
‫‪ )1‬مرحله دوم‪ :‬تبديل جدول ‪T2‬به ‪3NF‬‬
‫‪T2_2‬‬
‫‪T2_1‬‬
‫‪A B D‬‬
‫‪D‬‬
‫‪B‬‬
‫‪A‬‬
‫پس جدول ‪ T‬به سه جدول ‪ T2_1 ،T1‬و ‪ T2_2‬شكسته شد‪.‬‬
‫‪D E‬‬
‫‪E‬‬
‫‪D‬‬
‫مثال‪:‬‬
‫فرض کنيم جدولی مشابه جدول ‪ STC‬با اسکيمای زیر طراحی کرده ايم‪ .‬میخواهیم در صورت لزوم انرا نرمالسازی کنيم‪.‬‬
‫مدیر دانشکده‬
‫‪Mark‬‬
‫‪tId‬‬
‫‪Manager‬‬
‫شماره گروه درسی‬
‫دانشکده ارائه دهنده‬
‫‪ClgId‬‬
‫‪Units‬‬
‫‪Cname‬‬
‫‪Term‬‬
‫‪Sec‬‬
‫‪CId‬‬
‫‪SId‬‬
‫برای بررسی سطح نرمال جدول‪ ،‬بعنوان طراح وظيفه داريم لیست وابستگی های موجود در جدول را بنویسیم‪:‬‬
‫‪Cid → Cname‬‬
‫‪Cid → Units‬‬
‫‪ClgId → Manager‬‬
‫‪(Cid , Sec , term) → Cname‬‬
‫‪(Cid , Sec , term) → Units‬‬
‫‪(Cid , Sec , term) → ClgId‬‬
‫‪(Cid , Sec , term) → manager‬‬
‫‪(Cid , Sec , term) → tId‬‬
‫همه فیلدها → )‪(Sid , Cid , Sec , term‬‬
‫ادامه‬
‫نمودار وابستگی ها‪:‬‬
‫‪Mark‬‬
‫‪tId‬‬
‫‪Manager‬‬
‫‪ClgId‬‬
‫‪Units‬‬
‫‪Cname‬‬
‫‪term‬‬
‫‪Sec‬‬
‫‪CId‬‬
‫از نمودار مشخص می شود که جدول در سطح ‪ 1NF‬قرار دارد‪ .‬برای اينکه ‪ 2NF‬شود باید‬
‫وابستگی های ابی و سبز از جدول حذف شوند‪.‬‬
‫با وابستگی های سبز رنگ کار را شروع می کنيم چون که دترمينان انها (سمت چپ وابستگی) بزرگ تر‬
‫است‪.‬‬
‫‪SId‬‬
‫ادامه‬
)T2 ‫ و‬T1 ‫ (شکستن به دو جدول‬2NF ‫ به‬T ‫ تبديل‬:‫مرحله اول‬
T1
SId
CId
T2
CId
Sec
CId
Sec
term
Sec
term
Cname
Term
SId
CId
Sec
Term
mark
Mark
Units
Cname
Units
ClgId
clgId
Manager
Manager
tId
tId
2NF T2 ‫ پس باید اول‬.)‫ است (بدليل وجود وابستگی های ابی‬1NF ‫ هنوز‬T2 ‫ است اما‬3NF ‫ و حتی‬2NF ‫ در سطح‬T1
.‫شود‬
‫ادامه‬
‫مرحله دوم‪ :‬تبديل ‪ T2‬به ‪2NF‬‬
‫‪Units‬‬
‫‪Cname‬‬
‫‪CId‬‬
‫‪T2_1‬‬
‫‪Units‬‬
‫‪tId‬‬
‫‪Manager‬‬
‫‪clgId‬‬
‫‪Term‬‬
‫‪Sec‬‬
‫‪CId‬‬
‫‪Cname‬‬
‫‪CId‬‬
‫‪T2_2‬‬
‫‪tId‬‬
‫‪Manager‬‬
‫‪ClgId‬‬
‫‪term‬‬
‫‪Sec‬‬
‫‪ T2_1‬در سطح ‪ 2NF‬و حتی ‪ 3NF‬است‪ T2_2 .‬هم در سطح ‪ 2NF‬است اما بدليل وجود وابستگی سياه رنگ ‪3NF‬‬
‫نیست‪ .‬پس ‪ T2_2‬تنها جدولی است که باید ‪ 3NF‬شود‪.‬‬
‫‪CId‬‬
‫ادامه‬
3NF ‫ به‬T2_2 ‫ تبديل‬:‫مرحله سوم‬
T2_2_1
clgId
Sec
Manager
Manager
T2_2_2
CId
clgId
term
ClgId
CId
Sec
Term
clgId
tId
tId
.‫ هستند‬3NF ‫اکنون تمام جدولها در سطح‬
‫جمع بندی مثال‪:‬‬
‫جدول اوليه جهت نرمالسازی تا سطح ‪ 3NF‬به ‪ 4‬جدول زير شکسته شد‪.‬‬
‫جدول نمرات دانشجويان‬
‫‪mark‬‬
‫‪Term‬‬
‫‪Units‬‬
‫جدول لیست تمام دروس‬
‫‪CId‬‬
‫‪Sec‬‬
‫‪Cname‬‬
‫‪Manager‬‬
‫‪SId‬‬
‫‪CId‬‬
‫‪clgId‬‬
‫‪T1‬‬
‫‪T2_1‬‬
‫‪T2_2_1‬‬
‫جدول لیست تمام دانشکده ها‬
‫جدول لیست گروههای درسی ارائه شده‬
‫‪tId‬‬
‫‪clgId‬‬
‫‪Term‬‬
‫‪Sec‬‬
‫‪CId‬‬
‫‪T2_2_2‬‬
‫فرم نرمال ‪BCNF‬‬
‫اين حالت زمانی مطرح می شود که‪:‬‬
‫•‬
‫–‬
‫جدول دارای چند کليد کانديد باشد‪.‬‬
‫–‬
‫کليد کانديد ترکيبی داشته باشيم‪.‬‬
‫–‬
‫کليدهای کانديد در اجزايشان با هم اشتراک داشته باشند‪ .‬مثال (‪)A,B‬و(‪)A,C‬‬
‫•‬
‫اگر در جدولی اين ‪ 3‬شرط برقرار باشد نياز به نرمالسازی ‪BCNF‬‬
‫دارد‪.‬‬
‫•‬
‫جدولي در فرم نرمال ‪ BCNF‬است كه‬
‫–‬
‫اوال ‪ 3NF‬باشد‪.‬‬
‫–‬
‫ثانيا اجزای کليدهای کانديد مختلف به هم وابستگی نداشته باشند‪.‬‬
‫مثال‪:‬‬
‫با توجه به نمودار وابستگی ها (که فرضی است) جدول زیر در چه سطح نرمالی قرار دارد؟‬
‫در صورت لزوم انرا نرمالتر کنید‪.‬‬
‫‪City‬‬
‫‪City‬‬
‫‪Sname‬‬
‫‪term‬‬
‫‪SId‬‬
‫‪SId‬‬
‫‪Sname‬‬
‫‪term‬‬
‫از شکل مشخص است که )‪ (sId,term‬و )‪ (sname,term‬هردو کلید کاندید هستند‪.‬‬
‫جدول در سطح ‪ 3NF‬است اما ‪ BCNF‬نیست (بدليل وجود وابستگی بین اجزای دو کلید کاندید)‪ .‬پس باید ‪ BCNF‬شود؛‬
‫بصورت زیر‪:‬‬
‫‪City‬‬
‫‪term‬‬
‫‪SId‬‬
‫‪Sname‬‬
‫‪SId‬‬
‫برنامه نويسي پايگاه داده در ‪.Net‬‬
Insert ‫عملیات‬
‫عملیات ‪Update‬‬
‫می خواهیم روی هر رکورد از گرید که کلیک می کنیم‬
‫اطالعاتش در پایین بیاید‪.‬‬
‫سپس هرکدام را که خواستیم در پایین تغییر دهیم و با‬
‫کلیک روی دکمه ثبت ‪ ،‬تغییرات ثبت شوند‪.‬‬
‫زمانی که خانه انتخاب شده در گرید عوض شود این‬
‫دستورات اجرا می شود‪ .‬یعنی اطالعات رکورد انتخاب شده‬
‫در پایین فرم می ایند‪.‬‬