الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الأسس العلمية لقواعد البيانات

مثبّتمغلقرائج
بدأه InternetMaster في 4 نوفمبر 2003 · 236 رد · 400,402 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#76

أستاذنا الموفق .. بعد التحية والإكبار والإعجاب

أجيب على السؤال :

بالنسبة للسؤال عن الربط :

نربط Fathers بـ Items واحد لمتعدد ليكون كل أب له عدة أصناف اشتراها

ونربط Items بـ Sons أيضاً واحد لمتعدد ليكون كل صنف له عدة مشترين من الأطفال

#77

السلام عليكم ورحمة الله وبركاته

بارك الله فيك يااخي وجزاك الله خير على المجهود الرائع والمثمر باذن الله .

نعم من اراد ان يتعلم قواعد البيانات فعليه البدايه من هنا وكما قال اخينا الكريم بالورقه والقلم اولا .

معلومه اضافيه :

جدول الابناء تسمى بالكينونه الضعيفه weak entity اي ان وجودها مرتبط بوجود جدول اخر .

سؤال للاخ انترنت ماستر : لماذا جعلت رنامج الاكسس هو الذي يحدد نوع العلاقه لماذا لم تحددها على الورق من البدايه .

ولماذا نضع جدولين العلاقه بينهما هي one to one والسبب هي كمساله امنيه لحفظ البيانات الذي اعرفه ان العلاقه هي التي تفرض نفسها فلايمكن ان نجعلها one to one الا اذا كانت كذلك .

واخيرا اسال الله العلي القدير ان يوفقك ويجزيك عنا خير

#78

ما شاء أخي علالي, كنت متيقنا من ردة فعلك التي أثلجت صدري.

سوف تستفيد بالكثير ان شاء الله, أجدد الدعاء لأخينا internetmaster بالأجر الكبير و التوفيق في كل ما يصبو اليه.

1
#79

مرحبا،،،

وصلنا (بعد التفجير الذي عطلنا والعياذ بالله) إلى كيف نربط Items الجدول الجديد الخاص بالأصناف...

نعود إلى مستر Codd للمساعدة....

لنركز...

الأطفال هم الذين يمكلون الأصناف وبالتالي الإستنتاج الأول هو أن جدول الآباء ليس له أي دخل في هذه العلاقة. العلاقة يجب أن تنشأ بين جدولي Items و Sons.

إذا استعرنا ItemNum من جدول Items ووضعناه حقلا غريبا في جدول الأبناء فإننا ننشىء علاقة واحد إلى متعدد (كل طفل لديه مجموعة من الأصناف) ولكننا نكون خلقنا مشكلة تكرار الأبناء لأن الطفل رقم 120 يحق له شراء أكثر من صنف وبالتالي إذا قام بشراء براية ومحاية قمنا بنتكرا رقم الطفل 120 وهذا مستحيل لأن رقم الطفل مفتاح أساسي. طبق على الورق لتفهم.

إذا إستعارة ItemNum ووضعه في جدول الأبناء حل مرفوض.

إذا استعرنا SonNum من جدول Sons ووضعناه حقلا غريبا في جدول الأصناف فإننا ننشىء علاقة واحد إلى متعدد (كل صنف يملكه مجموعة من الأطفال) ولكننا نكون خلقنا مشكلة تكرار الأصناف لأن الصنف رقم 91 يمكن شراؤه من أكثر من طفل وبالتالي إذا قام طفلان بشراء الصنف رقم 91 المسطرة قمنا بنتكرا رقم الصنف 91 وهذا مستحيل لأن رقم الصنف مفتاح أساسي. طبق على الورق لتفهم.

مرحباً بك في عالم الضياع.....

باءت كل محاولاتنا لإنشاء علاقة (واحد إلى متعدد) بين الأصناف والأبناء--- باءت إلى الفشل.

ما هي المشكلة التي أمامنا؟؟؟

المشكلة تكمن في التالي:

كل طفل يستطيع أن يمتلك أكثر من صنف

وفي نفس الوقت كل صنف يستطيع أن يمتلكه أكثر من طفل

أي ان العلاقة من Items إلى Sons هي واحد إلى متعدد

وفي نفس الوقت العلاقة من Sons إلى Items هي واحد إلى متعدد

إذا كانت العلاقة (واحد إلى متعدد) في الإتجاهين فإن العلاقة تصبح (متعدد إلى متعدد) Many To Many

مرحبا بك إلى هذا النوع من العلاقات....

في علاقة (متعدد إلى متعدد) ربط الجدولين ببعضهما البعض ---- ركز --- دقق - افتح عينيك ---------------- مستحيــــــــــــــــــــــــــــــــــل !!!!

مهما حاولت أن تربط بين جدولين بعلاقة (متعدد إلى متعدد) فلن تستطيع والسبب أنك ستضطر إلى إلغاء المفتاح الأساسي في أحد الجدولين للسماح بالتكرار (للمتعدد) وهذا ينسف تماسك وتكامل قاعدة البيانات.

إذا ما هو الحل؟؟

ألوووو -- مين معي على الخط --- مستر Codd مرحبا --- ما هو الحل...

الحل : إنشاء جدول تقاطعي Junction Table -- شكرا مستر Codd

أهلا.... ما هو الجدول التقاطعي؟ --- إستخدم الدفتر

أولاً ما معني Junction --- في سكك الحديد هناك دائما محطات، هذه المحطات تسمح للقاطرات بتغيير سكة الحديد للإتجاه إلى مدن مختلفة وتكون في أبسط أشكالها على شكل علامة ضرب × ومن هنا جاءت فكرة التقاطع لهذا العالم الفذ.

عندما تصطدم بجدولين العلاقة بينهما في أي إتجاه هي علاقة (واحد إلى متعدد) تكون أمامك علاقة (متعدد إلى متعدد) وللربط بينهما تقوم بإنشاء جدول جديد يسمى بجدول التقاطع أو Junction Table

