مشاهدة النسخة كاملة : بناء الجداول في MySQL -


المحــ البرمجى ــتوى
11-27-2006, 11:35 AM
عنوان الدرس: بناء الجداول في MySQL -

الآن أخي القارىء و قد عرفت كيفية بناء جدول شبه متكامل, إذن لنبدأ بإنشاء أول جدول لنا على بركة الله.

سجل دخول إلى MySQL , ثم قم باستخدام قاعدة البيانات movie_store , و سنقوم الآن بإنشاء الجدول employees كالتالي:

# الجدول employees :

1. رقم العامل emp-no : نمط هذا العمود هو int و يضم قيمة فريدة لكل عامل لذلك سنجعله مفتاحا أساسيا و يأخذ قيم الترقيم التلقائي أي auto_increment .

2. الاسم الكامل للعامل name : نوع العمود هو محرفي متغير الطول قياسه 25 محرف varchar(25) لا يقبل الـ NULL , و سنضع فيه القيمة الافتراضية في حال أن المستخدم لم يقوم بإدخال اسمه هي no name.

3. الوظيفة job : هذا العمود يضم اسم الوظائف الخاصة بالموظفين فهو إذا عمود محرفي متغير الطول قياسه 20 محرف.

4. راتبه المقطوع salary : عمود يتضمن راتب الموظف, نوع العمود هو رقمي float قياسه 8 خانات منها خانتين للكسور و لا يقبل الـ NULL و القيمة الافتراضية هي 8000 .

5. الحوافز bonus : و هذا العمود يضم الحوافز و المكافآت التي يأخذها الموظف و نوع العمود هو float(7,2) و يقبل الـ null أي أنه من الممكن ألا يكون للموظف حوافز أو مكافآت.

6. تاريخ مباشرة العمل date : عمود يحوي التاريخ الذي انتسب فيه الموظف إلى الشركة و نوع العمود هو timestamp و قياس العمود هو 8 أي YYYY-MM-DD و يقبل الـ NULL .

هذا الكلام الذي ذكرناه توا يتم تدوينه على المسودة و عند وضع اللمسات الأخيرة على تصميم الجدول, و بعد ذلك تقوم بتنسيقه كما هو موضح في الصورة التالية:
http://www.aramcode.com/vb/imgcache/316.imgcache
قد تعتقد أخي القارىء أن هذا الشكل معقد بعض الشيء لكنه ليس كذلك فاسم العمود هو مألوف لديك و هو الاسم الذي ستضعه للعمود.

أما نوع العمود فالمقصود به هو نوع البيانات المدخلة في هذا العمود, فعمود name تكون بياناته أسماء أعلام و بالتالي فإن نوع البيانات المدخلة فيه هي محارف أي char و لكني في الجزء الأول من درس (أنواع الأعمدة و الجداول في MySQL) كنت قد شرحت أن النوع varchar أفضل من النوع char .

أما null فلاحظ الأعمدة التي تقبل القيمة NULL مكتوب عندها yes و التي لا تقبلها لا يوجد شيء مكتوب, و قد منعت الأعمدة (name , salary , job) من قبول القيمة null لأنه ليس من المعقول أن يكون موظف بلا اسم أو راتب أو وظيفة.

و بالنسبة إلى المفتاح فهناك نوعين من المفاتيح و هي المفتاح الأساسي Primary key و المفتاح الغريب foreign key و كنت قد شرحت عنهما في الجزء الأول من درس مفاهيم في قواعد البيانات العلائقية.

أما القيمة الافتراضية و سمات أخرى, أيضا شرحتهما في درس (استخدام التعليمة Create في قواعد بيانات MySQL).

هذا هو الشكل الرئيسي لإنشاء أي جدول فعندما تعمل أنت مع فريق عمل برمجي و يكون المطلوب منك هو تصميم قاعدة البيانات التي تصنعها أنت و مجموعتك, فعندها تقدم الشكل السابق.

و الآن سأقوم بكتابة الكود اللازم لبناء هذا الجدول:

1. create table employees(

2. emp_no int auto_increment,

3. name varchar(25) not null default 'na name',

4. job varchar(20) not null default 'seller',

5. salary float(8,2) not null default 8000,

6. bouns float(7,2),

7. date timestamp(8),

8. primary key(emp_no),

9. index index_on_employees(salary)

10. ) type=myisam;

أولا : لاحظ أنه من السطر رقم 2 إلى السطر رقم 8 يوجد فاصلة عند نهاية الأمر للفصل بين كل أمر و الأمر التالي له, أما السطر 9 فلا يوجد فاصلة و ذلك لأنها هي آخر تعليمة داخل القوسين الحمر.

ثانيا : لاحظ في السطر 8 حيث أن المفتاح الأساسي وضعته كسطر منفرد حيث أنه من الممكن أن أضعه كسمة للعمود emp_no كما يلي:

emp_no int auto_increment primary key,

و لكن قد تقول ما الفائدة من وضعه بسطر منفرد؟؟ الفائدة هي أنه في بعض الحالات تحتاج فيها أن يكون المفتاح الأساسي على أكثر من عمود, ففي مثالنا هذا إذا كان المفتاح الأساسي على العمودين emp_no , name فيتم ذلك كما يلي:

primary key ( emp_no , name ),

ثالثا: في السطر التاسع قمنا بإنشاء فهرس و سنتعلم لاحقا عن الفهارس إن شاء الله, لكن الآن يجب أن تعرف الآن أن إنشاء الفهرس يكون وفق الخوارزمية التالية:

index index_name(indexed_col)

سادسا: في السطر 10 و الأخير قمنا بتعيين نوع الجدول و قد اخترته من النوع myisam و إذا لم أقم بوضع نوع للجدول فإن MySQL سيقوم بوضع هذا النوع افتراضيا.

و الآن لتقوم أخي القارىء ببناء الجدول الثاني و هو الجدول addresses , لنبدأ على بركة الله.

أولا: خذ هذا التصميم لجدول addresses كما هو موضح في الصورة التالية:
http://www.aramcode.com/vb/imgcache/317.imgcache
لاحظ بأن العمود emp_no هو عمود مفتاحي و نوعه foreign key , و كنت قد شرحت عنه في درس (مفاهيم في قواعد البيانات العلائقية - الجزء الأول), أما عن كيفية إنشاءه فستتعلم ذلك الآن إن شاء الله.

ثانيا: الكود الخاص بالجدول addresses

create table addresses(

add_no int primary key auto_increment,

emp_no int(10),

state varchar(30) not null default 'Syria',

emp_email varchar(40),

foreign key(emp_no) references employees(emp_no));


طبعا الأسطر الخمسة الأولى شرحناها في الدرس الماضي (بناء الجداول في MySQL - الجزء الأول), لاحظ في السطر الثاني كيف أن primary key وضعناها على شكل سمة.

أما بالنسبة للسطر الأخير فهو لإنشاء المفتاح الغريب, حيث أن جملة foreign key تقوم بإعلام الملقم بأنني أريد أن أنشىء عمودا ًهو مفاتح غريب, و بين القوسين نقوم بوضع اسم العمود الذي أريده أن يكون مفتاح غريب, أما الكلمة references فمعناها (يشير إلى) ثم أكتب اسم الجدول الذي أريد أن يشير المفتاح الغريب إليه و بداخل القوسين أشير إلى اسم العمود الذي يشير إليه المفتاح الغريب.


ملاحظة:

كيف لي أن أعرف بأن هذا المفتاح الغريب يشير إلى ذاك العمود من ذاك الجدول؟ الجواب هو أنه يجب أن تكون ملما بشكل كبير بتحليل و تصميم قواعد البيانات, أما هذه الدروس فهي لتعليم كيفية برمجة قواعد بيانات الإنترنت. راجع الدروس الأولى كي تأخذ فكرة بسيطة و سريعة جدا عن تحليل و تصميم نظم قواعد البيانات, و هي تفيدك في الاستمرار معنا في هذه السلسلة الدرسية.


و بالعودة إلى الجدولين employees , addresses ستجد أنك تعلمت بعون الله كيف تبني الجداول برمجيا و تضع أعمدتها و تحدد نوع كل عمود و سماته, كما تعلمت أيضا كيفية إنشاء المفتاح الأساسي, و المفتاح الغريب, و الفهرس, و أعود و أذكرك أخي القارىء بأن الفهارس سنتعلمها في الدروس المقبلة إن شاء الله.

و قبل أن ننهي الدرس هناك تعليمة حلوة و هي:

show create table table_name G;

هذه التعليمة تفيد في إظهار الخطوات التي تم خلالها بناء الجدول, فكي ترى خطوات بناء الجدول employees أكتب:

show create table employees;

و الفائدة من هذه التعليمة هو أنه في حال أردت أن تقوم بعملية صيانة للجدول فأنك يجب أن تعرف هيكليته كي تستطيع أن تغير في خصائصه أو سماته أو أي شيء فيه.

و الآن بعد أن عرفت كيفية إنشاء جدول ستقوم أخي القارىء ببناء الجداول الباقية وحدك إن شاء الله, لنبدأ على بركة الله.

قم بإنشاء الجداول التالية:

# جدول Movies :

http://www.aramcode.com/vb/imgcache/318.imgcache
# جدول Clients :
http://www.aramcode.com/vb/imgcache/319.imgcache
# جدول Suppliers :
http://www.aramcode.com/vb/imgcache/320.imgcache

لاحظ أن القيمة الافتراضية للعمود sup_email تحوي الفاصلة العلوية و هذا المحرف هو من المحارف الخاصة التي سنتعرف عليها بإذن الله في الدروس القادمة, و لكن كي يدرك ملقم MySQL بأن هذه الفاصلة هي محرف و ليس علامة برمجية فيجب أن تسبقها علامة الهروب back slash لذلك نكتب هكذا عند إنشاء الجدول :

sup_email varchar(40) not null default 'haven't email'

و لا نكتب كما يلي:

sup_email varchar(40) not null default 'haven't email'

# جدول Bills :

http://www.aramcode.com/vb/imgcache/321.imgcache
إذن أخي القارىء هذه هي الجداول التي نريدها لبناء قاعدة البيانات الخاصة بنا, قم ببناء هذه الجداول كما تعلمنا في الدرسين الماضيين.

و بذالك نكون قد انتهينا من بناء قاعدة بياناتنا movie_store بشكل جزئي