Presentation is loading. Please wait.

Presentation is loading. Please wait.

<<2 التحويل من نموذج الكينونات إلى الجداول العلائقية

Similar presentations


Presentation on theme: "<<2 التحويل من نموذج الكينونات إلى الجداول العلائقية"— Presentation transcript:

1 <<2 التحويل من نموذج الكينونات إلى الجداول العلائقية
قاعدة البيانات <<2 التحويل من نموذج الكينونات إلى الجداول العلائقية

2 لغات نظم إدارة قواعد البيانات
ولإنشاء جدول قاعدة بيانات لحفظ البيانات والتعامل معها نستخدم لغات نظم إدارة قواعد البيانات وهي: لغة تعريف البيانات (Data Definition Language DDL): تستخدم بواسطة مدير قواعد البيانات (DBA) وكذلك مصمم قواعد البيانات لتعريف بناء قواعد البيانات يوجد مترجم للغة التعريف (DDL Compiler) وذلك لترجمة هذه اللغة وإنتاج برامج يتم تنفيذها لتقوم بإنشاء مخططات البيانات وتخزينها داخل فهرس قواعد البيانات (DB Catalog) لغة تعريف الأشكال(View Definition Language VDL): تستخدم في بعض نظم إدارة قواعد البيانات التي تستخدم هيكل قواعد البيانات الثلاثى بطريقة حقيقية وذلك لتعريف مخطط البيانات في المستوي الثالث (External Level)

3 ملاحظات على لغات قواعد البيانات
لغة التعامل مع البيانات ( Data Manipulation Language DML): تستخدم لاسترجاع وإدخال وحذف وتعديل البيانات ملاحظات على لغات قواعد البيانات نظم إدارة قواعد البيانات الحالية تستخدم لغة واحدة شاملة تحتوي على لغات DDL,VDL,DML لغة الاستفسار الهيكلية (SQL:Structured Query Language) هي لغة تستخدم مع نموذج البيانات العلائقي و تحتوي علي لغات DDL,VDL,DML وكذلك الجمل الخاصة بتعديل مخطط البيانات يمكن أن يتم كتابة لغة SQL داخل لغة عالية المستوي مثل C, Pascal, .. وعند ذلك لابد من وجود ما يسمى (Precompiler) حيث يقوم بفصل لغة SQL وإرسالها إلى نظم إدارة قواعد البيانات بينما يتم إرسال اللغة عالية المستوى إلى مترجم اللغة

4 لغة التوصيف DDL نستخدم لغة SQL و الجزء الخاص منها لغة التوصيف DDL في إنشاء جداول قاعدة البيانات لحفظ البيانات. إحدى جمل التوصيف هي CREATE TABLE الشكل العام المبسط لهذه الجملة: CREATE TABLE table_name (field1 datatype(length), field2 datatype(length),…….. ); مثال: CREATE TABLE manager( empid NUMBER(11) PRIMARY KEY, name VARCHAR2(30), Tel_no NUMBER(7) NOT NULL);

5 لقد أنشأنا في المثال السابق جدول الموظف employee و بالمواصفات التالية:
ولربط الجداول مع بعضها نستخدم المفتاح الأجنبيforeign key مثال: لربط الجدول السابق مع جدول القسم department مثلا : CREATE TABLE department( Deptno NUMBER(3) PRIMARY KEY, Dept_name VARCHAR2(30), Empid NUMBER(11), FOREIGN KEY (Empid) REFERENCES managers (empid)); تم ربط الجدولين عن طريق الحقل رقم الموظف empid القيود النوع اسم الحقل حقل مفتاح أساسي رقمي empid - حرفي name لا يمكن أن يكون فارغا Tel_no

