بسم الله الرحمن الرحيم اليوم ان شاء الله بنخلص
chapter three بدنا من المرة الماضية نتكلم عن
التحويل او ال conversion من ER model ل relational
design اللي هو تمثل بال tables أخدنا له أول مثل
أبسط مثل كيف ان ممكن
أخدنا أول شيء كيف ممكن نحوّل entity set نحوّلها ل
table حكينا التحويل تبعها ال conversion مباشر جدا
نحوّلها ل table create table اسم ال entity set هو
اسم ال table و ال attributes بيصيروا ال columns و
ال primary key اللي بيكون تحته خط هيكون ال primary
keyبعدين اتكلمنا عن تحويل ال relations أخدنا مثال
اللي هو employees works in departments حكينا ال
relation تحويلها برضه مباشر زي تحويل ال entity لكن
هجيبلها two foreign keys من ال two entities اللي
بتشاركوا في ال relation فيها والاتنين مع بعض
هيعملوا ال primary keyزي المثال اللي عندي جيبنا
رقم ال department ال DID رقم ال employee اللي هو
ال SSN جيبناهم الاتنين مع بعض حطيناهم في علاقة ال
works in والاتنين مع بعض شكلوا ال primary key وكل
واحد فيهم لوحده هيكون عبارة عن foreign key إذا
العلاقة هذه كان فيها key constraint ال key
constraint هيخلي عندى ال primary key اتغيريصير بدل
من ال primary key عبارة عن combined key من ال
primary key تبع ال employees و ال primary key تبع
ال departments اللي هم ال DID و ال SSN هيصيروا بس
primary key إيش واحد اللي هو مين تبع العلاقة اللي
جاي منها السهم العلاقة اللي جاي منها السهم ال key
constraint هيصير عند ال primary key هو ال DID
لوحده و الكلام هذا هيسهل علي إن ممكن بدل من عامل
tablerelation فقط لل manage و relation او table لل
departments انه ندمج الاتنين مع بعض شوفنا هذا
الكلام هاي المثال الاول كيف ممكن اعمل انا table
علاقة ال manage لوحدها فيها رقم الموظف رقم القسم
ال DID و اللي هو descriptive attribute since اللي
هو ال attribute تبع ال relation نفسهاو بيكون عندى
ال foreign key اللى هو ال SSN و ال DID و ال DID
نفسه هستخدمه ك primary key بدون ما أجمع و أعمله
combination مع ال SSN لإن فى عندي اللى هى ال key
constraint و ممكن ندمجهم و نحولهم لtable واحد ال
departments مع ال manage و هيصير عندى ال table فى
خمسة attributesاللي هم مين؟ التلاتة هدول هي تلاتة
هي كمان واحد هي أربعة و ال foreign key اللي جاي من
ال employees صاروا كام؟ خمسة عملية
الدمج هحط فيها الخمسة columnsالـ DID و الـ D name
و ال budget و ال SSN و ال cents ال primary key
هيظل زي ما هو اللي هو مين رقم ال department هيظل
عندى زي ما هو primary key DID و ال foreign key
هيكون واحد بس اللي هو مين ال SSN في الحل السابق
كان عندى ال foreign keys كام؟إتنين لإن كانت ال
manage مفصولة عن ال department فعشان أوصلها مع ال
department تدي foreign key دمجناهم فمش لازم نيلهم
foreign key ضايل بس بتدي foreign key عشان أربط مع
ال employees فقط ال
participation constraint عبرنا عنها باستخدام اللي
هي إيش ال not nullماذا يعني participation
constraint؟ حكينا إنه في عندي نوعين total و
partial ال total معناته إنه كل مثلا department له
مدير كل موظف له قسم كل قسم فيه موظفين فمعناته إنه
لازم يكون موجود عكس الاشي الفاضي الفاضي اللي هو ال
null إذا not null ف not null constraint بتعبر عندي
عن ال total participation
تعبّر عند total participation فلما هانيجي نعمل ال
table تبع ال department و ال managers لما وجدناهم
في table واحد حطينا عند رقم الموظف not null عشان
نضمن أنه دائما فيه موظف هو مدير القسم هتظهر إن
حالة تانية في حالة ما أجي أعمل delete أنه يكون
الموظف أصلا موجودو مدير القسم لكن الآن حذفنا
الموظف استقالت قاعد whatever فبدي لما أعمل delete
بديش يقولوا مكانه فاضي لأولا هتصير بدل ما هي total
هتصير partial فأنا حكيت هنا not null فإذا بدي عندي
عدة حلول إما لما أمحي الموظف أعمله delete أعمل
delete للقسم هذا الكلام مش منطقي بدي أمنعه و أعمله
no action هي هتعمل ليه reject فأحكيله on delete no
action
ال weak entity تحويلها برضه سهل عندي مثال أنه أنا
عندي الموظفين فيه لهم أبناء بيرتبطوا مع أبنائهم
بأنه لهم بوليسات تأمين صحي لأبنائهم بوليسي كل
بوليسي من هدول لها cost لها ثمن الأبناء لهم أسماء
و عمرالـ weak entity ال primary key تبعها بتكون من
ال primary key تبع ال strong entity هيك أخدنا في
ال ER موديل هاخد ال primary key تبع ال strong
entity و أضيفه لل attribute اللي أنا يعني بعتبره
انه زي كأنه ممكن استخدمه primary key اللي هو عملنا
مش خط تحته عملنا خط متقطع تحته dash lineفهستخدم
اسم الطفل أو اسم ال dependent مع رقم الموظف اللي
هو حيكون أبوه والده أو أمه عشان أتعرف أنا على
الأطفال عشان أتعرف عليهم يعني لو كان عندي تكرار في
أسم الأطفال فيه اتنين محمد أكيد مش هيكونوا من نفس
الأب هيكون مثلا محمد الأول ابن موظف ومحمد التاني
ابن موظف تاني فانا رقم الموظف مع الإسم بميز
للأبناء
ال employees عشان احولها ل table واضحة نفس الأمثلة
السابقة table خاص بال employees و خلصنا منه انا
بضل عند ال policy و ال dependence ال policy و ال
dependence ايش في بينهم سهم key constraint مدام
فيه key constraint يعني ممكن ال two tables ايش
اعمل فيهم ادمجهم لأن كل طفل او كل dependent له
policy واحدة فقط فبالتالي انا ممكن ادمجهم لما بدي
ادمجهم ايش ال attributes او ال columns اللي عندي
عندي ال ageوعندي ال PNAME وعندي مين ال cost وبدى
أجيب ال SSN ك foreign key وعشان أدمجه مع ال PNAME
يصير primary key الكلام هذا ترجمته في كمان SQL
create tableاسمه deb underscore policy اختصار
لكلمة dependance policy ده اجمع ال dependance و ال
policy مع بعض حط فيه ال B name و ال age هدول من
مين اخدناهم من ال dependance و ال cost اخدناه من
مين من ال policy و ال SSN اللي هو ال foreign key
تبع ال employee فهي ال SSN هيها foreign key SSN
references ال employees و ال primary key combined
ال B name مع ال SSNاسم الطفل او ال dependent مع
رقم الموظف اللي هو Frankie المرة هاي on delete
استخدمت cascade مش no action تعالوا نشوف إيش يعني
ال no action في هاي الحالة وإيش يعني ال cascade لو
أنا حكيت له on delete no action يعني أنا أجي أحذف
موظف مش هيخليني أحذفه إلا إذا حذفت أبناءه أول لو
كان له تلت أبناء بدي أروح أحذفهم تلاتة و بعدين بدي
أجي إيش أحذفهمطبعا التلت أبناء مابنفعش أروح أغير
أبائهمإن الأب بيتغيرش في القسم لما كان manager مع
القسم employee manage قسم حكينا بنروح بنغير ال
manager اللي بده يستقيل بنحط مدير بداله و بنحذف ال
manager لكن أنا لما بدي أحذف الأب كموظف بدي أروح
أغير الأب للأبناء مالهاش معنى اللي إلها معنى أني
أحذف الأبناء مع الأب طب أنا بدل ما أروح أعمل تلاتة
delete في ال dependence للتلت أبناء و بعدين أعمل
delete للأب يعني كام delete صار؟لو انا ريحت حالي
وعملت on delete cascade لحاله automatic لما هحذف
ال employee يروح يحذف الأبناء هيك انا هكون سهلت
على حالي برمجة ال database فهي فايدة ال on delete
cascade فايدتها هتسهل علي و تحفظلي ال referential
integrity ان هتظلها valid ال is a hierarchies
الاسئلة الهيراريكية في عندي two options الأول
general والتاني حالة خاصة الأول ان اتعامل مع كل
entity ست من هدول كtable لحالي انا هيرسم فيها
تلاتة entities اذا three tables لو كانت عندي
employees وفي تلت أنواع من ال employees هيصيروا
أكمل جدول أربعتلت أنواع و ال parent الرئيسي
هيصيروا أربعة لو كان عندي خمس أنواع من الموظفين
خمسة و ال parent صاروا ستة هذا الحل ال general
الحل التاني أنه لأ أستغني عن ال parent و بس أعمل
table زمين لل childs لل sub entities هيسميناها
احنا super entity و هذه sub entity parent و child
الحل التاني اني بس اعمل ال sub entities او ال
child في هذه الحالة لما بدي اعمل بس ال sub
entities معناته لازم اجيب المعلومات اللي هان و
احطها لكل table منهم يعني انا عندى الان هده موظفين
هدول موظفين بالساعة hourly employees و contract
employees ال hourly employees فيه لهم عدد الساعات
اللي اشتغلوها ال hours worked و ال hours wages
اللي هي سعر الساعةالان لاحظوا هنا في الجدول هذا
ماعنديش لا رقم الموظف و لا اسمه ولا اي بيانات
تانية عنه موجودة وين فانا اذا بدي ألغي ال
employees بدي ألغيه بس بدي اعتمد على ال sub
entities معناه انك بدي اجيب المعلومات هاي و احطها
في ال table هذا عشان يكون المعلومات كاملة يكون
عنده الاسم و الرقم و ال lot مع المعلومات هذه لكل
design من هدول مزايا و عيوب نشوف مزايا الأول و
عيوبالحل الأول من مزايا أنه انا يكون عندي التلاتة
مع ال parent يعني موجود أول ميزة إليه أنه بخفف علي
في موضوع ال columns بيصير ال tables هدول ما لهم
صغار حجمهم أقل لأن مافيش فيهم columns كتيرالميزة
التانية أنه لما بدي أعمل search أو بحث عن كل
الموظفين سهل جدا أجيب معلوماتهم من ال table
الرئيسي لأن كلهم موجودين فيه كل الموظفين أرقامهم
واسمهم و ال lot number بتاعتهم موجودة في هذا
الجدول لذلك أنا بعمل select من one table بس بس
بعمل ال select من one table يعني ال query بتاعتي
simple مش complex مش معقدة هذه ميزةالعيب تبعها أنه
لو أنا بدي معلومات إضافية عن الموظف مش بس رقمه
واسمه بدي عدد الساعات اللي اشتغلها و سعر الساعة و
أمور زي هيك هيصير لازم ال query بتاعي تكون معقدة
أن أدمش بين الجدولين أعمل joint بينهم لسه ماخدناش
ال joints هضطر أن أعمل في ال select joints بين ال
two tables عشان أطلع المعلومات هاي عيبةالميزة
الأخيرة اللي إلها أنه لو في عندي موظف مش بعقد و مش
بالساعة، موظف جاي متطوع، وين نحطه؟ وين نسجله؟هنحطه
في ال employees ال general هنحطله بس اسم و رقم و
خلاص المعلومات ال general و مش هنضيفه لا على ال
contract ولا على الناس اللي بتشتغل في السياسة يعني
لو اده متطوع او موظف منتدب او كده يعني النوع مش
موجود عندى هحطه بس في ال parent مش هيكون موجود في
ال childلكن لو أنا لغيت ال parent اللي هو الحل
التاني و بس عملت ال child معناته لازم إذا بتذكروا
أخدنا إيش اسمه ال coverage constraints لازم يكون
فيه coverage يعني أي موظف عندي لازم يكون يا بعقد
يا بالساعة لإن أنا لغيت ال parent لإن أنا مايكون
عندي متطوع أنا مضطر أسجله يا في الجهة يا في الجهة
يا ماقدر أروح أنشق table جديد علشان يصيروا التلاتة
مع بعض عاملين coverageلل employees وبالتالي الحل
التاني إجباري يكون فيه covering ومايكونش فيه
overlapping ال overlapping عشان نذكر أنه يكون فيه
تداخل يعني الموظف يكون بعقد وفي نفس الوقت بيشتغل
بالساعة فإذا في overlapping برضه الحل التاني
مابينفعشالكلام هذا مشروع في هذه ال slide هي الحل
الأول ال general اللي هو اللي بظبط في كل الحلات
اني بروح بعمل three relations لل employees لل
hourly employees و لل contract employees ال
alternative الحل التاني اني بس اعمل two relations
للمين لل sub لل child اللي هم الموظفين بالساعة و
الموظفين بالعقد الحل الهدفي له شرط هي الشرط محطوط
في الآخر انه must be coveringلازم ال child هدول
بيعملوا covering لل parent بشكل كامل و no
overlapping يعني لو كان العكس لو no covering او
اذا في overlapping انا مجبر استخدم ال general
approach طيب بدنا نطبق ال general approach بدنا
نطبقه مع بعض اول
اشي بدي اعمل table ل ال employees حاط فيه كام كلمة
تلاتة مين ال primary key حاجة عمل ال table التاني
ال hourly employees كم كلهم فيه تلاتة تلاتة مين
اللي حكى تلاتة صح بالضبط تلاتة هاي عندي الأثنين
هدول والتالت اللي هو ال SSN عشان بده أربط ال
hourly employees إذا employee فيه إشي بده يربط إيش
اللي بيربط foreign key primary key تبع ال employee
بده يصير foreign key في الجهة هذه فهاخد ال SSNلأنه
primary key لل parent و احطه .. احطه هان هي ال SSN
هيكون عبارة عن foreign key بيأشر على ال parent و
في نفس الوقت هو برضه ال primary key تبع الجدول
الجديد يعني هو foreign key و هو في نفس الوقت
primary key ليش primary key؟ الموظفين هدول كيف ده
ميزهم عن بعض؟إيش المعلومة لا بتتكررش؟ رقم الموظف
الموظفي ممكن يتشابه في عدد الساعات اللي اشتغلوها
خلال الأسبوع أو الشهر ممكن يتشابه بسعر الساعة لكن
مش ممكن يتشابه برقم الموظف فهو foreign key من ال
hourly employees لل employees هو في نفس الوقت ال
primary key تبع ال table الجديد نفس الشي عند ال
contract employees كم كلهم عندى؟إتنين ال contract
ID رقم العقد و ال SSN هجيبه و أحطه ك foreign key و
في نفس الوقت هو ال primary key تبع الجدول الجديد
يعني ال SSN هو ال primary key في التلاتة محطوط
hint صغيرة في ال slide إنه كيف هنعمل الجدول هاي
مثال hourly employees هيكون فيه ال hourly wagesفي
ال hours worked وفي مع ال assistant و ال assistant
حطين تحتها إيش؟ حطين تحتها خط طيب في كمان معلومة
اللي علاقة في ال delete لما أنشأ جدول بهذا الشكل
لو أنا حذفت موظف هنا هل المنطقة تظهر بياناته هنا؟
معناته أنا on delete إيش بتعمل؟ cascade و هنا نفس
الاشي on delete؟ cascadeالتيابل التيابل اتنين
تاعون ال child لازم احط فيهم على ال foreign key
اللي هو ال SSN اكتب on delete كسكت وهي الكلام هذا
برضه مضح انه اذا فيه reference ل employee tuple
انا بده اعمله delete لازم احذفه من وين لازم احذفه
من الموظفين اللي بالساعة كلام هذا انا بده اترجمه
بانه كسكت
بنتكلم عن الternary relations كيف نترجمهم ل tables
نحولها ل tables في مثال سابق أخدناه في ال chapter
2 كان عندي tertiary relation بين employees و
police's dependents وروحنا حولنا الternary لإيش؟ ل
two binaryعملنا برتشزر ان الموظف بيشتري بوريس
التأمين لأبناءه و البوريسة هذه بيستنفع منها واحد
من أبناءه وهي في عندي key constraint و عندي key
constraintطب تعالوا نعد three entities two
relations يعني في الأصل لازم نعمل five tables لكن
وجود ال key constraint هيخلنا نعمل عملية damage
فهيصير عند هاي table و هاي كمان table كم table صفه
تلاتةالتابل الأول مش هتكلم عنه لإنه very simple
أخدناه أكتر من مرة create table employees SSN و
name a lot و ال SSN هو ال primary key خلصنا منه
تعالوا نشوف تفاصيل ال two tables هدول تابل الأول
هسمي اللي هو ال policies هحط فيه إيش policy IDو
cost و ايش كمان هذه relation يعني بترتبط مع ال
employees يعني ايش بدي اجيب ال SSN هجيبه foreign
key صاروا عندى تلاتة SSN و police ID و cost ال
foreign key هو ال SSN و ال primary key مين ال
police ID خلصنا هيك لأ مش كفاية بما انه في keyو ال
.. ال key ده thick line يعني total participation
يعني ممنوع يكون في policy ID مالهاش موظف بيملكها،
إيش معنى ممنوع مايكونش، مايكونش فاضي يعني، not ..
not nullnot null لسه ماحكيناش عن موضوع ال delete ف
not null حاجة أشوف شكل ال table create table
policies policy ID و course و SSN ال SSN not null
عشان أضمن ال total participation أنه كل policy
إلها مين إلها SSN طب أنا كيف حضمن أن ال policy هاي
مش فاضية بيه أصلا عبارة عن إيش primary key و احنا
حكينا primary key by default notفإذا لا ال policy
فاضية ولا ال SSN فاضى تمام ال foreign key ال SSN
ال references ال employees ال delete هيخلوها الأخر
حنتكلم عنها أخر إشي هنيجي
على الجدول التاني لنعمل جدول ال dependence مع
علاقة اللي هي إيش ال beneficiary الاستفادة في عندي
age وعندي name بينامو ايش بدنا نجيب كمان بوليسي ID
بوليسي ID هذا foreign key بدو ييجي وين مع ال
dependents وين ال primary key بينام لأ مش لحاله
بينام مع ال بوليسي ID ال بينام مع ال بوليسي ID
فانا هاي ال command تبع ال create table DDL
command
create table dependents عند ال B name عند ال age
هدول أخدناهم من ال dependent ال policy ID أخدناها
من ال relation تمام ال primary key combined ال B
name اللي كان تحته dashed lines و ال policy ID ليش
ال B name كان تحته dashed lines لأنه ال dependents
weak weak entity بتعتمد على وجود entity تانية ليه
ال policy أو ال employeesالـ foreign key مين الـ
policy ID الـ references مين الـ table الـ
policies اللي أنشأناها هذه الـ policy ID اللي هو
الـ primary key صار في الجهة هذه الـ foreign key
primary key و policy ID جيبنا foreign key خلصنا
الجدول تعالى نشوف إيش بده يصير لما نعمل delete لما
أنا موظف عنده يستقيل أو يطلعمباشرة أبنائه ما
بيلزموني بدي أعملهم delete وبما أن الأبناء بدوني
أعملهم delete معناته ال policies بتاعة التأمين
اللي لهم اللي هي للأبناء ما بتلزمني فانا بدي لما
أعمل delete لل employee يعمل delete لل policies و
delete لل policies يعمل delete لل dependence فبدي
أعمل on delete cascade في ال table الأول تبع ال
policies و on delete cascade في ال table تبع ال
dependenceهذا الكلام حطيناه في آخر صفة on delete
cascade on delete cascade طبعا لاحظوا ال on delete
cascade بتيجي بعد ال foreign key يعني انه ال
foreign key هدى اذا انحدث من الجدول هدى اعمله
delete هعمل delete لل dependent لما ينحدث ال
policy ID هعمل delete لل policy ID هدى لما ينحدث
مينال SSN اللي هو الموظف يعني الأساس من ال
employee هو اللي لما ينحذف هيحذف فائدة و هيقدر
يحذف اللي بعده زي ال domino لما بيقع حجر بقى كله
بنزلبنلخص ال syntax تبع بعض الأوامر اللي أخدناها
عندي أول syntax ال create table هيك احنا شرحنا ال
create table بشكل معمق ومرينا على ال create view
ومرينا على ال create sequence و ال create domain
ال create sequence و ال create domain غطيتهم أنا
التفاصيل اللي بتلزمنا فيهم بغطناهم الآن ال create
table في عنا أكتر من شكل إلها فانا نخصهم في ال
slide هذي عشان ما انا اتلخبطش فيهم الشكل الأول
فانا عندي create table اسم ال table و بحط أسماء ال
columnsdata types الو هي domain constraint يعني و
بعدين بحط constraints إذا بده أحط constraints زي
إيش ال constraints اللي ممكن نحطهم هايهم primary
key, foreign key, unique أو not null و ممكن أحط
default و أحط بعدين قيمة إذا بده أعطي لكل مهدا
default إيش value
الطريقة التانية أنه أنا أجيب ال constraints هذه
بدل ما هي موجودة في نفس السطر مع ال column name
أجيبها وين تحت فهحط أنا بس ال column name و ال
data type و أحط ال default إذا بده أحط default و
بعدين في الآخر تحت بحط constraint و بعطي اسمو بحدد
أيش نوع ال constraint primary key أو foreign key و
بحط بين قسين أسماء ال columns اللي بديها تكون
primary أو foreign مثال عملي على الكلام هذا نفس
المثال نفس الجدول بس بتلت طرق مختلفة كلها صح لو
حلينا بأي طريقة كلها صح ده عمل create table لل
department في أربعة columns department number
department name location مكان و manager number رقم
المديرعطيت ال data types وهي وين حطيت ال
constraints في نفس السطر primary key و unique not
null لاحظوا ال dname كام constraint عليه اتنين ال
unique لحال و ال not null لحال الحل التاني ان اجيب
ال constraints هحطهم تحت حطينا نفس المعلومات هاي و
جيبنا ال primary key حددنا اسمه اللي هو department
numberو ال unique حددنا اسمه اللي هو من ال D name
الطريقة التالتة أنه أنا نفس الشيء ال constraints
تحت بس بتعطي ال constraints أسماء حاجة أقبل كلمة
primer و أقبل كلمة unique حاجة أحط constraint و
أعطي اسم department BK constraint و أعطي اسم D
name UN اختصار uniqueأيش فايدة ال constraint أعطيه
name الفايدة الأولى في حالة ال error بيصير يطلعلي
في ال error messages بس يلا أعرف وين ال error أو
وين المشكلة الفايدة التانية لما بدي أعدل على
الجدول الآن هنجي نتكلم عن ال alter table تعديل
الجداول بيساعدني أن أحذف ال constraint هذا بسهولة
لإن هو إله اسم فأنا بحكيله drop ال constraint اللي
اسمه department BK ايش بروح بعمله بيحذف السطر هذا
من create table من تعريف الجدول من ال schema بتاعة
الجدولأو إذا بدى أضيف constraint جديد بحكيله add
constraint و بعطيه اسم و بحكيله أنه هذا primary
key أو unique أو foreign key فالاسم لل constraint
بيسهل عليه في التعديل و في البرمجة بشكل عام ف good
practice للمبرمج أنه يتعود يحط أسماء ل ال
constraints ما يتركهاش فاضلةال alter table كل
شرحنا السابق كان كله عن ال create بدا نشيء table
بدا نشيء view بدا نشيء sequence بدا نشيء domain طب
انا انشأت و خلصت و بعدين اكتشفت ان فين دي مشكلة
غلطت في الطباعة او اتغيرت design بعد ما عملنا ال
design و قعدنا ك team مبرمجين مع بعض قعدنا نتناقش
واحد اقترح انه بنضيف column لأ بدا نحذف هذا ال
column لأ هذا ال foreign key بنفعش بدنا column
تاني يكون foreign key بدالهلأ هذا بالفعل ممكن يكون
primary key بدنا اي شي تاني بداله طب عملتي التعديل
هاي كيف دي اعملها عندي حل لأول نروح اعمل drop
table احذف ال table اللي انا انشقته و رد اعمله
create من أول و جديد بالصيغة الجديدة الحل هذا ايش
عيوبهأول عيب له ان ال table هذا لو كنت انا مدخل
عليه بيانات لو انا دخلت عليه بيانات ومعلومات ده
عمل drop ل table ال students في الجامعة وفي عندي
طلاب موجودين كل بياناتهم ايش هتصير هضيق هصير لها
delete فالحل الأفضل من ان اعمل drop برد عمل create
ان اعمل alter alter يعني تعديل alter table هاي اسم
ال command
الو options ايش ممكن اعدل تعالى نشوف ايش ممكن اعدل
بعمل alter table اسم ال table اللى بدى اعدله طبعا
لازم يكون موجود اصلا فى ال database اسم اللى كنا
نعمله create بقدرش اجي اعمل alter table employees
وانا مش عامل ا create table employees ممكن اعمل
اول شىء add column ان اضيف column جديد ممكن اعمل
drop columnأحذف كولوم أحذف كولوم أحذف كولوم أحذف
كولوم أحذف كولوم أحذف كولوم أحذف كولوم أحذف كولوم
أحذف كولوم أحذف كولوم أحذف كولوم أحذف كولوم أحذف
كولوم أحذف كولوم أحذف كولوم أحذف كولوم أحذف كولوم
أحذف كولوم أحذف كولوم أحذف كولوم أحذف كولوم أحذف
كولوم أحذف كولوم أحذف كولوم أحذف كولوم أحذف كولوم
أحذف كولوم أحذف كولوم أحذف كولوم أحذف
كولوم أحذف كولوم أحذف كولومالـ drop column alter
table اسم ال table employees drop column salary بس
بلزمني اسمه بلزمنيش معلومة تانية يعني مجرد ما حط
اسمه بيحذفه فبيحذف ال column هذا لوحده أضحك؟ بحذف
column أو بضيف column العملية التانية ممكن أعمل
modify لل column تعديل على ال columnتعديل قد يشمل
modify و بحط اسمه salary ممكن أغير ال type تبعه في
الحالة الأولى مثلا أنا أضفت salary و أعطيته
integer بعدين أجي التعامل المالي يحكوا لي لا يا عم
في موظفين في كسور في رواتبهم بظبطش ال integer
فحاجة من ال alter table employees modify salary و
أخليها real أو number 6.2 مثلا number 6.2 يعني ان
فيها كسرين عشريةممكن كمان أغير في ال constraint
بتاعة ال table اذا كنا نطلنا اللي قاعد يقول لأ
بدناش نطلنا اللي هيشيلهاممكن احنا الموظف اول ما
يتعين نعينه بدون راتب اسبوع زمن عابر ما نشوف و
نقرر نعمل إجراءات نشوف كام هيكون راتبه لأنه ما
نحسبله سنوات خبرة يمكن ما نحسبلوش فممكن يزيد او
ينقص لأ خليه null فانا ممكن اشيل ال constraints
عنه او اضيف constraints جديدة او احطله default
value زي كأني بنشأ ال column من أول و جديد لكن
بدنا نراعي شغلة في ال modify columnأحيانا ال
database بتخلينيش أعمل modify متى بتخلينيش ال
database أعمل modify من الحلات اللي بتخلينيش أعمل
فيها modify أنه لو كان ال table مثلا كان character
و بدي أحوله ل integer مش هتخليه لأنه مثلا هيكون
مخزن بيانات في ال table integer بدي أتحولها
character مش هتحولها بس character ممكن يتحول ل
variable charactervariable character عشرين و بعدين
اجوا اعترضوا حكولي عامل عشرين حرف بكفيش بدنا يوم
خمسين فاروح اعمل modify اسم ال column و احوله من
variable character عشرين ل variable character
خمسين بمشي
التحويل بين ال data types أحياناً بكون tricky
أحياناً بكون في يعني ممكن بعض الأمور ماتمشيش معاه
بدي أتأكد منها إما بالتجريب أو ترجع ل ال manuals
تبع ال database بتشتغل عليها من database ل
database ال restrictions هي بتختلف بس لما نكون
متذاكرين أنه مش كل ال data types ممكن نعملها
modify ل data type نوع تاني ممكن نضيف كمان
constraints أو نحذف constraints
يعني انا ناسي اضيفه primary key ممكن ارجع اضيفه
ناسي اضيف foreign key ممكن اضيفه في عندي foreign
key بده استغنى عنه ممكن اعمله drop هستخدم .. طبعا
لما هستخدم drop constraint بحط ايش اسمه هذه فائدة
من فوائد وجود الاسم في المثال اللي أخدناه في
create table انه انا اعمل create table و احطله
constraint اسم هذا الاسم بسهل عليه عمليةالالتر
بإني انا احذف ال constraint هذا احكيله التر تابل
employees drop constraint اللي اسمه بحط اسم ال
constraint و بعمله drop نفس الشيء لما اضيف
constraint و بحدد ال type تبعه انه foreign primary
not null unique whatever هاي
أمثلة عملية على ال syntax تبع الالتر اول مثال التر
تابلأيش اسم ال table department ايش بدي اعمل بدي
اضيف عليه كلمة اسمي م count عدد الموظفين او رقمهم
عدد اكم موظف موجود في ال department ال department
هذا في عشر موظفين عشرين تلاتين بدي اعطيه number
اتنين default zero هاي اضفنا كلمة جديد بدي اعمل
alter table برضه لtable department add constraint
debit bk primary key مين؟ debit number دفناله
primary key لو كنا مش ضايفينه primary key alter
table department و بدي أضيف عليه constraint debit
manager foreign key اسمه عبارة عن foreign key
references table معين بدي أعمل alter table و أعمل
modify لكله اللي هو تبع ال imp countبدل ما كان
number اتنين بدي اعمله number تلاتة و لاحظوا هذه
العملية غالبا مسموحة number تلاتة برضه من المشاكل
اللي بتسير مش بس تحويل من integer ل character كمان
لو كان عندى بالاصل لو كان في الاصل هو number ستة و
اجي بعدين اعمله number اتنين مش هيرضىإن أزيده
هيرضى بس إن أنا نزله مش هيرضى ليش لأن لو كنت أنا
مخزن فيه إشي ست أرقام كيف بيصير رقمين هذه برضه من
الأمور اللي ممكن تعملي مشكلة في ال modify
فالموديفاي بدها إيش بدها إن الواحد يتأكد هل ممكن
يعمل modify ولا لأ مش دايما ممكن يعمل modify زي ما
هو بتصور
كيف ممكن نعمل delete لل table احنا أخدنا delete
command بس حكينا ال delete اللي أخدناها عبارة عن
DDL ولا DML DML فهي بتحذف إيش ال rows ال records
مابتحذفش ال table كله نفس ال table ال schema إذا
بدى أحذف ال schema أو ال table نفسه لازم أستخدم
drop table و ال drop table بتضيع ال schema و بتضيع
ال instances اللي جواه كلهdrop table بحط اسم ال
table اللى بدى احذفه و بعديها بحكي اما انه cascade
او barge ايش هدول ال options اول شئ ال barge ال
barge معناته في عندى انا في ال database زى recycle
bin لما بتحذفوا ملف على الكمبيوتر وين بروح اسألت
المهملة دى ال recycle bin ممكن تعمليله استرجاع
restoreالان في في ال database نفس الشيء ممكن انا
لما اعمل drop table ال table هذا بيروح على recycle
bin موجودة في ال database و ممكن اعمله استرجاع لكن
اذا حكيتله برق يعني انا بده احذفه نهائي و حتى
مايروحش كمان على ال recycle bin وبالتالي مافيش
مجال اني استرجعه نهائيا زي shift delete البرق هذه
shift deleteالـ Cascade Constraints إيش بتعمل هاي؟
الآن ال table هذا لو في جاي عليه foreign keys من
tables تانية لما أجي أعمله drop مش هيخليني أعمله
drop يعني أنا ده أحذف table الموظفين ال employees
وفي عند ال dependents فيهم foreign key بيقشر على
رقم الموظف الأولاد بيقشروا على الموظفين الأباهم
فانا بدي أعمل drop لل employees مش هخليني أعمل
drop لل employees إلا إذا حكيتله dropتابل اسمه
cascade في هذه الحالة هيحذف table name please و أي
reference عليه هيحذف ال references اللي عليه عكس
ال cascade restrict اللي هو ده ال option by
default ال database بتكون عاملة drop table name
restrict لكن إذا أنا مابديش restrict بدي أحذف و
أحذف أي إش يبشر عليهبروح بحط cascade هذه مثال drop
table students barg drop table students cascade في
هذه الحالة لو طالب مسجل في مساقات أي تسجيل له في
مساقاته حينحذف وحينشغل بنلخص
ال chapter اللي عندنا فهي أهم مفاهيم ال chapter
تكلمنا في ال chapter هذا عن ال tabular
representation يعني تمثيل ال data على شكل جداول
تابلز تابيولر وسمينا هذه ال representation سميناها
relational database model او ال relational model
حكينا ان ال relational model هي simple سهل لانها
نظام جداول intuitiveوهي حاليا ال most widely used
في العالم لل databases اتكلمنا عن integrity
constraints وحكينا انه لازم يكونوا دائما ال
integrity constraints true لكل ال instances بتاعت
ال database ومهمة ال DBMS انه يحافظ عليهم ان
يكونوا true وما يكسرهم مش violation ومسئوليتي انا
ان اعرفهملل database من خلال ال create table حكينا
من أنواع ال integrity constraints اللى كانت عندى
من أهمها ال primary و ال foreign key و اتكلمنا عن
ال not null و ال uniqueأتكلمنا كمان عن ال domain
constraints و حكينا أن أبسط أنواع ال domain
constraints هو ال data type لكن ممكن أضيف معلومات
زيادة بإني أعمل create domain خاص فيه و أستخدم لل
check أو إن أعمل check في نفس ال create table فأنا
أزيد قدرتي في ال domain constraintsأتكلمنا إن ال
query language اللي بنستخدمها اسمها SQL Structured
Query Language وحكينا إنها بتتميز من أن تستخدم لغة
إنجليزية طبيعية Natural Language إنها سهلة في
الكتابة Create Table, Drop Table, Alter Table,
Insert, Update, Delete كلها كلمات واضحة مافيش فيها
تعقيدات البرمجة اللي في لغات البرمجة التانيةحكينا
انه في قواعد لتحويل ال ER diagram ل relation
الموديل شراحتهم انا اليوم ملخصتهم كيف بنحوّل ال
entity ل table كيف بنحوّل ال relation ل table كيف
لما يكون في بين ال entity و ال relation key
constraint بنجد بنجد tables في بعض كيف نتعامل مع
الإزأة Hierarchy كيف هنترجمها لعدد من ال entities
كل كلام هذا لخصناه هذا كان موضوع شبترنا المرة
القادمة ان شاء الله المفروض نبدأ في chapter 5سوف
نتكلم اكتر عن ال SQL commands بdetails اكتر و
نتكلم عن ال BL SQL اللي هي commands اضافية كيف
ممكن نعمل functions و procedures و triggers في ال
database بحيث انه يكون عندى