بسم الله الرحمن الرحيم اليوم راح نكمل على كلامنا
في الـ chapter تبع الـ normalization راح نتكلم عن ال
second normal form و راح نحكي بداية من الـ example
اللي اخذناه في المحاضرة الماضية إن شاء الله و نشوف
كيف بنوصل لـ second normal form في عندي اللي هو ال
primary key كان عندي الـ full name الـ model full
name هو الـ primary key بدي
أرمز له هذا الـ column بدي أرمزه بالحرف F هذا الـ C
اللي هو الـ country الـ model M الـ manufacturing
خليني أسميه man اختصاره man تمام؟ مين كان عندي ال
primary key الـ full؟ كان يعطيني بقية الـ columns
اللي هم الـ manufacturer المصنع و الـ model و ال
country و فيه كان عندي الـ manufacturer مع الـ model
candidate key candidate key منهم ممكن أعرف البقية
الـ country و الـ full name أصلا طلعوا الـ full name
كيف مكون اسم المصنع مع اسم المنتج الموديل مجمعينهم
مع بعض عاملين منهم الـ full name فهدول اثنين مع بعض
manufacturer مع الموديل بيعطوني الـ full name و ال
country هي primary key وهي candidate key وفي عندي
كمان dependency اللي هي أن المصنع منه بعرف البلد
المنشأ الـ country ف أنا من manufacturer بعرف مين
بعرف الـ country حكينا partial functional
dependency يعني يكون في عندي column بعتمد على جزء
من الـ primary key أو الـ candidate key لو طلعنا على
الـ dependency هذه الواحدة هذه اللي فيها المشكلة
نلاقي أن الـ C بتعتمد على المصنع الـ manufacturer
اللي هو أصلا جزء من candidate key مش الـ candidate
key كامل جزء منه هاي بدنا نتخلص منها إذا تخلصنا منها
بكون أنا حققت الـ second normal form تمام؟ طيب إذا
الـ second normal form اللي اخذناها المرة الماضية
بتعتمد على إن نتخلص من الـ partial functional
dependences partial functional dependences يعني
اعتماد أحد الـ columns الـ non prime تتذكروا لما
حكينا كلمة non prime الـ non prime columns إن
يكون بيعتمد على جزء من candidate key طيب عشان نرد
و نأكد المعلومة إيش عن non prime column
إيش يعني non-prime column؟
الـ non-prime attributes هو أي column مش جزء لا من
الـ primary key ولا من أي candidate key اسمه non
-prime هذا تعريفه تعريف فادع اللي بنحفظه الـ non
-prime attribute non-prime column non-prime
attribute non-prime كلهم هو عبارة عن كلهم في ال
relation مش جزء من أي candidate key بما فيهم ال
primary key لأن الـ primary key أصلا candidate key
إذا كان الـ columns كلهم مش primary key ولا جزء من
candidate key فهو مباشرة non-prime الـ non-prime
هذا ما بدوش يكون partially dependent على candidate
key لازم يكون إذا اعتمد على candidate key بشكل كامل
الـ whole candidate key نعبر عنها في السطر هذا لازم
الـ non prime non prime attributes يعتمد على مين
الـ whole كامل whole of every candidate key على
partial لأ إذا كان بيعتمد على partial باخذه هو و
الـ partial اللي بيعتمد عليه بحطهم في relation
لحاله نرجع للمثال اللي كان عندنا عندي ال
manufacturing باعطيني الـ country الـ country واحنا
الـ manufacturing هذه جزء من candidate key هي ال
manufacturing مع الـ model candidate key إذا صار ال
c high بتعتمد فعليا مش على الـ key كله على جزء منه
بس بتخلص منها فبدنا نأخذ هذه و نعملها في table
لحالها في relation لحالها بعد ما نحطها في relation
لحالها بدنا نربطها مع مين؟ مع اللي بيضلوا صح ال
primary key تبعها هيكون الـ manufacturer فلازم ال
manufacturer اكرر وين في العلاقة الأصلية كـ foreign
كـ foreign key هاي شكلهم هاي الـ two tables اللي
هيصيروا عندي جبنا
الـ manufacturer مع الـ country اللي كانت partial
functional dependency بما إنه الـ manufacturer هو
الـ primary key هاخده و أحطه في الـ relation الثانية
كأيش؟ كـ foreign key هي موجود كـ foreign key وبقية ال
columns اللي ضلوا عندنا بنخليهم زي ما هم هيك
اتخلصنا من الـ partial functional dependency صارت
عندي في second normal form هل في عندي multi value
attributes إذا أنا أكيد في الـ first normal form في
عندي ضايل بعد التغيير اللي حولنا ضايل عندي partial
functional dependencies لأ ما ضلش بعد التحويل هذا
اللي عملنا ما ضل فصورنا إذا احنا في second normal
form لأن عشان اروح على الـ third normal form ال
second normal form بتحارب الـ partial functional
dependency الـ third normal form بتحارب ال
Transitive Functional Dependency إيش يعني
Transitive؟ إنه أنا عندي A بتعطيني B ويكون عندي B
بتعطيني C باجي بحكي إنه A بتعطيني C بس بطريقة
ملها Indirect مش مباشرة Transitive أو Transparent
indirect غير مباشر
تمام؟ أنا لما بعرف مثلا رقم الطالب ممكن أعرف رقم
هويته وإذا عرفت رقم هويته ممكن مثلا عند شركة جوال
أعرف رقم جواله فإذا أنا من رقم الطالب ممكن أعرف
رقم الجوال لكن مش .. مش مباشر في .. في كلمة وسيط في
الحالة هذه المثال اللي أنا عملته من كلمة الوسيط
فاحنا أي علاقة بهذا الشكل a بتعطيني c transitive
بتخلص منها إذا تخلصنا منها بنحقق الـ third normal form
تعالوا نشوف مثال third normal form زي ما حكينا نوع
من أنواع الـ normalization لازم تكون الـ relation
عندي في second normal form عشان حكينا ال
normalization levels لازم اكون أنا أصلا في السكن و
أروح أشيل مين؟ الـ transitive إيش عن الـ transitive
يعني إنه ما يضلش عندي ولا non-prime attribute نرجع
نحكي عن الـ non-prime attributes اللي هم columns
مالهم؟ يلا مين عيد التعريف؟ مش جزء من أي candidate
key أو primary key تمام هدول الـ columns الـ non
-prime مش لازم تكون علاقتهم transitively dependent
على أي key على أي candidate key لـ R أي candidate
key عندي لـ R أي key لـ R علاقة هدول الـ non-prime
معاه مش لازم تكون بالشكل هذا إنه في وسيط بينهم
مثال في عندي مثال اللي هو مسابقات رياضية Tournament في
سنوات المسابقة مش كل سنة بيعيدوها فالمسابقة
الفلانية سنة كذا مين الفائز الـ winner؟ الشخص هو
اللي كان فائز وفي عندي تاريخ ميلاد الفائز الشخص
الفائز أول شيء وين الـ key في الجدول هذا السنة مع
مع المسابقة هي الـ key أنا المسابقة الوحدة ماقدرش
أحكي أن المسابقة الفنانية فاز فيها فلان لأن في كل
سنة في فائز مختلف وبالتالي المسابقة مع السنة
بتعطيني باقي المعلومات بتعطيني من الفائز وتاريخ
ميلاده لكن هل فعليا تاريخ ميلاد الفائز بعتمد
مباشرة على الـ year ولا بتعتمد فعليا فعليا بتعتمد
على الفائز فهذه الـ وسيط هذا الـ column الـ وسيط ال
winner هو الـ column الـ وسيط تعالوا نشوف إيش ال
dependencies اللي عندي الـ Tournament اللي هي الـ T
المسابقة الـ Year بتعطيني الـ winner و الـ Day
of birth تبعه لكن أنا فعليا عندي الـ D في الأصل
بتعتمد على الـ winner فهي اللي transit فيها وهي بدنا
نتخلص منها هاخدها دي و أحطها وين؟ في table لحال
احنا كل شغلنا لأنه الشيء اللي بغلبنا الشيء اللي بدنا نروح
نعمل فيه في جدول لحال decomposition الـ relation دي
حولنا لمجموعة relations فهاخد هدول في relation ال
W مع الـ D مين هيضل عندي؟ هاي أخدت هدول في relation
مين ظل؟ الـ T و الـ Y كيف بدنا نربط بينهم؟ هاي ال
primary key في الـ relation هاي اللي جديدة دي الـ W
صح؟ الـ winner هو الـ primary key فهاخده أكرره وين أكرره
معها إيه كـ foreign key هاي شكل الجدول اللي هيصير
ده
نتخلص منهم حأحط الـ winner مع الـ day of birth في
جدول لحالهم هاي الجدول لحالهم هاخد الـ winner ال
primary كيف هذا الجدول و أحطه في الجدول الثاني هيك
احنا بنكون في الـ third normal form في إيش صعب لحد
الآن كيف
الأسئلة بتيجي بجيب لك أنا جدول بجيب لك أنا جدول بكون
مثلا unnormalized بالمرة أو مثلا في الـ first
normal و بحكي لك بدي هذا الجدول يكون BCNF أو third
normal form عشان تحولي أول شيء إيش بدك ترسمي ال
functional dependences اللي عندك ال functional
dependences اللي عندك بدنا نطلع أول شيء على حتى ما
نبدأ في ال functional dependences بدنا نطلع أول
شيء على ال multivalue attributes إذا تخلصنا منهم مين
بنكون في ال first normal form خلصنا من ال first نيجي على
ال second إذا تخلصنا من مين في ال second بنطلع على ال
partial functional dependences أنه يكون عندي
column بيعتمد على جزء من ال candidate key أو ال
primary key تخلصت منه بروح على ال transitive
في ال third بدور وين في column بيوديني على column ثاني و
الاثنين هم أصلا مش prime تمام؟
يكون في وسيط زي اللي شفنا زي هذا المثال مجرد ما
تخلصنا منهم بيصير في ال third مش دائما بنمشي في كل
الخطوات ليش؟ أنا بدي أحكي لكم ليش ممكن احنا بس
نتخلص من ال multi-value attributes يكون ال table
ما فيش فيه لا partial ولا transitive وبالتالي بدون
أي جهود منها بيصير هو في ال third normal form يعني
المثال اللي أنا شرحته تبع ال second normal form مش
أنا هذا المثال شرحته ك second normal form لأنه فيه
partial أنا فعليا حولته ل second normal form لكن
هو برضه في نفس اللحظة صار third طلعوا فيه فيه
transitive بدون أي جهود مني مجرد ما حولته ل second
صار انحول ل third مباشرة بنطلع على الصورة بنطلع على ال
multi-value attributes بعدها على ال partial بعدها
على ال transitive ومش دائما مطلوب أن أعمل شيء مش
دائما مطلوب أن أعمل شيء أحيانًا بكون هو جاهز هو
ما فيش فيه partial functional dependency لازم غصب
عنه أطلع فيه partial functional dependency هو
ما فيش فيه transitive functional dependency أنا
بدور عليها إذا موجودة بتخلص منها مش موجودة خلاص هو
جاهز طيب
الفكرة بتلخص الموضوع الـ 3NF الـ Third Normal Form
في مقولة اللي هي بيحكوها في القسم تبع المحكمة
باللغة الإنجليزية بيحلف في المحكمة أنه أنا هحكي
الحق و بس الحق و لا شيء غير الحق تمام؟ اه بس بدل
كلمة الحق هي أنه بدنا نحولها على ال key و على ال
columns أن ال columns مش لازم تعتمد إلا على ال
candidate key و بس ال candidate key و ال candidate
key كاملة هذا الكلام بيلخص موضوع ال normalization
every non-key attribute يعني non-prime every non
-key attribute must provide a fact about the key
ال candidate key يعني لازم يكونوا بيعتمدوا على ال
candidate key the whole key كله ما فيش partial and
nothing but the key هذه بتعطينا ال third nothing
but the key يعني ما فيش transitive بتعطينا ال third
normal form و ال whole key بتعطينا مين ال second
normal form لأن ما فيش partial و fact about the key
بتعطينا ال first normal form تمام
هذه المقولة إذا ممكن الواحد يحفظها بتلخص الفكرة
بتاعتنا هاي كل فكرة ال normalization طيب الشيء اللي
بعدين بدي أحكي لكم الـ Third Normal Form في كثير من
الحالات بنكتفي فيها في كثير من الحالات الـ Third
Normal Form نعطيها Enough أو Decent Normalization
وبتكفي إذا في مجال نوصل للدرجة الأعلى اللي هي الـ
BCNF فليكن ما وصلناش الـ 3NF بالنسبة إلينا تعتبر
كفاية في ال design و في برمجة ال database
ال بي سي ن اف بي سي ن اف بي سي ن اف بي سي ن اف بي
سي ن اف بي سي ن اف بي سي ن اف بي سي ن اف بي سي ن
اف بي سي ن اف بي سي ن اف بي سي ن اف بي سي ن اف بي
سي ن اف بي سي ن اف بي سي ن اف بي سي ن اف بي سي ن
اف بي سي ن اف بي سي ن اف بي سي ن اف بي سي ن اف بي
سي ن ا
فكرتها أنه إذا أنا في عندي dependencies في ال
relation X بتعطيني Y لازم ال dependency هذه تكون
واحدة من اثنتين إما أنها trivial functional
dependency إيش يعني trivial functional dependency
يعني قاعد أحكي A و B و C بيعطوني A هذه احنا ما كنا
نحكي عنها أصلا في الdependences هذه بنعتبرها
trivial، trivial يعني بسيط، بديهي يعني أنا بحكيلك
أن لما بعرف ال A و ال B و ال C بعرف ال A طب ما
طبيعي احنا عارفين ال A لما أنا بعرف ال A من أول لما
أنا أجي أحكي أن احنا إذا عرفنا ال N و ال F بعرف ال
F طب ما احنا حاكينه في الأول أصلا هذه trivial
فعندما بحكي أن X في عندي function dependency X
بتعطيني Y أنها تكون trivial يعني ال Y جزء من جزء
من X أو بتساويها أنك تيجي تحكي لي إيش أنا بتساويها
يعني تحكي لي B إذا عرفت ال B بعرف ال B
trivial بسيط بديهي فأي dependency في ال relation X
بتعطيني Y يا إما بتكون trivial يا إما ما لها الـ X
هادي بدها تكون super key للschema يعني candidate
key أو primary key أو super key لأن ال super key
إيش هو؟ هو candidate key مع columns إضافية مع
columns إضافية فيعني ال X هي اللي عليها ال
dependency بدها تكون primary أو candidate أو super
إيش تختلف عن ال third normal form؟
الـ Third Normal Form إذا أنا ما بدي أجيها من منطق
ال Transitive لو بدي أشوف تعريفه هي لها تعريف ثاني
شبيه بال BCNF عشان أشوف الاختلاف بينهم هي عبارة عن
Second Normal Form فيها Dependences X بتعطيني A
بشروط إن X بتعطيني A تكون Trivial أو X هي Super Key
لاحظين هدول البندين زي مين زي ال BCNF أو النقطة
الثالثة هذه اللي احنا بدنا نتخلص منها عشان نسير في
ال BCNF أو أن ال columns A ناقص X A ناقص X ما لهم
the set difference between X prime attributes
contained in some candidate key هذا الفرق الوحيد
بين ال BCNF و ال 3NF النقطة هذه إن إذا في عندي
dependency X بتعطيني A ال columns في A مش موجودين
في X يعني A ناقص X يكونوا ما لهم contained in some
candidate key في أغلب الحالات مجرد ما أنا بوصل ل 3
NF في أغلب الحالات automatic بالله حالنا في ال
BCNF عادة بدون جهود غالبا بدون .. ما نشتغل شيء لما
نعمل ال 3NF بنكون في ال BCNF في حالات خاصة بس
بتحققش عندي الشرط هذا بكون هذا الشرط موجود فلازم
أتخلص منه كيف أتخلص منه بجعل ال columns اللي
موجودين في A مش في X و اللي هم جزء من candidate
key و بأخدهم على relation لحالهم و بأخدهم على
relation لوحدهم
هبدأ آخذ مثال في
عندي جدول الجدول
هذا لحجوزات لقاعة رياضية court في عندي نادي رياضي
في قاعتين بس قاعتين واحد واثنين هذه رقم القاعة هذه
موعد الحجز ونهاية موعد الحجز والحجزات اللي عندي زي
ما أنتم شايفين في أربعة أنواع في standard في saver
في premium a و premium b إيش الحجزات هدول الحجزات
هدول الأنواع ال standard هو لشخص مش عضو عندنا في
النادي مش عضو في النادي و بيحجز القاعة واحد ال
saver لواحد عضو منبر و بيحجز القاعة واحد ال
premium aلعضو عندي member و بيحجز القاعة اثنين
premium B لواحد بيحجز القاعة اثنين و non member مش
عضو عندي في النادي من الكلام هذا أنا بستنتج أنه
إذا أنا عرفت نوع الحجز بعرف القاعة ولا لأ لو
حكيت لكم الحجز تبع اللحظة هذه premium B معناته في
أي قاعة هو في أي ملعب في اثنين premium A saver أو
standard إذا في عندي functional dependency بين ال
rate type و ال court صح بعرف ال court من ال rate
type نجي
نطلع على ال keys اللي موجودة ال candidate keys
اللي في الجدول في عندي أول candidate key مرشح أن
يكون candidate key يكون ال primary key ال court مع
ال start time القاعة اللي لحجزها وموعد حجزها إذا
عرفتهم بعرف باقي الجدول في عندي كمان candidate key
ال court مع ال end time القاعة وموعد نهاية الحجز
في عندي كمان candidate key أني آخذ ال rate مع ال
end أو ال rate مع ال start ملاحظين في عندي column
non prime كل
ال columns prime كلهم جزء من candidate key كلهم
جزء من candidate key هذا بيقدر أنه إيش أنه
يصير عندي الكلام هذا أن a ناقص x هلاقيها في كل
الحالات في كل ال functional dependencies اللي عندي
أن و a ناقص x هيصف عندي prime columns هم جزء من
candidate key is a prime فانا واصل لل third normal
form في هذا ال table واصل لل third normal form بس
بناء على أيش؟ على القاعدة رقم تلاتة اللي هي ممنوعة
ممنوعة في ال BCNF في ال BCNF حكيت أنا لازم ال
dependency تكون إما trivial أو super key
إيش الحل؟ إيش بدنا نعمل؟ طبعًا أنا مستعرض هذه عشان
اللي بده يدرس لحاله في البيت مستعرض كل ال keys
اللي موجودة وبعدين أحكي إنه في redundancies في ال
keys ومصفيهم في الآخر على أربعة keys بس S1 و S2 و
S3 و S4 طبعًا ليش redundancy لإنه في super keys لما
أنا بعدين بحكي ال key ال court و ال start time و
بعدين بعدين بحكي إنه ال court و ال start time و ال
end time صار هذا super key لمين؟ لها ده صح فانا
مستعرض كل ال keys واستثناء ال super و اللي فيهم
redundancies بيصفوا عندي الأربع keys اللي أنا
شرحتهم head مع head و head مع head ال rate مع ال
end و ال rate مع ال start تمام هذا ملخص الكلام تبع
ال slide حكينا
في ال second نتخلص من ال partial في ال third نتخلص
من ال trivial الآن عشان أسير في ال bcf بدي أتخلص من
موضوع أن ال rate type بيعطيني ال court rate type
بتعطيني ال court وهذه مشكلة والاتنين الاتنين
prime ما فيش فيهم واحد non prime و
ال court مش جزء من ال rate مش جزئيات من بعض عشان
أحقق أنا اللي هي موضوع ال trivial أنا لما X بتعطيني
Y لازم تكون trivial إنه جزئية منها أو بتسويها هل
ال rate بتساوي ال court؟ ما بيساووش بعض ولا جزء من
بعض ولا لهم علاقة في بعض طب هل ال X هي super key؟
ال court لحالها ال court .. ال .. آسف ال rate هل
هي super key؟ ال rate لحالها super key؟ مش
candidate key ولا primary key ولا super key ولا
هذه جزء من هذه إذا مشكلتي أنا مع هذه أن ال court
بتعطينا ال rate طيب فبدي أخدهم هدول وإيش أعمل
فيهم؟ في إيش صعب بأخذ ال dependency اللي بتعجبنيش
في كل فكرة ال normalization ال dependency اللي
بتعجبنيش برميها في ال relation لحالها هأخذ هدول
الاثنين وأحطهم في ال relation وأختار منهم
primary key وال primary key اللي منهم أخده في
الأصلية وبشطب ال columns منهم
تعملها في ال second؟ هدول اثنين بتعتمدوا على بعض؟
هي بتعتمد على هي صحيح إيش دخلت ال second في
الموضوع؟ طيب هي تعالي على ال table وين ال partial
في الموضوع؟ هي ال red طيب بتعتمد على مين؟ على ال
court ال court بيجي من ال primary key
ال rate بتعتمد على ال court كلامك صح وال court
جزء من ال primary key لكن أنت نسيتي أن ال rate مش
non-prime احنا حكينا ال partial وال trivial ال
non-prime بيعتمد على جزء من ال primary key بس هذه
مش non-prime هذه ال rate مع ال end أو ال start
primary key أو candidate key فهي بتحقق ال second و
بتحقق ال third بس ما بتحققش ال BCNF نرجع كمان مرة
مشكلتي أن ال rate type بتعطيني ال court و هادي مش
جزء من هاي ولا بتسويها عشان تكون trivial ولا ..
ولا هادي مع هادي .. هادي لحالها مش super key أو
candidate key لوحدها هأخذهم وأحطهم في relation
لحالي هادي أعمل relation جديدة أسميها ال rate type
مثلها هي relation جديدة حطيت فيها ال rate وبيأخذ
أي قاعة ال saver بيأخذ الأولى لل standard بيأخذ
الأولى لل premium بيأخذ الثانية لل premium بيأخذ
الثانية طبعًا هذا ال member flag أنا ضفته من عندي
لما تتذكروا كنت أحكي إنه لما عملنا saver بننقل على
ال member ship saver ولا standard حسب إنه member
ولا مش member فهذا أنا ضفته لو ما ضفتهوش ما له دخل
يعني ما له دخل في السؤال احنا شغلنا معاها دول فهي
الـ saver بيعطيني ال court ال type ال red type
بيعطيني ال court حاجة على ال table هادة هشيل منه
ال red type وال court وأجيب ال primary كيميا
مثلًا ال red type هأضيفه فيظل عندي ال red type مع
ال start time و ال end time و ال court ما له راح من
الجدولة بهيك أنا اتخلصت من ال dependency اللي
ما كانش فيها none prime اللي كان فيها موجود prime
بيعتمد على جزء من ال keys اللي عندي
هذا الجدول بيحقق شروط BCNF اللي هي أعلى مرحلة من
ال normalization المطلوبة منكم إذا
تخلصنا من multi-value attributes بنكون في أي
normal form إذا تخلصنا من ال partial functional
dependencies إذا تخلصنا من ال transitive
functional إذا تخلصنا من dependencies ل prime
attributes مع non super key بنسير في ال BCNF كيف
بنتخلص من أي dependencies ما بتعجبني؟ بأخذ الـ
dependencies زي ما هي وبحطها في جدول لحالي بشطب
ال columns تبعها من الأولانية من ال relation
الأولانية وبربط بينهم ال primary مع ال foreign يعني
مفتاح الحل أن أحدد في الأول من ال functional
dependencies أن أرسمهم زي ما أنا كنت أرسم أكتب
الاسم وسهم وأحط جنبه ال columns اللي بتعطيني
إياه هل دائمًا ممكن نعمل ال normalization يكون
BCNF؟ الجواب لا علميًا لا احنا حكينا ال first
normal form نعتبره enough كفاية ال first normal
form نعتبره إيش؟ ال first normal form critical إيش
يعني critical؟ يعني أساسي ما فيش relational
database بدون first normal هذا الكلام حكيته أنا إنه
بدون first normal ما في database relational
database إذا ال first normal critical 3NF enough
is enough كفاية لكن إذا بقدر أوصل لمراحل أعلى
fourth و fifth و sixth و BCNF وكذا بكون أحسن هل
ممكن دائمًا أتجاوز 3NF لا علميًا لو في عندي حالة هي
الموضوع اللي هو ال achievability of BCNF هل ممكن
نوصل ل BCNF الجواب إنه in some cases لا مش ممكن
أووصل ل BCNF مثال اللي عندي لو في عندي A B بتعطيني
C وال C بتعطيني B table بهذا الشكل three columns
من three columns وبال dependencies هذه مستحيل أن
أحاول ل BCNF كبير يوصل ل three NF
طيب إيش اللي عندي؟ عندي person و shop type و
nearest shop أنا لو عطيتكم اسم عندي جدول بعطيه اسم
واحد ساكن في مكانو نوع ال shop اللي هو بده ياه بدور
عليه بعطيه أقرب محل عليه نفرض أن عملته تطبيق جوال
مثلًا أو website للواحد يسهل على الواحد يعرف وين
أقرب محل عليه بده مخبز وين أقرب مخبز بده
supermarket وين أقرب supermarket بده يروح عند حلاء
عند محل بصريات وين أقرب محل فاحنا بنعطيه الاسم نوع
ال shop بيعطيني اسم أقرب محل عليه علي مثلًا بده
supermarket هي أقرب محل عليه علي بده hairdresser
حلق هي أقرب محل أحمد بده bookshop بده مكان للكتب
مكتبة مش استعارة bookshop يعني للبيع أعطيك library
للاستعارة تمام في هي المكان table بهذا الشكل في
مشكلة ال A, B بتعطيني C وال C بتعطيني B تعال
نشوف إيش في عندي هاي ال candidate keys اللي عندي
عند ال person و ال shop type بيعطوني مين ال
nearest shop إذا عرفت الشخص وإيش المحل نوعه اللي
بدور عليه بعطيه أقرب محل لذا هاي A و B اعطوني مين
أعطوني C لكن عندي مشكلة إنه C بيعطيني B إذا عرفت
اسم المحل بعرف إيه شو بيبيع يعني مثلًا هذا المحل
مخبز أو هذا supermarket أو هذا كذا ف أنا إذا عرفت C
بعرف مين بعرف B هذه لما بأجي بدي أجزئها لو حاولت
أجزئها ل tables ما بتظبطش معايا
طيب طب أنا أصلًا ليش بدي أوصل فيها ال bcnf ليش أصلًا
بدي أوصل فيها ال bcnf ما بديش ال 3nf يعني ليش ال
bcnf أحسن من ال 3nf دعونا نشوف ليش أحسن شايفين
المحل هذا ال eagle eye مكرر مرتين وفي المرتين
مكتوب عليه إيش supermarket مرة حكينا أن هو أقرب
supermarket لعلي ومرة حكينا أن هو أقرب
supermarket لأمل صح؟ أو لو افترضنا أن هذا المحل صار
عنده مشاكل ويحول من supermarket ل mini market
فاتحول ل mini market فلأنه بدنا نعمل update
للمعلومات بتاعته أروح نعمل له update فوق أنه
mini market ونسينا نعمله تحت فور الجدبل الهدف على
الحقيقة عندي آلاف المشتركين مثلًا في البرنامج معناه
أنه لازم ال update أعملها يمكن مئات أو ألف مرة لو
انسيت واحدة بس هيصير عندي data inconsistency عندي
مشكلة في ال data صارت في مكان معين ومكان لأ نفس
المشاكل ال normalization اللي كنا نحكي عنها ال
update anomalies فهذا ال table في ال 3NF ما بيحققش
ال BCNF وهذه مشكلته أنه أي update في ال shop type
إذا ما كانش كامل هيعمل لي مشاكل هيعمل لي مشاكل فانا
محتاج أن يحصل في ال BCNF بس فعليا مش ممكن نحققه
BCNF لأنه بيتبع القاعدة هذه شارح
المثال أنه عندي ال eagle eye بدي أحوله لميني ماركت
هيعمل لنا مشكلة و هيصير violation وهييعطيني anomalies
ال table is subject to anomalies في مشاكل لأنه
ما بيحافظش على ال BCNF normalization هو بس في ال
three normal form ناخد
مثال ناخد مثال هيك احنا خلصنا كل normalization ده
ناخد مثال ونحله مع بعض هي في عندي table في clients
بيستأجروا عقارات شقق ومحلات في عندي client number
و client name property number رقم للعقار address
للعقار تاريخ بداية الاستئجار تاريخ نهاية الاستئجار
قيمة الأجار رقم لصاحب الملك ال owner number و ال
owner name لو يجينا على ال client هذا اللي هي رقمه
اللي هي اسمه هنلاقيه المستأجر مرتين فهنلاقي انه كل
عقار هو المستأجر وإله رقمه وإله owner مكرر مرتين ..
مرتين .. مرتين .. مرتين .. مرتين .. مرتين .. مرتين
.. مرتين .. مرتين .. مرتين .. مرتين .. مرتين ..
مرتين .. مرتين .. مرتين .. مرتين .. مرتين .. مرتين
.. مرتين .. مرتين .. مرتين .. مرتين .. مرتين ..
مرتين .. مرتين .. مرتين .. مرتين .. مرتين .. مرتين
.. مرتين .. مرتين .. مرتين .. مرتين .. مرتين ..
مرتين .. مرتين .. مرتين .. مرتين .. مرتين .. مرتين
.. م
زبون ثالث كان مستأجر أربعة وخمس مرات فانا عندي
multivalues هذا normalized ولا unnormalized أول حل
كيف نحوله ل first normal؟ بدي أعيد البيانات هذه
رقم الزبون واسمه وحط هذه في row لحالها صح؟ وهذه
كمان row و هدول في row في row في row حيصير الجدول
كم row؟ بدل ما كان في الأول camera في الأصل كان
اثنين هيك أنا بحاول ال first normal هي شكل
الامتحان اللي بيسأل عنه شكل الامتحان شيء زي هي
تمام كيف بنحول ال first normal مشروع بالتفصيل نفس
اللت والعجل اللي بنحكيه كل يوم حيصير عندي ال 5
columns هدول بالشكل هذا بدي
أحول لل second normal form في عندي partial
dependences ولا مفيش؟ وين؟ يلا مين يحكي ليش في
عندي dependences؟ احنا
إذا عرفنا ال client number هنعرف مين ال property
name ولا ال .. ولا ال c name هنعرف ال c name
client number بخليني اعرف ال client name و ال
property بعرف ال address و ال owner بخليني أعرف
مين ال owner name صح طيب إيش كمان إذا أنا عرفت ال
client مع ال property الاثنين مع بعض بعرف ال start
و ال finish ال rent مربوط مع ال property number مع
ال address مع ال rent كمان فعندي فيه تشعبات في
العلاقات بدي أرسمها كلها و أحطها و أرسم كل واحدة
بتعرفني مين بحيث
أني أطلعهم هو مبدئيا في الجدول هذا معتبر عنده مين
ال primary key اللي بعطيني كل السطر معتبر ال
client number مع ال property number هو معتبر أن ال
client number مع ال property number هدول اثنين
بيعطوني باقي السطر فإذا لاحظنا هيكون عندي ال rent
و ال address بيعتمدوا على جزء من ال primary key هي
partial فبتخلص
من كل هدول ال partials في جداول هاي أول جداول
حأعمله حط ل client number مع مع ال cinema ونحطهم و
ناخد بس ال client number و نخليه في ال table و
نشيل مين ال cinema و نفس الشيء هأكرره مع ال owner
ال owner number و ال owner name حأروح أحط ال owner
في جدول و ال client في جدول و ال property في جدول
و هذا الكلام أصلا وإحنا اشتغلنا design صح في ال
ER model أصلا كان حيكون هم في جداول مش هأحتاج لكل
الغلبة هاي مع جدول زي هذا
مثال ثاني هتكملوا
عليه أنتو المثال هتكملوا عليه هتحطوا ال owner
لحال هتحطوا ال client لحال ال property لحال
هربطوا في الآخر بينهم بس ال primary key تبع ال
correlation هتمشي على الخطوات مباشرة مثال
straightforward بدوش إشيهي عندي مثال سبلاير number
و name و part number سبلاير
S2 كم part بيعطيني اللي بعد هو S9 سبلاير S9
بيعطيني three parts أول خطوة في ال normalization
نحول كل واحدة في row لحالها عندي واحدة اثنتين ثلاثة
أربعة خمسة ستة سبعة لازم يصيروا سبعة .. سبعة rows
هيك أنا بكون في ال first normal بعد ما حولنا ال
first normal إيش ممكن نعمل ممكن آخذ أنا supplier
name و supplier number في جدول لحاله هاي
الآن بتحكيلكم ليش
النمبر السبلاير ال S number بيعطيني مين؟ بيعطيني
ال supplier name و بيعطيني مين كمان؟ بيعطيني ال
part number لأ بيعطينيش ال part number لأن هاي في
عندي S5 و S2 الاثنين بيعطوني part one part one
بيعطينيش نفسي ال S supplier number بيعطيني بس ال S
name ال supplier number مع ال part number عبارة عن
ال primary key للجدول هذا primary key ال primary
key تبع هذا الجدول ال supplier و ال part اللي
بيعطيني سبلاير خمسة بيعطيني part one سبلاير اثنين
بيعطيني part one سبلاير اثنين بيعطيني part أربعة
ال supplier و ال part هو ال primary key بيعطيني إيش
ثاني بيعطينيش خلاص و بيعطيني الجدول يعني هدول
بيعطيني two columns هدول فأنا بس اللي بتخلص منها
مين هادي ال number بتعطيني ال name ليش لأن ال
number جزء من مين partial من ال primary يعني أنا
ما بحققش في هذا الجدول ما بحقق مين ما بحقق ال second
normal form فبعد ما أعمل ال rows زي ما حكينا كل
واحدة في row لحالها الخطوة اللي بعدها أني بتتخلص
من ال partial ال supplier number بتعطيني ال name
بتحطها في جدول لحالها ال supplier number بتعطيني
part number في جدول و هأخذ ال supplier number هذا
.. آسف هي ال supplier number مع ال supplier name و
هي ال supplier number مع ال part number في جدول
لحالهم هاي ال two relations اللي عندي في
إيش ضايق بتكون مياه في ال normalization؟ أسئلته
سهلة ومباشرة غالبا لما حاطلكم عليه quiz نفس
أسئلته في ال quiz هتكون في الامتحان النهائي غالبا
شكل السؤال أني بحط أنا جدول بحكيلكم اعملوا ليه
normalization بقدر المستطاع تكونوا تحاولوا تعملوا
normalization للآخر الآن هذا شكل ال normalization
طلع عندي أنا بس أخر معلومة ما بتحكيها احنا في
المثال هذا مثلا تخلصنا من ال un-normalized صح؟ و
اتخلصنا من مشكلة ال second normal بال partial هل
عملنا إيش بخصوص ال third؟ هو عامل لحاله ما فيش فيه
أصلا transitive عملنا إيش بخصوص ال bcf؟ هو أصلا
بيحقق شروط ال bcf فعليا ال two tables هدول بيحققوا
شروط ال b,c,f وشروط ال third normal و ال second و
ال first غير إن إحنا ما اشتغلناش غير لل first و لل
second