6 تحويل العلاقات إلى قاعدة بيانات علائقية (Mapping Relationships to a Relational Database ):
1- العلاقات الثنائية (M:N): قم بإنشاء جدول جديد خصائصه هي نفس خصائص المفتاحين الأساسيين للكيانين طرفي العلاقة, والمفتاح الأساسي له مكون من اجتماع المفتاحين الأساسيين للكيانين طرفي العلاقة, قم أيضا بتضمين أي خصائص تملكها العلاقة (M:N) في الجدول الجديد. مثال:في شركة معينة هناك موظفين. و يعمل كل موظف في مشروع او أكثر وكذلك في المشروع الواحد يجب أن يعمل فيه واحد أو أكثر من الموظفين. لكن يمكن أن يكون هناك موظفين لا يعملون في مشاريع. وكل موظف له عدد ساعات عمل في الأسبوع في كل مشروع M الموقع المشروع الموظف يعمل في رقم المشروع رقم الموظف N عدد ساعات العمل اسم الموظف الراتب اسم المشروع

7 جدول الموظف الراتب اسم الموظف رقم الموظف جدول المشروع اسم المشروع الموقع رقم المشروع جدول جديد عدد ساعات العمل رقم المشروع رقم الموظف

8 يمكن كتابة SQL كما يلي: CREATE TABLE emp( empid NUMBER(11) PRIMARY KEY, emp_name VARCHAR2(30), salary NUMBER(5)); CREATE TABLE project( projectid NUMBER(6) PRIMARY KEY, project_name VARCHAR2(30), location VARCHAR2(30)); CREATE TABLE emp_work( empid NUMBER(11), projectid NUMBER(6), PRIMARY KEY(empid, projectid), FOREIGN KEY(empid) REFERENCES emp(empid) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(projectid) REFERENCES project(projectid) ON DELETE CASCADE ON UPDATE CASCADE);

9 2- العلاقات الثنائية (1:1):
إذا كان أحد الأطراف له مشاركة كلية في العلاقة والطرف الآخر له مشاركة جزئية عندها قم بتضمين المفتاح الرئيسي للطرف ذو المشاركة الجزئية في جدول الطرف ذو المشاركة الكلية وقم بتضمين خصائص العلاقة (إن وجدت) في جدول الطرف الذي يحصل على المفتاح الرئيسي (إن المفتاح الرئيسي للطرف ذو المشاركة الجزئية يمثل الآن المفتاح الأجنبي في العلاقة الجديدة). إذا كان كل من الطرفين لهما مشاركة جزئية يمكن اختيار أي من جدولي الكيانين ليخزن المفتاح الرئيسي للكيان الآخر (سيكون لدينا بعض القيم الصفرية NULL لبعض الخصائص). ج- إذا كان كل من الطرفين لهما مشاركة كلية يمكنك اختيار أحد الجدولين ليتضمن المفتاح الرئيسي للجدول الآخر كمفتاح أجنبي وكذلك ليتضمن خصائص العلاقة إن وجدت.

10 مثال: ليكن لدينا الكيانSTUDENT و بفرض أن الزبون بعد رؤيته للمخطط و التوصيف الكتابي وكذلك نماذج البيانات قال: "أريد تسجيل جميع السيارات التي يقودها الطلاب“. بفرض أن السيارات المسجلة في قاعدة البيانات يجب أن تقاد من قبل طالب واحد وواحد فقط ومن الممكن أيضا لطالب ما أن يقود سيارة واحدة وواحدة فقط. من أجل كل طالبSTUDENT سيكون هناك اسم name وهو مكون من(الاسم الأول , الاسم الأخير , الاسم الأوسط)، وسيكون هناك عنوان address وعمر الطالب age و الذي يحسب اعتمادا على التاريخ الحالي و تاريخ الولادة birthdate. وخصائص سيارة الطالب (رقم السيارة , صانع السيارة , النموذج , اللون , سنة الموديل)

11

12 نلاحظ هنا أن المشاركة الكلية هي من طرف السيارة (AUTOMOBILE) ويوجد مشاركة جزئية من قبل الطالب (STUDENT) لذا سنأخذ المفتاح الرئيسي من الطرف ذو المشاركة الجزئية (STUDENT) ونضمنه في جدول السيارة (AUTOMOBILE) لذا سنضمن المفتاح الرئيسي للطالبstudent_number في جدول السيارة كمفتاح أجنبي , و هذا موضح فيما يلي:

13 يمكن كتابة SQL كما يلي: CREATE TABLE student( student_number NUMBER(11) PRIMARY KEY, name.first CHAR(10), name.last CHAR(10), name.mi CHAR(10), address VARCHAR2(30)); CREATE TABLE Automobile( Vehicle_id NUMBER(11) PRIMARY KEY, make VARCHAR2(30), body_style VARCHAR2(30), color VARCHAR2(10), year NUMBER(4), student_number NUMBER(11) NOT NULL, FOREIGN KEY(student_number) REFERENCES student ON DELETE SET DEFAULT ON UPDATE CASCADE);

14 3- العلاقة الثنائية (1:N):
أ- إذا كان الطرف (N) ذو مشاركة كاملة قم بتضمين المفتاح الرئيسي للطرف(1) في جدول الطرف N كمفتاح أجنبي. القيود: المفتاح الأجنبي لا يمكن أن يكون فارغا هنا لأن المشاركة كلية ب- إذا كان الطرف (N) ذو مشاركة جزئية يتم معاملة العلاقة (1:N) تماما كالعلاقة (M:N) باستخدام جدول منفصل للعلاقة, ويكون مفتاح الجدول مكون من مفاتيح الجداول المرتبطة . مثال: المريض يمتلك سجل مرضي واحد أو أكثر ولكن ليس من الضروري ان يكون لكل مريض سجل مرضي. وكذلك لا يمكن أن يكون هناك سجل مرضي ليس مرتبط بمريض. سجل مرضي مريض يمتلك رقم السجل رقم الموظف 1 N

15 يمكن كتابة SQL كما يلي: CREATE TABLE patient ( pnumber NUMBER(11) PRIMARY KEY, name VARCHAR2(30), address VARCHAR2(30)); CREATE TABLE patient_record( record_no NUMBER(20) PRIMARY KEY, Dept_no NUMBER(30), pnumber NUMBER(11) NOT NULL, FOREIGN KEY(pnumber) REFERENCES patient ON DELETE SET DEFAULT ON UPDATE CASCADE);

16 4-العلاقة الثلاثية(ternary relationship) :
تمثيلها بالواقع يترتب على حسب نوع العلاقة: أ- متعدد-إلى-متعدد-إلى-متعدد(many to many to many) ب- واحد-إلى-متعدد-إلى-متعدد (one to many to many) ج- واحد-إلى-واحد-إلى-متعدد ( one to one to many) د- واحد-إلى-واحد-إلى-واحد ( one to one to one) العلاقة الثلاثية(P:M:N): سنوضح المفهوم من خلال المثال التالي: يستخدم الموظفون عدة مهارات في أي من المشاريع المختلفة، وكل مشروع يعين له موظفين بمهارات مختلفة. اسم المشروع نوع المهارة رقم الموظف الالكترونيات الحاسوب 10 الرياضيات الميكانيكا الرسم 11 الاحصاء المهارات المشروع يستخدم مهارات النوع اسم المشروع M الموظف P N رقم الموظف

17 يمكن تحويلها إلى النموذج العلائقي كما يلي:
جدول المشروع(اسم المشروع، ) جدول الموظف(رقم الموظف، ) جدول المهارات(نوع المهارة، ) جدول جديد-استخدام المهارات(رقم الموظف،نوع المهارة،اسم المشروع) القيود هنا: رقم الموظف واسم المشروع ونوع المهارة لا يمكن أن تكون فارغاnot null CREATE TABLE emp( empid NUMBER(11) PRIMARY KEY, emp_name VARCHAR2(30), salary NUMBER(5)); CREATE TABLE project( project_name VARCHAR2(30) PRIMARY KEY, location VARCHAR2(30));

18 يمكن كتابة SQL كما يلي: CREATE TABLE skill( type VARCHAR2(30) PRIMARY KEY); CREATE TABLE skill_used( empid NUMBER(11), project_name VARCHAR2(30), type VARCHAR2(30), PRIMARY KEY(empid, project_name,type), FOREIGN KEY(empid) REFERENCES emp ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(project_name) REFERENCES project ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY(type) REFERENCES skill ON DELETE CASCADE ON UPDATE CASCADE);