جدول التقاطع هو من اسهل الجداول إطلاقا وينشأ بإستعارة المفتاح الأساسي من الجدولين:

الجدول Items مفتاحه الأساسي ItemNum نقوم بإستعارته

الجدول Sons مفتاحه الأساسي SonNum نقوم بإستعارته

أنشأ جدولا جديدا فيه الحقلين التاليين:

ItemNum نص 3

SonNum نص 4

ماذا ينقصنا الآن؟؟؟؟ من يجيب؟؟؟ صح؟؟؟ --- لا يوجد جدول بدون مفتاح أساسي !!!

آها....

ممممممممممممم

ما هو المفتاح الأساسي للجدول .... النايم يصحي !!!!!!!!!

إذا جعلنا ItemNum هو المفتاح الأساسي فلن نستطيع أن نبيع مسطرة لأكثر من طفل

وإذا جعلنا SonNum هو المفتاح الأساسي فلن يشتري أي طفل أكثر من صنف واحد

مــــــــــــــــــــــا هــــــــــــــــــو الحل؟؟؟؟

من يتذكر لوحات السيارات !!!!!!!!!!!!!!!!!!!!

نعم مجموع الحقلين هو المفتاح الأساسي...

نشط كلا الحقلين ItemNum و SonNum واضغط على المفتاح الأساسي

"بهمس وبصوت خفيف --- هناك مشكلة --- بعدين)..

الأن أحفظ الجدول بإسم SonsItems وتعالو بنا نربط هذا الجدول

في صفحة الحلاقات بإستخدام الزر اليمين أضف الجدول SonsItems إلى صفحة العلاقات

ركز...

من جدول الأبناء إسحب SonNum وأسقطه على SonNum في جدول SonsItems ثم ضع صح على التكامل وصحين على كل من التعديل والحذف. لاحظ شكل العلاقة في أسفل الصفحة ---- نعم هي واحد إلى متعدد.

من جدول الأصناف إسحب ItemNum وأسقطه على ItemNum في جدول SonsItems ثم ضع صح على التكامل وصحين على كل من التعديل والحذف. لاحظ شكل العلاقة في أسفل الصفحة ---- نعم هي واحد إلى متعدد.

واجب منزلي....

هل نستطيع تكرار رقم الإبن في SonsItems؟ لماذا؟

هل نستطيع تكرار رقم الصنف في SonsItems؟ لماذا؟

منذ قليل همست في أذنكم بصوت منخفض أن هناك مشكلة !!!!!!!!!

من يقول لي ما هي المشكلة الآن؟

اين العباقرة الذين سيحلون هذه المشكلة؟

فكروووووووووووووووووو وتعذبوووووووووووووو

تحياتي،،،

--------------------------

ملاحظة للأخ AraFox: لم أفهم عزيزي ماذا قصدت بهذه الجملة (ولماذا نضع جدولين العلاقه بينهما هي one to one والسبب هي كمساله امنيه لحفظ البيانات الذي اعرفه ان العلاقه هي التي تفرض نفسها فلايمكن ان نجعلها one to one الا اذا كانت كذلك)

عموما أخي العزيز العلاقات نمط فلسفي يعتمد على كيفية تصميم قاعدة البيانات وقد شرحنا في أحد الدروس اننا نستطيع تغيير هذه العلاقة ما عدا (متعدد إلى متعدد) عندما نشاء متى ما نشاء كيفما نشاء. أوضح لي قصدك.

3
#80

أتوقع أن هذه علاقة many to many أو متعدد إلى متعدد بين جدولي Sons وitems

ويجب أن تكسر هذه العلاقة بواسطة جدول جديد وفيه الحقول التالية

SonNum و ItemNum ويكون كل من الحقلين السابقين مفتاح غريب ومربوط مع الحقل المناظر له في جدولي ال Sons وitems

هذا مجرد تفكير مني أأمل التصويب

▲ 1
#81

أخي العزيز Internet master اسمح لي مشاركتي الأخيرة

نزلت مع مشاركتك السابقة في نفس الوقت يعني ردي السابق وضعته قبل أن أقرأ مشاركتك الأخيرة

تحياتي

#82

أتوقع أن المشكلة تكمن في وضع مجموع الحقلين SonNum و ItemNum مفتاح أساسي في جدول SonsItems لأنه في هذه الحالة لن يستطيع أي ابن

مثلا أن يشتري سلعة واحدة أكثر من مرة يعني أفرض أن الطالب محمد اشترى قلم وانكسر قلمه وأراد أن يشتري قلم مجددا في هذه الحالة لن يستطيع لأن رقمه ورقم القلم سيتكرران مرة أخرى

طبعا هذا مجرد تفكير مني

تحياتي

تم تعديل هذه المشاركة بواسطة ha98 في 9 نوفمبر 2003 في 04:17

#83

يظهر من ذلك أننا لن نستطيع تكرار إدخال سجل سابق تم إدخاله مسبقا ، لأنه يتكون من مفتاحين أساسيين و هذين المفتاحين يمثلا مفتاحاً أساسيا واحدا لنفسه ، ومن خلال ذلك لا يمكن تكرار قيم مفتاح أساسي .. .. ربما ..

#84

ما قاله الاخ ha98 هو عين الصواب

ولكن لي ملاحظه على عدد الخانات لكلا الحقلين في جدول SonsItems

ItemNum نص 3

SonNum نص 4

لا ادري ان كان خطأ مطبعي ام له هدف اخر الله اعلم

لان حقل ItemNum في جدول Items بنص 2 حانة فقط

وحقل SonNum في جدول Sons بنص 3 خانات فقط

حسب شرحك السابق

وسلامتك

اما بالنسبه للحل حاولت وصلت للتالي

قمت بعمل مفتاح اساسي جديد SonItemNum وهو مطلوب حسب القانون الذي ذكرته انت وازلت علامة المفتاح الاساسي من الحقلين ItemNum و SonNum على اعتبار انهما حقلان غريبان

