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
می خواهیم روی هر رکورد از گرید که کلیک می کنیم
اطالعاتش در پایین بیاید.
سپس هرکدام را که خواستیم در پایین تغییر دهیم و با
کلیک روی دکمه ثبت ،تغییرات ثبت شوند.
زمانی که خانه انتخاب شده در گرید عوض شود این
دستورات اجرا می شود .یعنی اطالعات رکورد انتخاب شده
در پایین فرم می ایند.