19 ب- العلاقة الثلاثية(1:M:N):
مثال: لكل مهندس يعمل في مشروع ما هنالك مدير، فإن لكل مهندس هنالك أكثر من مدير ويعمل في أكثر من مشروع المدير المهندس يعين رقم المدير رقم الموظف 1 المشروع M N اسم المشروع تحول إلى النموذج العلائقي كما يلي: المشروع(اسم المشروع، ) المدير(رقم المدير، ) المهندس(رقم الموظف، ) جدول جديد-يعين(اسم المشروع، رقم الموظف، رقم المدير) القيود هنا:رقم المدير يجب أن لا يكون فارغا NOT NULL

20 يمكن كتابة SQL كما يلي: CREATE TABLE engineer( empid NUMBER(11) PRIMARY KEY, emp_name VARCHAR2(30), salary NUMBER(5)); CREATE TABLE project( project_name VARCHAR2(30) PRIMARY KEY, location VARCHAR2(30)); CREATE TABLE manager( manager_id NUMBER(11) PRIMARY KEY); CREATE TABLE manage( empid NUMBER(11), project_name VARCHAR2(30), manager_id NUMBER(11) NOT NULL, PRIMARY KEY(empid, project_name), FOREIGN KEY(empid) REFERENCES emp ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(project_name) REFERENCES project ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY(manager_id) REFERENCES manager ON DELETE CASCADE ON UPDATE CASCADE);

21 ج- العلاقة الثلاثية(1:M:1): مثال: كل موظف يعمل في مشروع وفي موقع واحد ولكنه يمكن أن يعمل في أكثر من موقع لمشاريع مختلفة. ففي الموقع الواحد يمكن أن يعمل موظف في مشروع واحد فقط علما بأنه في الموقع الواحد يمكن أن يعمل أكثر من موظف في مشروع ما. اسم الموقع رقم الموظف اسم المشروع B1 10 X E1 Y A1 20 D1 Z G1 30 40 W المشروع الموقع يعمل اسم المشروع اسم الموقع 1 الموظف M رقم الموظف

22 يمكن تحويلها إلى النموذج العلائقي كما يلي:
جدول المشروع(اسم المشروع، ) جدول الموظف(رقم الموظف، ) جدول الموقع(اسم الموقع، ) جدول جديد-يعمل (رقم الموظف،اسم المشروع،اسم الموقع) القيود هنا: اسم الموقع لا يمكن أن تكون فارغاnot null المفاتيح المرشحة: رقم الموظف، اسم المشروع رقم الموظف، اسم الموقع المفتاح الرئيسي: رقم الموظف، اسم المشروع

23 يمكن كتابة SQL كما يلي: CREATE TABLE employee( empid NUMBER(11) PRIMARY KEY, emp_name VARCHAR2(30), salary NUMBER(5)); CREATE TABLE project( project_name VARCHAR2(30) PRIMARY KEY, location VARCHAR2(30)); CREATE TABLE location( Loc_name VARCHAR2(10) PRIMARY KEY); CREATE TABLE assigned( empid NUMBER(11), project_name VARCHAR2(30), Loc_name VARCHAR2(10) NOT NULL, PRIMARY KEY(empid, project_name), FOREIGN KEY(empid) REFERENCES employee ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(project_name) REFERENCES project ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY(Loc_name) REFERENCES location UNIQUE(empid,loc_name) );

24 ج- العلاقة الثلاثية(1:1:1): مثال: يستخدم المهندس جهاز حاسوب شخصي واحد لكل مشروع وكل حاسوب شخصي هو ملك لمهندس واحد في كل مشروع، علما بأن المهندس يمكن أن يعمل في أكثر من مشروع ويستخدم أكثر من حاسوب شخصي لمشاريع مختلفة. رقم الحاسوب رقم الموظف اسم المشروع 10100 10 T1 10101 T2 10110 20 T3 10111 T4 11000 30 11001 40 50 T5 المشروع الحاسوب يستخدم اسم المشروع رقم الحاسوب 1 المهندس رقم الموظف