وقمت بربطها بالعلاقات من واحد الى متعدد كما تفضلت مع تتالي التحديث والحذف

وفرضت خاصية مطلوب لكلا الحقلين حتى لا يتم تركهما فارغان

وبهذه الطريقة يستحيل ادخال اي رقم مادة غير موجوده

في جدول Items وكذلك لا يتم ادخال رقم طفل اذا لم يكن موجود اصلا في جدول Sons

ويمكن تكرار شراء اي عدد غير محدد من الادوات للطفل

بس ما ادري هل هي فعلا الطريقة الصحيحه ام اخليت باحد شروط Codd

هذا والله اعلم

تم تعديل هذه المشاركة بواسطة alhajri في 9 نوفمبر 2003 في 08:37

#85

جزاك الله كل خير اخي الكريم InternetMaster

على هذا المشاركة الرائعة جدا والمجهود الذي بذلتة

فقد ركزت على الطريقة الصحيحة

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

جعل الله هذا العمل في موازين حسناتك ان شاء الله

ولك كل التقدير والاحترام

#86

يجزيك الله ألف خير ويعوضك الأجر في هذا الشهر الفضيل

بصراحة دروس مفيدة للراغبين في تعلم قواعد البيانات

فأرجوا المتابعة حتى النهاية

مع تحياتي

#87

ربما الحل هو بإضافة حقل مفتاح أساسي جديد في جدول SonsItems وتكون مجموع الثلاثة حقول عبارة عن مفتاح أساسي

#88

مرحبا،،،

أشكر الأخ (alhajri) الذي قام بتصحييح عدد الخانات -- نعم خطأ مطبعي، أما إستحداث حقل اسمه SonItemNum فطبعا خطأ لأن هذا لا يتبع قانون كيفية ربط علاقة (متعدد إلى متعدد).

طبعا مشكلتنا الان هي ما طرحه الأخوة جميعا وهي عدم القدرة على شراء صنف رقم 91 وهو المسطرة من نفس الطفل صاحب الرقم 120 مثلا. وهذا هو أجمل ما في العلاقة (متعدد إلى متعدد) والتي تتيح إنشاء جدول على شكل جسر أو تقاطع من خلال جدول جديد اسمه جدول التقاطع Junction Table، بعبارة أخرى لدينا جدول جديد نستطيع أن نفعل فيه ما نشاء.

مرة أخرى (من قال أن جدول التقاطع يقتصر على الحقلين الغريبين فقط) ؟؟؟؟!!!!

قانون: عند تشابه القيم والخصائص تتحول العملية برمتها إلى (مجرد عد) فقط.

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

أضف الحقل التالي إلى جدول التقاطع SonsItems:

Qty رقم

إحفظ الجدول

ما الذي حدث الآن... عند شراء أي طفل لأي صنف نضع كمية الشراء

قم بإضافة السجلات التالية إلى جدول التقاطع SonsItems:

110 90 3

110 91 2

110 92 7

110 95 5

110 99 9

120 93 6

120 99 2

130 90 2

130 94 2

130 97 4

170 92 12

حيث يمثل العمود الأخير الكمية المشتراة من كل صنف. إحفظ الجدول.

-------------

أين نحن الآن؟ وماذا إستفدنا حتى تاريخه؟

كل الموضوع يتعلق بتماسك وتكامل قواعد البيانات

النماذج والتقارير والمايكروز في الآكسس هي للعبث وإضاعة الوقت حتى لغة البرمجة المرتبطة فيها والتي تسمى VBA أو Access Code هي مجرد عبث وهي لغة مشوه جدا من لغة البرمجة VB

أن برامج قواعد البيانات المتقدمة (المعتمدة على خادم) Server مثل Oracle و MS SQL ليس فيها لا نماذج ولا تقارير ولا مايكروز ولا بهارات...!!!!

ن التماسك والتكامل يخضع إلى قوانين محكمة تساعد في إنشاء Skeleton او الهيكل العظمي او الخرساني لقاعدة البيانات بشكل صحيح.

أن عملية ربط الجداول (ليست نزهة) تتم في دقائق. والغريب أن معظم من قابلتهم في حياتي المهنية يصرفون 10% من وقتهم على بناء الجداول والإستعلامات و90% لألوان النماذج والتقارير وتحريكها وترقيصها وتدليعها وتسطيرها --- غريب !!

لقواعد بيانات من الوزن الثقيل والتي يمكن أن تباع في السوق يجب أن يحدث العكس 90% لتصميم الجداول والإستعلامات و10% للباقي من الزبرقة والبهارات والنماذج وغيره.

أن العلاقة بين الجداول دائما غير واضحة في البداية ويمكن تشكيلها بعدة طرق وعدة حلول، ومن هنا جاءت فكرة (فريق العمل) عندما تقوم بتصميم قاعدة بيانات فإنك تعقد سلسلة من الإجتماعات ينصب معظمها على الجداول والربط والإستعلامات وتظل تدور في هذه الحلقة حتى تضمن تماسك وتكامل القاعدة.

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

إرجع إلى ملاحظتي للأخ (alhajri) في بداية هذا الدرس --- ببساطة قلت له خطأ (وريحت دماغي وأعصابي) لماذا؟ لا أريد أن أفكر في حله في للمشكلة، لماذا؟ لأن لدينا حل آخر أسهل ووأوضح وأفضل من خلال إدراج الكمية ... ولكن لحظة ...

ماذا لو طلب صاحب قاعدة البيانات (التي نقوم بتصميمها له) أن يكون هناك حقل يوضح تاريخ الشراء للأطفال ؟؟؟؟!!!!

في الحل السهل الذي قمت بإتباعة لم ألتفت إلى حل (alhajri) متلافيا صداعا وفكرا إضافيا، لكن بإدخال (تاريخ لشراء) فإن هذا يعني أن الطفل سيشتري 10 مساطر يوم السبت و5 مساطر يوم الأحد... التكرار الآن لا مفر منه ... وستكون مشكلة خانقة تتطلب دعوة فريق العمل لإجتماع. لأنه في حالة إدخال تاريخ الشراء إنهار التماسك والتكامل وعندها نذهب الى الأخ (alhajri) ونبوس راسه ونقول له (تكفى إشرح) مرة ثانية. عند إدراج تاريخ الشراء لا يوجد حل سهل سحري وسريع، ليس لدي حل جاهز... انا وانتم بحاجة إلى التفكير العميق الذي قد يؤدي إلى إعادة تصميم القاعدة بشكل مختلف. طبعا دائما وأبدا هناك حلول لأي مشكلة في قواعد البيانات.

ما الذي أقوله؟

إن تصميم الجداول وربطها عملية في غاية التعقيد وقد عملت أكثر من تجربة في المحاضرات التي ألقيتها لأرى أن كل مجموعة تقوم بتصميم قاعدة البيانات بطريقة مختلفة وكلها صحيحة ولكن الفروق تكمن في سهولة حل عن آخر، وكلمة سهولة تعني سهولة في إدخال البيانات سهولة في إعادة فك وتركيب قاعدة البيانات سهولة في صيانة قاعدة البيانات وسجلاتها وحقولها.

العملية ليست نزهة ... العملية ليست طبق من السلطة يحضر في دقائق مكونا من شوية حقول على كام إستعلام على شوية بهارات ماكروز على نموذج من هنا وتقرير من هناك.

أخي (alhajri) سنعود إليك لتنقذنا فيما بعد عندما نفجر رؤسنا تفكيرا في كيف نربط جداول قاعدة بيانات المستوصف.

كان الهدف هو الحصول على المبلغ الذي دفعه كل أب مقابل مشتريات إبنه ولأن جدول الأصناف فيه ItemCost كان بالضرورة وجود حقل يوضح الكمية Qty لضرب الكميتين والحصول على تكلفة الشراء.

صحيح أننا قمنا بعمل بعض الإستعلامات دون شرحها وهذا ما سنفعله الآن.

ماذا سنفعل؟

سنترك الجاول والروابط ونعود إليها فيما بعد... متى؟ بعد أن نتحدث على واحدة من أقدم لغات البرمجة في العالم... وهي لغة SQL.

تحياتي،،،

1
#90

مرحبا،،،

لنتفق قبل البداية،،،

SQL تعني Structured Query Language وهي لغة برمجة قواعد البيانات ولا علاقة لها ببرنامج شركة ميكروسوف Microsoft SQL Server هي مجرد لقافة من شركة ميكروسوفت لإستعارة الإسم.

إذا:

SQL هي لغة برمجة

MS SQL Server هو خادم متقدم لقواعد البيانات صمم من شركة إسمها ميكروسوفت وMS إختصار للكلمة Microsoft.

إتفقنا؟

لن أضيع وقتكم الثمين في تاريخ هذه اللغة وأين ولدت ومن أبوهما ومن هي عمتها، حيث يعج الإنترنت بهذه المعلومات ويمكنكم البحث عنها بسهولة وقرائتها وأنا أنصح بذلك متى تشاؤون.

دعك من حرف S وأرمي حرف L في سلة المهملات وركز كل التركيز على الحرف Q حيث أنه هو المفتاح السحري للعملية كلها.

Q = Query

Query تعني إستعلام إستفسار إستفهام إستنباط إستنبطاااح ---- وصلت الفكرة؟؟؟

السؤال البديهي والتقليدي هو ما الفرق بين الجدول والإستعلام؟

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

لا تمزح مع الجدول... الجدول لا يقبل المزاح ول لا العبث ويغلب عليه التماسك والشدة والعبوس والتجهم.

الإستعلام (ولد صايع) على رأي الأخوة في مصر ... حبوب، لذيذ، يحب المزاح، سهل التعامل معه، يقبل كل أنواع المزاح والعبث ولكن إذا مزحت معه من (اليمين)، إذا مزحت معه من (اليسار) --- نسف قاعدة البيانات من جذورها. هل سمعت بمثل إتق شر الحليم اذا غضب --- هذا هو الإستعلام !!!

لأن السيد Codd مزق حقولنا ووزعها في جداول مختلفة كان لا بد من طريقة ما لتجميع هذه الحقول مع بعضها البعض !!!

الجدول هو الإستعلام، والإستعلام هو الجدول !! مع مرونة عالية جدا جدا جدا في كيفية تشكيل الإستعلام.

SQL هي لغة تستخدم علم (المصفوفات) من الرياضيات للوصول إلى الحلول --- ولا يهمك حقيقة ماذا تستخدم ولكن للعلم بالشىء فقط لمحبي هذا العلم الرائع المسمى المصفوفات Matrices ومفردها مصفوفة Matrix.

الغريب في SQL أنها عميقة الجذور وفي غاية التعقيد الشديد جدا، ولكن الممتع في الموضوع أن كامل اللغة بكل أبعادها تتكون من أقل من 10 أوامر -- صدق أولا تصدق أو حتى أقل من 5 أوامر على ما أذكر !!!

قلنا أن SQL تمزح من الجهة اليمين --- وتغضب من الجهة اليسار، ما معنى هذا؟

هناك إستخدامين إثنين فقط للغة SQL واحد أسميه مزاح من اليمين والآخر مزاح من اليسار:

الإستخدام الأول (مزاح من اليمين): هو الحصول على البيانات بأي شكل وبأي كيفية

الإستخدام الثني (مزاح من اليسار) : هو تحديث Skeleton او الهيكل الخرساني لقاعدة البيانات أي تغيير وتعديل الجداول والحقول والروابط ---- اااووو خطير جدا !!!