25 يمكن تحويلها إلى النموذج العلائقي كما يلي:
جدول المشروع(اسم المشروع، ) جدول المهندس(رقم الموظف، ) جدول الحاسوب الشخصي(رقم الحاسوب، ) جدول جديد-يستخدم (رقم الموظف،اسم المشروع، رقم الحاسوب) المفاتيح المرشحة: رقم الموظف، اسم المشروع رقم الموظف، رقم الحاسوب رقم الحاسوب، اسم المشروع المفتاح الرئيسي: رقم الموظف، اسم المشروع القيود هنا: رقم الحاسوب لا يمكن أن يكون فارغاnot null

26 يمكن كتابة SQL كما يلي: CREATE TABLE engineer( empid NUMBER(11) PRIMARY KEY, emp_name VARCHAR2(30), salary NUMBER(5)); CREATE TABLE project( project_name VARCHAR2(30) PRIMARY KEY, location VARCHAR2(30)); CREATE TABLE notebook( notebook_num NUMBER(10) PRIMARY KEY); CREATE TABLE use_notebook( empid NUMBER(11), project_name VARCHAR2(30), notebook_num NUMBER(10) NOT NULL, PRIMARY KEY(empid, project_name), FOREIGN KEY(empid) REFERENCES engineer ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(project_name) REFERENCES project ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY(notebook_num) REFERENCES notebook UNIQUE(empid, notebbok_num) UNIQUE(project_name, notebbok_num));

27 4-العلاقة الذاتية(recursive relationship) :
تمثيلها بالواقع يترتب على حسب نوع العلاقة: أ- متعدد-إلى-متعدد(many to many) ب- واحد-إلى-متعدد (one to many) ج- واحد-إلى-واحد ( one to one) حسب العلاقة تختلف نوع التمثيل والبناء في قاعدة البيانات، لكن برسم ال ER فهي متشابهة مع اختلاف طرفي خط العلاقة العلاقة الذاتية(متعدد-إلى-متعدد) وطرفي العلاقة اختياري: سنوضح المفهوم من خلال المثال التالي: كل موظف يمكن أن يكتب تقرير مع واحد أو أكثر من الموظفين وكذلك يمكن أن يكتبه لوحده. الموظف يكتب التقرير مع M N رقم الموظف اسم الموظف

28 الموظف(رقم الموظف، الاسم)
مؤلف مشترك(رقم الموظف، رقم المؤلف المشترك) يمكن كتابة SQL كما يلي: CREATE TABLE employee( empid NUMBER(11) PRIMARY KEY, name VARCHAR2(30)); CREATE TABLE coauther( autherid NUMBER(11), coautherid NUMBER(11), PRIMARY KEY(autherid, coautherid), FOREIGN KEY(autherid) REFERENCES employee (empid) ON DELETE CASCADE ON UPDATE CASCADE FOREIGN KEY(coautherid) REFERENCES employee (empid) ON DELETE CASCADE ON UPDATE CASCADE);

29 ونحول الشكل إلى النموذج العلائقي:
العلاقة الذاتية(واحد-إلى-متعدد) وطرف العلاقة (متعدد) اختياري والطرف الآخر(واحد) اجباري: يتم تمثيل العلاقة على شكل جدول يحتوي على المفتاح الأجنبي وهو عبارة عن المفتاح الرئيسي للجدول. المفتاح الأجنبي هنا لا يمكن أن يكون فارغا مثال: يتم تجميع المهندسين على شكل مجموعات بناء على المشاريع التي يعملوا بها وكل مجموعة من المهندسين لهم مسئول. ونحول الشكل إلى النموذج العلائقي: المهندس(رقم الموظف ، الإسم،رقم المسئول) المهندس مسئول عن M 1 رقم الموظف اسم الموظف

30 يمكن كتابة SQL كما يلي: CREATE TABLE engineer( emp_id NUMBER(5) PRIMARY KEY, name VARCHAR2(30), leader_id NUMBER(5) NOT NULL, FOREIGN KEY(leader_id) REFERENCES engineer(emp_id) ON DELETE SET DEFAULT ON UPDATE CASCADE);

31 العلاقة الذاتية(واحد-إلى-واحد) وطرفي العلاقة اختياري:
العلاقة الذاتية(واحد-إلى-واحد) وطرفي العلاقة اختياري: يتم تمثيل العلاقة على شكل جدول يحتوي على المفتاح الأجنبي وهو عبارة عن المفتاح الرئيسي للجدول نفسه. المفتاح الأجنبي هنا يمكن أن يكون فارغا مثال: يسمح للموظف أن يتزوج موظفة في نفس الشركة. ونحول الشكل إلى النموذج العلائقي: المهندس(رقم الموظف ، الإسم،رقم الزوج) الموظف يتزوج 1 رقم الموظف اسم الموظف

32 يمكن كتابة SQL كما يلي: CREATE TABLE employee( emp_id NUMBER(5) PRIMARY KEY, name VARCHAR2(30), sponse_id NUMBER(5), FOREIGN KEY(sponse_id) REFERENCES engineer(emp_id) ON DELETE SET NULL ON UPDATE CASCADE);

33 العلاقة بين نوع الكينونة الضعيفة ونوع كينونة القوية
يتم إنشاء جدول لكل من الكينونة الضعيفة وجدول للكينونة القوية . يكون المفتاح الرئيسي للكينونة الضعيفة مفتاحا مركبا من المفتاح الرئيسي للكينونة القوية والمفتاح الجزئي للكينونة الضعيفة. مثال: الموظف(اسم الموظف، رقم الموظف) الأبناء المعالين(اسم المعال، رقم المعال، رقم الموظف ) Create table emp( emp_name varchar2(30), emp_no number(5) primary key); Create table dependent( dependent_name varchar2(30), dep_no number(3) not null, emp_no number(5) not null, foreign key(emp_no) references emp On delete cascade on update cascade); الأبناء الموظف يؤمن رقم الهوية رقم الموظف N الإسم الإسم 1 الأبناء

34 الخاصية المركبة Create table student(st_no number(5) primary key,
يتم تمثيل الخصائص البسيطة المكونة للخاصية المركبة في الجدول. مثال: يتم تحويلها إلى النموذج العلائقي التالي: الطالب(رقم الطالب،البلد، الشارع، رقم الهاتف) Create table student(st_no number(5) primary key, Tel_no varchar2(30), Street varchar2(30), City varchar2(30)); رقم الهاتف رقم الطالب الشارع الطالب العنوان البلد

35 الخاصية ذات القيمة متعددة
يتم إنشاء جدول جديد لهذه الخاصية والمفتاح الرئيسي لها يكون مركبا من المفتاح الرئيسي للكينونة إضافة إلى الخاصية مثال: يتم تحويلها إلى النموذج العلائقي التالي: الطالب(رقم الطالب،اسم الطالب( إيميل_الطالب(رقم الطالب،الايميل) Create table student(st_no number(5) primary key, st_name varchar2(30)); Create table student_ (st_no number(5), varchar2(30), primary key(st_no, ), foreign key(st_no) references student on delete cascade on update cascade); الطالب رقم الطالب اسم الطالب

36 مثال: يطلب معرفة البلدان المجاورة لكل بلد مع توضيح الجهات الجغرافية الموافقة لها
ER : العلاقة هنا احادية(ذاتية) وونوع العلاقة واحد الى متعدد DB : يجب بناء جدول فيه الدول ولكل دولة رقم خاص بها واسم الدولة ورقم الدولة المجاورة. قد يطلب معرفة البلدان التي يمر بها كل نهر علما أن النهر يمكن أن يمر بأكثر من بلد والبلد يمكن أن يمر فيه أكثر من نهر ER : العلاقة هنا ثنائية ونوع العلاقة متعدد الى متعدد (لانه قد يرتبط النهر باكثر من دولة وقد ترتبط الدولة باكثر من نهر. DB : يجب بناء جدول فيه الدول ولكل دولة ID خاص بها وبناء جدول للانهار ولكل نهر رقم خاص مفرد واسم النهر. كما يجب بناء جدول ثالث يوجد به رقم الدولة ورقم النهر وكلاهما مفتاح أساسي كيان البلدان له علاقة مع نفسه من أجل معرفة البلدان المجاورة وله علاقة مع الأنهار لمعرفة الأنهار التي تمر في البلدان


Download ppt "<<2 التحويل من نموذج الكينونات إلى الجداول العلائقية"

Similar presentations


Ads by Google