الآكسس (بغبائه) وليتبع قوانين شركة ميكروسوفت في وجود برامج سهلة تشعر مستخدميها بسهولة قواعد البيانات وضعت لك برامج صغيرة داخل الآكسس تساعدك على إنشاء الجداول، ووضعت صفحة تساعد على إنشاء العلاقات، ووضعت صفحة سهلى تساعدك على إنشاء الإستعلامات وهكذا ....

هذه البرامج الصغيره (في الحقيقة) مجرد واجهة بينك وبين SQL، الذي يقوم بالعمل كله من ألفه إلى يائه هو SQL

أشهر أوامر SQL هو الإمر (إختر) أو إنتقي SELECT

يحتاج شرح هذا الأمر عدة أيام وعدة محاضرات ولكنني سأضعك على الطريق الصحيح للتعلم ثم تنطلق أنت.

تركيب جملة SELECT يتكون من عشرات الأوامر الفرعية وأسهل شكل لها هو:

كلمة Select

بعدها فراغ أو مسافة

بعدها إسماء الحقول مع وجود فاصلة بعد كل إسم حقل

بعدها فراغ

بعدها كلمة From

بعدها إسم الجدول

تعال نأخذ مثالا وهو يوضح أيضا آلية عمل الآكسس..

إفتح إستعلام جديد في قاعدة بيانات Family

ستظهر لك نافذة تسألك عن الجداول التي تريد أن تستخدمها في الإستعلام

إضغط إغلاق Close بدون إختيار أي جدول...

الصفحة الآن بدون جداول...

من القائمة الرئيسية إختر (عرض) View ثم (عرض SQL) --- ماذا ترى؟

ترى جملة واحدة فقط وهي SELECT

إكتب الجملة التالية في السطر الأول

Select FatherName From Fathers

نفذ الإستعلام --- ماذا حدث؟؟

ليس هذا فقط،، بل من قائمة (عرض) View إختر (عرض التصميم) Design View،،، مممممممم...

ماذا ترى؟؟؟

مرحبا بك في عالم ال Select

تحياتي،،،

1
#91

مرحبا،،،

قلنا أن الأكسس ومثله MS SQL يساعدنك على إنشاء الجداول والإستعلامات من خلال برامج صغيرة --- نعم ركز --- فقط يساعدنك ولكن إنتبه مجرد مساعدة وليس حل كامل متكامل!!!

ماذا يعني هذا؟

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

إذا أرت أن تبيع قواعد بيانات

إذا أردت أن تكون ضمن فريق عمل لتصميم قواعد البيانات

إذا أردت أن تقبض نقود وتبيع للسوق

إذا أردت أن تكون محترفا

يجب أن تتعلم أوامر SQL وإلا فإنك تضيع وقتك ولن تقفز حاجز المعلومات التي لديك،، بعبارة أخرى ستبقى معلومات تراوح مكانها وستصب جام غضبك على النماذج والتقارير والماكروز التي تستنزف جهدا لا نتيجة ولا قيمة له.

الجملة:

Select FatherName From Fathers

تخضع للتركيب Syntax الذي شرحناه.

كلمة Select

ثم فراغ

ثم أسم حقل واحد

ثم فراغ

ثم كلمة From

ثم فراغ

ثم إسم الجدول

ماذا إذا كنت أريد أكثر من حقل --- بسيطة بين الحقول ضع فاصلة مثل

Select FatherName, FatherNum From Fathers

مستر Codd يصير على تيمييز الحقول ويقول لنا حتى لا تتورطو فيما بعد في مشاكل كبيرة وكثيرة (قوموا بتمييز الحقول عن بعضها البعض) --- ماذا يعني هذا؟

إفترض أن لديك جدولين مختلفين وفي كل جدول منهما يوجد حقل إسمه FatherName هذا يخلق واحدة من أخطر مشاكل قواعد البيانات والذي يسمى Ambiguity ويعني الإلتباس والغموض. حيث لن تفهم SQL من أي جدول تريد بيانات الحقل FatherName

لتصحيح ما سبق ولتمييز الحقول نستخدم إسم الجدول قبل إسم الحقل وبالطبع يستحيل أن يكون هناك جدولان بنفس الإسم في نفس قاعدة البيانات --- لنصحح ونتبع شروط مستر Codd

Select Fathers.FatherName From Fathers

Select Fathers.FatherName, Fathers.FatherNum From Fathers

وضعنا إسم الجدول قبل كل حقل وبينهما نقطة.

إعكس الموضوع في الآكسس أو MS SQL قم بإنشاء إستعلام بالطريقة التقليدية، غفتح إستعلام جديد، نقر مزودج على جدول Fathers، إغلاق ثم نقر مزدوج على كل من الحقلين FatherName ثم FathersNum

قم بإستعراض جملة SQL من قائمة عرض View

سترى نفس الجملة السابقة --- طبعا دعك من الفاصلة المنقوطة في نهاية الجملة --- لا قيمة لها الآن

ماذا يعني هذا كله؟

يعني أننا نستطيع إستغلال طريقة الآكسس وكذلك MS SQL في إجراء الكثير من التجارب ومن ثم الإطلاع على جملة SQL وكيفية تركيبها

نترك قواعد البيانات كلها.

في علم البرمجة ثلاثة أنواع من العمليات:

Arithmetical Operations أو العمليات الحسابية وهي عمليات الضرب والقسمة والجمع والطرح والأسس والوغاريثمات والجذور والمثلثات والفراغية والجبر و..ز إلخ

Comparison Operators أو عمليات المقارنة مثل المساواة وعدم المساواة وأكبر من وأصغر من و...إلخ

Logical Operations أو العمليات المنطقية وهي "و" "أو" "لآ" AND, OR, NOT ... إلخ

نعود إلى قواعد البيانات وهي تستخدم كل ما سبق من العمليات.

طبق المثال التالي...

من خلال إستعلام أظهر كل الأباء من جدول الأباء وكل الأبناء من جدول الأبناء -- قمنا بهذا سابقا ولكن الآن أريد أن تساهد جملة Select

SELECT Fathers.FatherNum, Fathers.FatherName, Sons.SonNum, Sons.SonName FROM Fathers INNER JOIN Sons ON Fathers.FatherNum = Sons.FatherNum

كل ما أريده منك هو التركيز على الجملة (Inner Join) من يتذكر --- من يكتب معنا، طبق النوعين الآخرين وشاهد تركيبة الجملة Right Join وكذلك Left Join

تذكر إنني أحاول أن أضعك على الطريق الصحيح ولا أحاول قطعا تدريس SQL والتي تحتاج إلى الكثير من الوقت والتمارين والتجارب والشرح المباشر.

جملة ORDER BY هي الجملة التي تساعد على ترتيب نتائج الإستعلام

إفتح نافذة استعلام جديد في وضع SQL واكتب الجملة التالية

Select FatherNum From Fathers Order By FatherNum

ماذا تعني؟؟

أظهر كافة بيانات الحقل FatherName من ترتيب أو فهرسة أو فرز (سمه ما شئت) تصاعدي من الأصغر إلى الأكبر ... عد إلى (عرض التصميم) وشاهد كيف تم إنشاء الإستعلام بالطريقة التقليدية.

كيف نستعرض السابق تنازليا

Select FatherNum From Fathers Order By FatherNum DESC

إنظر إلى الكلمة في النهاية Desc وهي إختصار ل Descending أي تنازلي -- طبق وجرب وشاهد وأكتب ملاحظاتك.

ماذا لو أردنا كافة الآباء الذين رقمهم أكبر من 5000؟

نستخدم خاصية الشرط WHERE أي عندما !!! ترجمها كيف تشاء !!

Select FatherNum From Fathers WHERE FatherNum>5000

لاحظ إستخدم أحد (عمليات المقارنة) -- نفذ --- طبق --- شاهد--- فكر --- أكتب --- لخص وإلا لن تفهم شيئا...

طبعا ستجد خطأ في الجملة السابقة ... لماذا؟ لأن رقم الأب (نص) Text و5000 رقم، نستخدم الدوال -- وهي جزء من قواعد البيانات في الآكسس أسمها VAL أي Value أو قيمة، في MS SQL نستخدم Cast أي التحويل.

صحح...

Select FatherNum From Fathers WHERE VAL(FatherNum>5000

ماذا لو أردنا أن نغير عنوان الحقل FatherName لأنه باللغة الإنجليزية ونحن نريده بالعربية

(اواجه مشكلة في الكتابة هنا بين العربية والإنجليزية سأضعها على سطور مختلفة وأنت تلصقها فيما بع في سطر واحد) !!!!

Select

FatherName

As

[إسم الأب]

From

Fathers

ASC

ASC إختصار Ascending أي ترتيب أسماء الآباء من الألف إلى الياء.

أريدك عزيزي القارىء أن تصرف وقتا لا يقا عن أسبوعين (فيما بعد طبعا) على ممارسة جملة SQL

كل ما فعلنا حتى الآن هو المزاح الذي يتقبله SQL منا دون المساس بتكامل وتماسك قاعدة البيانات.

النوع الثاني من المزاح ينقسم إلى شقين:

الأول: تعديل في البيانات داخل الجداول (في السجلات) -- وينبغي الحذر

الثاني: تعديل في الجداول والحقول والروابط بينها --- وهو الخطير -- وينبغي الحذر الشديد جدا

تعدل بيانات الجداول يتم من خلال:

إضافة سجلات جديدة

تعديل سجلات موجودة

حذف سجلات موجودة

تعالوا نستمتع بلغة SQL ونضيف سجلين جديدين لجدول الآباء نستخدم الأمر Insert أي أدخل ولا تنسى عزيزي القارىء نحن نتحدث عن SQL وهي نفسها بالظبط (تقريبا) في كافة برامج قواعد البيانات مثل الآكسس وMS SQL و Oracle وSysbase وغيرها.

يا جماعة -- يا أصحاب الموقع --- لدي مشكلة في التحول بين العربي والإنجليزي -- عموما أنا غشيم في طرق المنتديات سأحاول

Insert Into Fathers Values

)

1500

,

"سعيد خالد القرني"

,

39

(

نفذ الإسنعلام وتأكد من جدول الآباء أن الأب 1500 قد تم إضافته

ومعناها أدخل السجل التالي بالقيم الموجودة بين القوسين حسب ترتيب الحقول في الجدول...

تعال شاهد معي ضعف البرنامج المساعد في عملية إنشاء الإستعلامات،، إذا حاولت الآن إستعراض كيفية صنع هذا الإستعلام بالضغط على (عرض التصميم) لن تستطيع،،، لن يساعد الآكسس --- أنت الآن محترف !!!

تعالو نعديل عمر الأب 1500 من 39 سنة إلى 36 سنة بإستخدام لغة SQL

Update Fathers SET FatherAge = 36 WHERE VAL(FatherNum)=1500

نفذ الإستعلام وقم بالتأكد من أنه تم تعديل عمر الأب 1500 من جدول الآباء

تعال بنا نحذف الأب 1500

Delete From Fathers WHERE VAL(FatherNum)=1500

نفذ وتأكد...

واجب منزلي...

بإستخدام لغة SQL

أظهر بيانات الأباء الذين أرقامهم أقل أو تساوي 4000

أظهر بيانات الآبناء الذين أعمارهم اقل من 5 سنوات

أظهر بيانات الأصناف التي تكلفتها تقل عى 5 ريالات

إسأل نفسك خمسة أسئلة أخرى على الأقل ثم حلها بإستخدام لغة SQL

تحياتي،،،

1
#92

أخي الكريم:

رغم أنني لم أطلع على موضوعك إلا متأخراً ليلة البارحة تحديداً إلا أنك أطربتني بهذا الموضوع فلا أقل من أن يقال لك أحسنت أخي، فقد طرقت موضوعاً مشوقاً وزاده تشويقاً أسلوبك الرائع فأنت تجيد صب المعلومة صبا فبارك الله فيك و في هذا الجهد المبارك الذي تبذله من أجل إيصال معلومات وإيضاح مفاهيم هي غاية في الأهمية. فالكثيرون بحاجة إليها والكثيرون لا يملكون الصبر والبراعة في إيصالها للآخرين.

اللهم أنصر إخواننا المسلمين فوق كل أرض وتحت كل سماء. وبلغ أخي صاحب الموضوع ليلة القدر وأجعل له منها وأفر الأجر وأجعلنا وإياه وجميع إخواننا المسلمين من ورثة جنة النعيم آمين.

#93

بارك الله فيك يا أخي وسدد خطاك ...

#94

مرحبا،،،

في لغة SQL:

عند الإضافة نستخدم Insert Into

عند التعديل نستخدم Update... Set

عند الحذف نستخدم Delete

ركز معي مرة أخرى وتذكر دائما وأبدا أن هذه أوامر SQL ولا يهم ال SQL من أين تستخدمها، مين يتذكر الطبقة الأولى؟

في الطبقة الأولى (الخاصة بالنماذج التقارير) لا يهم من أين أتى أمر SQL سواء من:

VB

VB.Net

C#.Net

++C .net

Java

Access

Excel

MySQL

Interdev

Asp

Asp.Net

Oracle Designer

إلخ...

كل ما سبق يمكن أن يستخدم في إنشاء الطبقة الأولى وكل البرامج أعلاه تستطيع التخاطب مع قاعدة البيانات (الموجودة في الطبقة الثالثة) بإساخدام أوامر SQL وهذا ممتاز ورائع لأننا لا يهمنا الأداة أو البرنامج الذي نستخدمه للوصول إلى البيانات.

كل البرامج والتطبيقات تستخدم نفس أوامر لغة SQL

تركنا الجزء الثاني من المزاح مع SQL وهو الذي إذا أسيء إستخدامه نسف SQL كل قاعدة البيانات ويحتاج هذا إلى التدريب المتواصل للوصول إلى مرحلة الإتقان.

لإنشاء جدول جديد في قاعدة البيانات نستخدم الأمر Create Table

في إستعلام جديد أفتح (عرض SQL) وادخل السطر التالي:

للتبسيط:

في آكسس

Create Table Tests (TestID text(4), TestName text(25), TestAge Number)

والله مشكلة الأقواس --- تعبت انا من لخبطة العربي والانجليزي --- صلحوها انتم !!!

في MS SQL وبإستخدام Query Analyzer

Create Table Tests (TestID char(4), TestName char(25), TestAge int)

صححوا الأقواس

أذهب إلى الجداول وتمتع بالجدول الجديد !!! في MS SQL لا بد من عمل Refresh للجداول حتى ترى الجدول الجديد.

ستلاحظ أنك لا تستطيع تنفيذ هذا الأمر أكثر من مرة --- من يجيب؟ !!!

لتعديل جدول نستخدم Alter Table

احذف جدول نستخدم Drop Table

صدق أو لا تصدق عزيزي القارىء أن هذه الأوامر:

Select

Update

Insert

Delete

Create Table

Alter Table

Drop Table

هي فقط (تقريبا) كل أوامر لغة SQL !!!!

طبعا كما قلنا في البداية --- كل أمر هذه الأوامر قصة طويلة وتحتاج إلى الكثير من الصبر والجهد والتمارين والشرح وهاهنا أحاول أن اضعك على الطريق الصحيح،، إذا أردت الإحتراف في قواعد البيانات لا بد من إتقان الأوامر السابقة. لاتيأس،، خذ كل واحد من الأوامر بروية وبهدوء وقم بعمل المئات من التجارب والمحاولات وما إلى ذلك... لاحظ في قائمة إستعلام Query في الآكسس سترى الكثير من أنواع الإستعلامات مثل:

استعلام تحديث

استعلام انشاء جدول

إلخ...

كل هذه الإستعلامات يمكن إنشاؤها من خلال الأوامر السابقة وإستيضاح الفروق بينها في غاية الأهمية.

لعل الوقت يسعفنا فيما بعد ونلقي مزيدا من الضوء على لغة SQL

لنعود إلى قاعدة البيانات وجدولي الآباء والأبناء

من ينشأ لي أستعلام سواء بلغة SQL أو من خلال (عرض التصميم) يوضح إجمالي ما دفعه كل أب مقابل مشتريات إبنه؟؟

تعذبواااا

تحياتي،،،

#95

أخي internetmaster هل تلقيت رسالتي؟

#96

مرحبا،،،

الأخ biskra والله لا أدري ماذا أقول !!!

أولاً لم يصلني شيء منك، ليتك تقول لي على البريد الخاص على أي بريد ارسلت لي الرسالة.

ثانيا: إلى كافة الأخوة والأخوات ثلاث نقاط:

النقطة الأولى --- كل من أرسل لي شكرا فأقول له الشكر لله أولا وأخيرا والشكر موصول لكم.

النقطة الثانية --- كل من أرسل لي دعاء فأقول اللهم آمين.

النقطة الثالثة --- كل من طلب تصميم قاعدة بيانات فأقول له --- لم يكن هدف مشاركتي هو هذا وأعيد مرة أخرى --- الهدف هو أن أساعدك (بفضل الله أولا وأخيرا) على أن تقف على الطريق الصحيح وأن تتعلم المفاهيم الأساسية لقواعد البيانات، والوقت المتاح لي لإكمال هذه المفاهيم والأسس مضغوط جدا لإلاتباطي بالكثير بعد 20 رمضان وتعلمون جميعا العشر الأواخر، ومن ثم البد من 6 شوال أي بعد الإجازة مرتبط بمشروع ضخم جدا لقواعد البيانات على مستوى وزارة التربية والتعليم لدينا في المملكة والمشروع بمئات الأولوف من الريالات وسيكون معي فريق عمل (سأقوده بمشئية الله) مكون من حوالي 8 رجال و 4 نساء لإنهاء هذا المشروع ومن المتوقع أن يستنزف حوالي 6 أشهر من التصميم والبرمجة.

إستثني مما سبق أربعة وعود قطعتها على نفس لبعض المشاركين:

الأخ (alali100) والذي حدث بيني وبينه سوء تفاهم وقد وعدته بالمساعدة في برنامجه الصادر والوارد.

أخت في منتدى (MS SQL) وعدتها بمساعدتها في قاعدة البيانات الخاصة بها.

وأخ ثالث (والله قمت أخربط ونسيت حتى أسمائهم) وعدته بمساعدته في تطوير نظام متقدم على VB.Net مع بعض التطبيقات على Asp.Net وربطها بالجوال.

والوعد الرابع بتقييم المشاركات في المسابقة التي طرحتها من قبل والتي خصصت لها جائزتين متماثلتين الأولى لذكر والأخرى لأنثى وحتى تاريخه لم يسعفني الوقت لإكمال أسئلة المسابقة، وهذا الوعد يأتي تنفيذه في المقدمة على الوعود السابقة.

وآمل من الله ألا أكون في لحظة (شهامة) قد وعدت بأكثر من طاقتي وقدرتي على التحمل.

كم أنا مقدر للعشرات من الرسائل التي وصلتني والتي أولا (غرور داخلي) أسعدتني بثقتكم في شخصي المتواضع وإمكانياتي المحدودة جدا وثانيا انني فعلا أود أن أساعد في تصميم قواعد البيانات التي تحلمون بإكمالها.

قطعا لا أريد أن أقول لكم (لن أساعد أحدا) انا أقول اعطوني فرصة لتنظيم فريق العمل الخاص بمشروعي الجديد المشار اليه أعلاه، وكذلك أعطوني فرصة لتنفيذ الوعود التي قطعتها على نفسي. ومن بعدها بمشيئة الله أرتب أولوياتي وأستعين بالله على تنفيذ بعض أحلامكم وتطلعاتكم في عالم البرمجة وقواعد البيانات.

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

بالله كيف هذا وكيف يعقل؟

أترك الحكم للأخوة والأخوات المشاركين!!!!!

اللهم لا علم لنا إلا ما علمتنا.

تحياتي،،،

#97

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

مع الأسف الشديد فانني أنتمي لهذه الفئة, و الرد كان واضحا جدا.

بارك الله فيك ووفقت في مشاغلك الكثيرة.

#98

الاخ الفاضل لك الحق في استجماع قواك وفي ترتيب الأفكار ولك الحق في كل ماذكرت .

ولكن لنا كل الحق في تمديد فترة بقائك بيننا . ولك الحق في اختيار ذلك بأي طريقه كانت .

وأوضح اننا وجميع الأخوان في هذا الموقع بأكمله لن نكتفي بهذه الدروس فهي لن تكون كفايه لترسيخ كل هذا التغيير للمفاهيم التي زرعت في عقولنا من السابق فما حدث سابقاً احتاج منا الى وقت كبير جداً فاق مستوى السنوات بكثير . وانت اخي العزيز ذكرت ان بقائك لمجرد ايام فهل ذلك سوف يكون عادلاً برأيك .

اذن مضمون الطرح السابق تمديد فترة بقائك بيننا .

طرح دروس لجميع المستويات بداء من مبتديء وانتهاء بمحترف .

الوصول الى التطبيق العملي .

التقييم الشامل لجميع المشاركات .

قد يقال ان هذا اجحاف منا بحقك اخي العزيز ولكن كونك جديراً بهذه الثقه فسوف تكون اهلاً لها .

اتمنى لك التوفيق وانا نيابة عن الجميع اقولها بكل جد اننا في امس الحاجه اليك والى امثالك .

اعتذر عن المشاركه في اجابات الدروس كوني اطبق الدروس منذ البدايه لتخلفي عن المتابعه .

ملاحظه :

قابل للنقد والنقاش . واقدم اعتذاري للجميع لتحدثي نيابة عنهم دون اخذ رأيهم ولكن لمست ذلك من مشاركتهم ومتابعتهم .

تم تعديل هذه المشاركة بواسطة alali100 في 10 نوفمبر 2003 في 01:01

sob7ank.jpg

فرض على الناس أن يتوبوا**** لكن ترك الذنوب أوجب

والصبر في النائبات صعب**** لكن فوات الثواب أصعب

والدهر في صرفه عجيب**** لكن غفلة الناس أعجب

وكل ما قد يجي قريب****والموت للعبد من ذاك أقرب

#99
اقتباس
قطعا لا أريد أن أقول لكم (لن أساعد أحدا) انا أقول اعطوني فرصة لتنظيم فريق العمل الخاص بمشروعي الجديد المشار اليه أعلاه، وكذلك أعطوني فرصة لتنفيذ الوعود التي قطعتها على نفسي. ومن بعدها بمشيئة الله أرتب أولوياتي وأستعين بالله على تنفيذ بعض أحلامكم وتطلعاتكم في عالم البرمجة وقواعد البيانات.

وهذا ما اريده واكثرنا يريده فانت بمثابة معلم ونحن بحاجه الي دروسك التي ستقود معظمنا بإذن الله الى تعلم المزيد في عالم قواعد البيانات .

وبالنسبه لي سوف انتظر عودتك بعد تنظيم فريقك ان شاء الله على احر من الجمر

لاستمكال الدروس

وندعوا لك بالتوفيق والنجاح

#100

اللهم اغفر لاخينا InternetMaster جزاء ماصنع فى تعليم اخوانه ابتغاء مرضاتك

TO_InternetMaster.zip

هذا الموضوع مغلق.

مواضيع مشابهة