المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : دورة مطولة لتعليم sql server 2005


مصطفى عدوية
11-04-2007, 12:49 AM
بسم الله الرحمن الرحيم
الحمد لله رب العالمين والصلاة والسلام على أشرف المرسلين ومن تبعه بإحسان إلى يوم الدين
أما بعد :
كثيرا ما يبحث المبرمج العربي عن الجديد ولكن لا يجده في الصفحات العربية إلا بعد أن يصبح قديما
وإن وجده سيجد نبذات عنه ولا يجد ما يغنيه
لذلك قررت بمشيئة الله عمل دورة مركزة لتعليم sqlserver 2005 من البداية أي أنني سأشرح كل شيء عن قواعد البيانات وسأطبق ذلك بإستخدام أدوات sqlserver 2005 الجديدة
أعلم أن الحمل ثقيل ولكن أسئل الله التثبيت
ولكي نستفيد جميعا من هذه الدورة هنا .. أريد أن أطلب من أحبائي أعضاء المنتدى
- عدم الرد بالشكر لكي لا نقطع سير الدورة بردود لن تنفع المتعلم .. فشكري هو تعلمكم الجديد وخدمة دينكم به
- رجاء أن نأجل الأسئلة التى تتعلق بالموضوع أو لا تتعلق به بعد إنتهاء الدورة لكي لا نقطع التركيز بها لأن الأمر فعلا طويل ونريد أن نخرج شيء مميز ينفع الجميع
-حاول أن تطبق ما تتعلمه سريعا وتذكر أن علمك هذا هو مستقبلك فيجب أن تجتهد في إتقانه
والله من وراء القصد وهو يهدي السبيل

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

فهيا بنا ...
بسم الله

مصطفى عدوية
11-04-2007, 12:50 AM
الجديد في sqlserver 2005


- إستخدام net framwork. و sqlclr لكتابة الإجرائات المخزنة stored procedures وغيرها من الجمل البرمجية مثل user-defined functions, triggers, aggregates, user-defined types وكأنك تكتب برنامج في Visual Studio 2005 بأي لغاته التى تروق لك .. إذا وبعد أن كان sqlserver 2000 سيرفر قواعد بينات يعيبه أنه ليس له واجهة تصميمية برمجية لإنشاء الواجهة الأمامية للمستخدم للتعامل مع قاعدة البيانات كما في oracle أصبحت الآن Visual Studio 2005 بما فيها من قوة وتوافقية مع SQL Server 2005 هي واجهة تطبيقه الأمامية بصدق وسهولة وإمكانية إستخدام مكتبتها البرمجية في كتابة الكود جمبا بجنب مع الـ transact-sql وهي اللغة البرمجية لل SQL Server 2005 .


- دعم جديد ومتميز للـ xml .. فهي الأن نوع جديد للبيانات المخزنة داخل الـ SQL Server 2005 مثل int , string أي عندما تنشأ جدولك حدد أن هذا الصف سيحتوى على xml ليس هذا فقط ولكن يمكنك البحث فيه عن طريق لغة الإستعلام داخل الـ xml المسماه xquery .. هل تعرف ماذا يعني ذلك .. يعني أنه يمكنك تخزين ملفاتك التى تحتوى على بيانات مخزنة داخل xml مع قواعد بياناتك في الـ SQL Server 2005 بل والبحث فيها كأنها في ملف خارجي بل أفضل .. هذا يعني كثيرا لمن يتعاملون مع ملفات الـ xml في عملهم وفي نقل بيناتهم .


- الآن في النسخة الـ Enterprise يمكنك تشغيل 50 نسخة من SQL Server 2005 على نفس المكنة " لازم تبقى مكنة جبارة http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif أنا مشغل نسخة واحدة عاندي بالعافية http://www.arabteam2000-forum.com/style_emoticons/default/blink.gif " وذلك مفيد وموفر لشركات الـ hosting بعد أنا كان SQL Server 2000 يسمح بحد أقصى 16 نسخة .


- يمكنك الآن الوصول للـ SQL Server 2005 عن طريق الـ http مباشرة دون على الـ iis وذلك سيفتح مجالات كبيرة جدا للعمل مع الـ web service و الـ SOAP protocol .


- الآن يمكنك تغيير مكان ملفات الـ data و الـ log من مكانهم إلي أنشئا فيه إلى أي مكان آخر تحبه " وقاعدة البيانات غير مستعملة طبعا " وتخبر قاعدة البيانات بهذا التغيير بألتر بسيط .. كما يلي :

ALTER DATABASE <database_name>
MODIFY FILE(name=<'data_file_name'>, filename=<'new path'>)


- جداول النظام أصبحت الآن منفصلة في مجلد مستقل وأحيطت بمزيد من الحماية " يعني الحمد لله مش حنتكعبل فيها أثناء شغلنا على جداولنا "


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


- تم تطوير لإمكانية تحكم مدير قاعدة البيانات في إعطاء الصلاحيات ، فأصبحت الصلاحيات المعطاة للمستخدمين أكثر دقة وتحديدا .. " يعني إلي كان بيلعب في شغل غيره مش حيعرف يلعب بعد كدة "


- يمكنك الآن أخذ صورة من قاعدة البيانات كل فترة معينة " Snapshot " وهى عبارة عن نسخة للقراءة فقط يمكنك العودة إليها إذا حدث عيب في قاعدة البيانات ، أو يمكنك إستخدامها لتوليد تقارير عن قاعدة البيانات كل فترة .

مصطفى عدوية
11-04-2007, 12:50 AM
يمكنك تنزيل نسختك المجانية والتى تعمل لمدة 6 شهور من هنا

http://www.microsoft.com/sql/evaluation/trial/ (http://www.microsoft.com/sql/evaluation/trial/)

مصطفى عدوية
11-04-2007, 12:52 AM
أولا : شرح أدوات التطوير والإدارة " Administration and Development Tools " :

- بصدق التعامل مع قواعد البيانات في SQL Server 2005 بقى أيسر وأجمل .. فبالطبع كل من تعامل مع SQL Server 2000 قد تعامل مع الـ SQL Server Enterprise Manager للتعامل مع قواعد البيانات ، Query Analyzer لكتابة الكود وتنفيذه .. الآن تم دمج الآداتين في الآداه الأساسية بحق في SQL Server 2005 وهي SQL Server Management Studio وبيطلقوا عليه " ssms " .. وأنا بتعامل معاه بحس إني بتعامل مع برنامج access من السهولة وكذلك بحس بالقوة القديمة للـ Enterprise Manager ، Query Analyzer .


هيا للعرض ..

بعد إنزال الـ SQL Server 2005 على جهازك .. إذهب إلى start ثم programs ثم Microsoft SQL Server 2005 ثم SQL Server Management Studio كما في الصورة .
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_45_20_11413863201.gif

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

هذه هيه واجهة SQL Server Management Studio التى ستجدها أمامك طيلة عملك مع الـ SQL Server 2005


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 74% من الحجم الأصلي [ 805 x 589 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_45_59_1141386359_.gif

قم بالنقر على علامة الزائد بجوار databases لترى أن قواعد بينات النظام قد وضعت بمفردها في مجلد System Databases والصور التى تأخذها من قاعدة بيناتك في المجلد Databases Snapshots وأسفل ذلك ستجد قواعد بيناتك ومعهم قاعدة البيانات التدريبية الجديدة AdventureWork


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 74% من الحجم الأصلي [ 805 x 588 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_46_49_11413864093.gif
وأسفل قاعدة البيانات ستجد كل ما لذ وطاب من أدواتك من جداول وجمل برمجية وتخطيط وكل شيء لتصل إليه بسهولة ويسر .. وبالطبع كل ما نقرت على شيء ستظهر تفاصيله في النافذه اليمنى كما في النسخة السابقة .


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 800 x 584 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_47_17_11413864374.gif

- وبالطبع ولأن بيئة عمل SQL Server 2005 مبنية على بيئة عمل Visual Studio 2005
فكل إمكانيات التحكم في العرض والنوافذ والتنقل موجودة كما هي في SQL Server 2005 .. فمثلا يمكنك النقر نقرا مزدوجا على نافذة Object Explorer لتنفصل بمفردها ثم تسحبها وتدرجها في أي ناحية من الشاشة تريد .. كما في الصور :


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 74% من الحجم الأصلي [ 801 x 585 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_47_44_11413864645.gif


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 74% من الحجم الأصلي [ 801 x 586 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_48_09_11413864896.gif

-- إلعب ونظم براحتك ولو أردت العودة للتنسيق الإفتراضي كل ما عليك هو الذهاب للقائمة
Window ثم إضغط Reset Window Layout

- ولكن ماذا عن Query Analyzer وكتابة الكود والذي منه .. كل ما عليك أن تنقر زر New Query من أعلى اليسار لتجد نافذة الكود على يمينك .. واكتب يا سيدي كود زي ما إنت عايز .


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 799 x 586 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_00_56_11413872567.gif

هل لاحظت أن نافذة الكود فتحت في tab جديد وأنه يمكنك التنقل بيسر بين الصفحات المفتوحة .. والجميل أنه يمكنك العودة للنظام القديم لو أردت ..
من Tools ثم Options ومن General أسفل Environment يمكنك إختيار MDI environment بدلا من Tabbed document والنتيجة كما في الصورة :


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 800 x 589 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_01_30_11413872908.gif


ومن النافذة options هذه يمكنك التعديل والتغيير كثيرا في مظهر واجهتك وتغيير ألوان وأحجام الخطوط والأزرار النشطة في لوحة المفاتيح وكيفية التعامل مع المساعدة وغير ذلك الكثير .. من الجميل أن تجرب ذلك بنفسك .. ولا تخشي من شيء http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif

-- من الأشياء الجميلة في الـ ssms صفحة الـ Sammery وكل ما تشمله من معلومات عن العنصر المحدد من النافذة Object Explorer وأهم هذه المعلومات هي المعلومات التى ستعرفها عن طريق نقر زر التقرير Report والذي سيعطيك تقارير نصية ورسومية عن كل شيء مرتبط بالعنصر المحدد السيرفر كان أو قاعدة البيانات أو جدول محدد .. إختار نوع التقرير الذي تريد بالنقر على السهم المجاور للزر .. لتعرف متى وأين ومن .. كل شيء حدث لهذا العنصر ومقدار كفائته وإنجازه .. تصفح وجرب وشوف قمة الرفاهية http://www.arabteam2000-forum.com/style_emoticons/default/regular_smile.gif


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 74% من الحجم الأصلي [ 801 x 588 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_02_17_11413873379.gif

مصطفى عدوية
11-04-2007, 12:52 AM
-- نرجع شوية لكتابة الكود .. حيث يمكنك الآن كتابة الكود في الـ ssms وأنت غير متصل بالسيرفر ويطلب منك الإتصال فقط عند طلب تنفيذ الكود وتطبيقه على قاعدة البيانات وهذه الخاصية لم تكن موجودة في 2000 حيث كان لابد من الإتصال بالسرفر لكتابة الكود .

-- أما عن التيسير في كتابة الكود فحدث ولا حرج : وأهم حاجة في القصة دي وإلي حتخليك تطير من الفرحة هي نافذة الـ Temmplate Explorer إلي مليانة كود جاهز لمعظم الجمل البرمجية وكل ما عليك هو سحب ما تريد وإفلاته في المكان الذي تريد في كودك .. وتعديل الأسماء والجداول والمتغيرات بما يناسبك .. بجد كانت مشكلة عاندي إني أنسى حرف أو أنسى الجملة البرمجية .. بس الآن البرمجة بجد بقة متعة .

من قائمة View إنقر Temmplate Explorer
وتصفح الجمل البرمجية .. ومتنساش تدعيلي http://www.arabteam2000-forum.com/style_emoticons/default/wink_smile.gif


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 799 x 586 ] - إضغط هنا لعرض الحجم الأصلي

http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_03_03_11413873831_.gif

القصة مش كدة وبس دة كمان بيسر عليك جدا تعديل الأسماء والمتغيرات دي

كل ما عليك الذهاب إلى قائمة query ثم ... Specify Values For Tmplate Parameters


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 800 x 585 ] - إضغط هنا لعرض الحجم الأصلي

http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_04_55_114138749511.gif

وهنا سيحضر لك كل المتغيرات غير المحددة في كودك المظلل الآن والذي أتيت به من نافذة Temmplate Explorer


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 795 x 583 ] - إضغط هنا لعرض الحجم الأصلي

http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_06_30_11413875901_.gif

-- عندما تجد شيء مبهم فلا تتأزم .. كل ما عليك هو تحديد إسم هذا الشيء من الكود أو إختياره من الأدوات ونقر زر F1 لتجد sql server 2005 أتى لك بكل شيء عنه من الإنترنت أو من المساعدة الموجودة على جهازك على حسب إختيارك .. ونصيحتي أن تستخدم هذا الأمر كثيرا لتلم بكل جديد وتنجز عملك بشكل أفضل ..

مصطفى عدوية
11-04-2007, 12:54 AM
بعض أدوات الأدمن والتحكم في السيرفر

نبدأ بالآداة الأساسية

SQL Server Surface Area Configuration

يمكنك تشغيلها من Start ثم Programs ثم Microsoft SQL Server 2005 ثم Configuration Tools ثم انقر SQL Server Surface Area Configuration


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 799 x 586 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_03_03_11413873831_.gif

هنا سيخرج لك نافذة الآداة وتشتمل على خيارين

الأول :

هو للتحكم في الخدمات والإتصالات

Surface Area Configuration for Services and Connections


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 89% من الحجم الأصلي [ 670 x 512 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_12_28_114138794817.gif

وهذا ملعبك لتشغيل وإبطال الخدمات العامله على جهازك وكل إتصالاتك بالأجهزة الأخرى المرتبطة بهذه الخدمات .. وبإذن الله سيكون لنا جولات مع هذه الأداة .

- أما الإختيار الثاني :

Surface Area Configuration for Features


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 89% من الحجم الأصلي [ 668 x 508 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_13_04_114138798418.gif

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


-- الآداة التالية وهي :

SQL Server Configuration Manager


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 72% من الحجم الأصلي [ 832 x 605 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_09_05_114138774513.gif

وهي بإختصار تجميع لعمل الثلاث أدوات المعروفه في SQL Server 2000

Service Manager

Server Network Utility

Client Network Utility

يمكنك تشغيلها من Start ثم Programs ثم Microsoft SQL Server 2005 ثم Configuration Tools ثم انقر SQL Server Configuration Manager

وهي أداة تحكم في السيرفر وخدماته والسيرفرات المتصله به .

مصطفى عدوية
11-04-2007, 12:54 AM
والآن ننتقل إلى أدوات تحسين ومتابعة أداء قواعد البيانات

أولا : الأداة SQL Server 2005 Profiler


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 76% من الحجم الأصلي [ 785 x 617 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_09_46_114138778614.gif

ويمكنك تشغيلها من داخل الـ Managment Studio من القائمة Tools ثم SQL Server 2005 Profiler

أو من

Start ثم Programs ثم Microsoft SQL Server 2005 ثم Performance Tools ثم انقر SQL Server 2005 Profiler

وهي عبارة عن أداة إختبار لكفائة عمل قاعدة البيانات من خلال إختبارها بيتشغيل عمليات معينة وإختبار مقدار كفائة إنجازها . ولقد تم إضافة تحسينات كثيرة عليها في SQL Server 2005 . سنتعرض لها أثناء الشرح بإذن الله .


ثانيا : الأداة Database Engine Tuning Advisor


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 79% من الحجم الأصلي [ 759 x 635 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_11_19_114138787915.gif

ويمكنك تشغيلها من داخل الـ Managment Studio من القائمة Tools ثم Database Engine Tuning Advisor

أو من

Start ثم Programs ثم Microsoft SQL Server 2005 ثم Performance Tools ثم انقر Database Engine Tuning Advisor

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

مصطفى عدوية
11-04-2007, 12:57 AM
سنعتبر أن ما مضى تعريف بسيط بالآداة التى سنعمل عليها .. والآن هيا بنا إلى الجد

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

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

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

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

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

* تاريخ الفاتورة
* ترتيب الفاتورة خلال اليوم
* الصنف الأول في الفاتورة
* سعر الصنف الأول في الفاتورة
* الصنف الثاني في الفاتورة
* سعر الصنف الثاني في الفاتورة
* موظف الحسابات
* أجرة موظف الحسابات
* أجازات موظف الحسابات
* موظف البيع
* أجرة موظف البيع
* أجازات موظف البيع
* أجرة المكان
* أجرة الكهرباء
* .............

وأخذ يكتب ويكتب ...

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

المرحلة الأولى من الـ Normalization

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

الجدول الأول :
* اسم الصنف أو " المنتج "
* سعر الصنف
* وزن الصنف
* مكان تواجده في السوبر ماركت
* درجة حرارة حفظه
* الكمية المتوفرة منه
* الوقت الذي يزيد فيه الطلب على هذا الصنف
* ........... ضف ما يحلو لك على حسب طلبات الحاج عبد الرحمن طبعا

-- ونسمي هذا الجدول جدول الأصناف " بالطبع عند إنشاء قاعدة البيانات سنختصر هذه الأسماء ونجعلها بلإنجليزية ليسهل لنا التعامل معها في الـ sql server

الجدول الثاني : الفاتورة

* تاريخ الفاتورة
* ترتيب الفاتورة خلال اليوم
* نسبة الخصم
* الثمن المدفوع
* الباقي من الثمن
* ................


الجدول الثالث : الموظفون ... سنجمع المعلومات المتكررة عن الموظفين هنا ..

* إسم الموظف
* نوع الوظيفة
* المرتب
* رتبة الوظيفة
* الأجازات

-- وهكذا قسم جداولك بما لا يجعل هناك مجال للتكرار

-- تنقص نقطة في المرحلة الأولى من الـ Normalization وهي أن تضع مفتاح إرشادي متسلسل لكل جدول
مثلا في جدول الموظفين :

* الرقم المسلسل للموظف
* إسم الموظف
* نوع الوظيفة
* المرتب
* رتبة الوظيفة
* الأجازات

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

-- كدة يبقى طبقنا المرحلة الأولى بنجاح وهي تقسيم الجداول ووضع مفتاح تسلسل لكل جدول .

-- نأتي للمرحلة الثانية من الـ Normalization


المرحلة الثانية من الـ Normalization :
تعتمد هذه المرحلة على فصل البيانات التى سيتكرر إدخالها بنفس الصيغة في جدول منفصل .. ومثال ذلك نوع الوظيفة في جدول الموظفين .. فكلما أدخل الباشمهندس ذكي موظف جديد يضع نوع وظيفته ليجد في النهاية أنه أدخل النوع " بائع " عشرين مرة بعدد العاملين ..
هنا النوع الثاني من الـ Normalization يخبرك أن تفصل هذا الصف في جدول منفصل وتضع له مفتاح تسلسل خاص به .. ووضع هذا المفتاح المتسلسل في الجدول الرئيسي كرابط بين الجدولين .. وهذا ما نشرحه بالتفصيل عند الحديث عن العلاقات بين الجداول وربطها ببعض .
إذا سيصبح جدول الموظفين هكذا :

* الرقم المسلسل للموظف
* إسم الموظف
* الرقم المسلسل لنوع الوظيفة
* المرتب
* رتبة الوظيفة
* الأجازات


وأصبح عندنا جدول جديد بإسم نوع الوظيفة :

* الرقم المسلسل لنوع الوظيفة
* نوع الوظيفة
* متطلبات الشخصية المأهلة لهذا النوع
* ..... ضف ما تشاء من معلومات ....

-- هنا سيسألني أحدكم .. أني الآن أملك إسم عمود متكرر في جدولين وهو الرقم المسلسل لنوع الوظيفة " ألم تخبرنا أن لا نكرر البيانات "
* كلامكم صحيح .. ولكن نحن نصنع هذا التكرار في المفاتيح المتسلسلة للجداول فقط من أجل الربط بينها وإمكانية الوصول للمعلومات المرتبطة من جدول لآخر كما سنوضح في العلاقات بين الجداول .


أما عن المرحلة الثالثة من الـ Normalization :

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

وهنا تخبرك المرحلة الثالثة من الـ Normalization أن تنقل كلا من المرتب ورتبة الوظيفة في جدول منفصل وتسمية جدول رتب الوظائف وتضع له رقم متسلسل خاص به وتضع هذا الرقم المتسلسل أيضا في جدول الموظفين كرابط بين الجدولين . كما يلي :

-- جدول الموظفين :

* الرقم المسلسل للموظف
* إسم الموظف
* الرقم المسلسل لنوع الوظيفة
* الرقم المسلسل لرتبة الوظيفة
* الأجازات

-- جدول رتب الوظائف :

* الرقم المسلسل لنوع الوظيفة
* رتبة الوظيفة
* المرتب

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

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

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



http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 74% من الحجم الأصلي [ 805 x 588 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_03_46_49_11413864093.gif


" سنجد كما أسلفنا أنه قد تم جمع قواعد بيانات النظام في فلدر منفصل بالإسم System Databases ، ولكن ما هي قواعد بيانات النظام ؟

1- قاعدة البيانات master : هي أهم قاعدة بيانات .. فهي التى تحتوى كل المعلومات الخاصة بالمستخدمين وكلمات سرهم وصلاحياتهم في التعامل مع قواعد البيانات ، أماكن وجود ملفات الداتا ، إعدادات قواعد البيانات ، رسائل الأخطاء .. يعني بصدق هي قلب السيرفر .

2- قاعدة البيانات tempdb : وهي قاعدة بيانات تنشأ عند تشغيلك للسيرفر وتوضع بها البيانات المؤقتة التى يحتاج السيرفر لتخزينها مؤقتا أثناء عمل الإجرائات المخزنة مثلا .. وعند إغلاق الـ Sql server وإعادة فتحه تضيع هذه البيانات وتصبح قاعدة البيانات tempdb فارغة وجاهزة لإستقبال بيانات مؤقتة جديدة .

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

4- قاعدة البيانات msdb : وهي المسئولة عن كل الأوامر والوظائف التى سيقوم بها الإنسان الآلي المساعد في الـ Sql Server وهو SQL Server Agent
وهو المسئول عن تنفيذ كل الوظائف التلقائية التى تريد تنفيذها بالتعاون من الويندوز .. على قاعدة البيانات أو على أي شيء متعلق بالويندوز بناء على حدث معين يحدث في قاعدة البيانات أو وقت معين . "

" أسفل مجلد قواعد بيانات النظام هناك قاعدتين للبيانات .. للتجربة والتعليم .. هما AdventureWorks - AdventureWorksDW

وهي عبارة عن قاعدة بيانات لشركة " وهمية " تملك مصنع لتجميع وتصنيع الدرجات مقرها واشنطن ويعمل لديها 290 عامل وتوزع منتجها لشمال أمريكا وأوربا وأسيا
ومطبق عليها كل الجديد في الـ Sql Server 2005 لغرض التعليم . "


وعلى الكلمة Databases قام الباشمهندس ذكي بعمل نقرة يمين من الماوس وإختار New Database



http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 88% من الحجم الأصلي [ 680 x 494 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_13_37_114138801719.gif


وعلى إثر ذلك خرج له المربع الحواري الجديد لإنشاء قاعدة بيانات جديدة كما في الصورة :


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 85% من الحجم الأصلي [ 701 x 628 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_14_10_1141388050_.gif

فقام بإدخال إسم قاعدة بياناته وسماها alkhilafah
ثم حدد المستخدم الرئيسي لهذه القاعدة وهو المستخدم الذى لدية كل صلاحيات التعامل والتعديل مع قاعدة البيانات ويسمى مالك قاعدة البيانات
* ولو تركها <default> حيكون مستخدم الـ Sql server الأساسي هو مالك هذه القاعدة
ثم قام بالتأشير على المربع use full-text indexing وهو المسؤول عن تنشيط عملية البحث داخل قاعدة البيانات عن الكلمات أو الجمل داخل النصوص

-- وأسفل ذلك نجد أن هناك ملفان سينشأهما السيرفر لقاعدة البيانات

- الأول يملك الإمتداد MDF. وهو المسأول عن تخزين البيانات

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

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

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

-- والآن ماذا لو أراد الباشمهندس ذكي حذف هذه القاعدة .. كل ما عليه هو عمل نقرة يمين من الماوس على إسم القاعدة وإختيار Delete من القائمة المختصرة



http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 88% من الحجم الأصلي [ 678 x 492 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_14_47_1141388087_1.gif


* لتخرج له النافذة الحوارية لحذف قاعدة البيانات :


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 85% من الحجم الأصلي [ 702 x 630 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_15_33_1141388133_.gif


وأسفل النافذة ستجد خيارين جديدين ..

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

* والخيار الثاني : " مميز " وهو يقوم بغلق أي إتصال بقاعدة البيانات أولاً قبل حذفها لكي تتم عملية الحذف بنجاح
.. أما لو لم تختار هذا الخيار وكان هناك إتصال بقاعدة البيانات فيجب عليك غلقه أولا وإلا لن تنجح عملية الحذف .


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

نقوم بإنشاء صفحة كود جديدة بالنقر على الزر New Query من الأعلى .. أقصى اليسار

ونكتب بكل بساطة
CREATE DATABASE alkhilafah


ثم ننقر الزر Execute أو F5 لتنفيذ الأمر وإنشاء قاعدة البيانات .

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

*ولكي تظهر قاعدة البيانات أمامنا يجب عمل refresh للسيرفر كما في الصورة ..


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 88% من الحجم الأصلي [ 678 x 494 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_16_16_1141388176_3.gif

* مع إستخدامك مربع حوار إنشاء قاعدة البيانات ستظهر قاعدة البيانات حالا ولا تحتاج لعمل refresh للسيرفر


-- والآن ماذا لو أردنا حذف قاعدة البيانات بالكود أيضاً ..

كل ما عليك هو إستبدال كلمة Create بكلمة Drop

ويكون الكود كما يلي

DROP DATABASE alkhilafah

مصطفى عدوية
11-04-2007, 12:58 AM
إنشاء جداول قاعدة البيانات

فأسفل مجلد قاعدة البيانات يوجد مجلد يسمى Tables وهم المجلد الذي يحوى جداول قاعدة بياناتك

وعندها قام بالنقر عليه بزر الماوس الأيمن وإختار من القائمة ...New Table


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 75% من الحجم الأصلي [ 793 x 565 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_16_45_1141388205_4.gif

فخرجت له نافذة تصميم الجداول

ثم أخذ في إدخال التصميم الذي كان على الورق على مصمم الجداول
وبدأ بجدول الموظفين
أدخل أولا عنوان الصف الأول وهو الرقم المسلسل للموظف Customer_ID
وبجوارها حدد نوع البيانات التى سيتم إدخالها في هذا الصف .. فختار int


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 82% من الحجم الأصلي [ 724 x 552 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/03_03_06_04_17_32_1141388252_5.gif

ما هذا .. ماذا تعني int هذه ولماذا إختارها هي بالذات ؟
-- سؤال جميل .. وإجابته أن أي صف في الجدول يجب أن نحدد نوع البيانات التى سوف تخزن فيه لكي تتعامل معه قاعدة البيانات بطريقة مختلفة على أساس نوعه ، وكذلك لكي ترفض إدخال أي بيانات من نوع آخر ، فمثلا لا يجب إدخال حروف في الصف الممثل لتليفون الموظف .

-- جميل .. إذا ما هي أنواع البيانات التى يمكن التعامل بها في الـ Sql Server 2005

1- النوع char : وهو يعني حرف ، وهو عبارة عن نوع يجعل حقل البيانات يتقبل عدد معين من الحروف من 1 إلى 8000 حرف .. فمثلا أنت تريد إدخال رمز مختصر لكل بلد من ثلاث حروف .. هنا ستستخدم هذا النوع كما يلي :

char(3)

س : ولكن ماذا لو أدخل المستخدم حرف واحد فقط ؟
ج : هنا ستخزنه قاعدة البيانات على أنه حرف ومسافتين فارغتين .. أي أنها " كدة كدة " حتدخر له مكان ثلاث حروف .

-- في الـ Sql Server 2005 حتلاقيه حتطلك في القائمة (char(10 وهو هنا بيعتبر إن الحروف المعقوله 10 .. يعني دي من عانده وممكن إنته تحط إلي على مزاجك.

2- النوع nchar : وهو أيضا يأخذ حروف ولكن حروف من النوع Unicode أي يمكنة تخزين حروف كل اللغات وليس الإنجليزية فقط .. وهو يأخذ من 1 إلى 4000 حرف لأن الحرف فيه يأخذ مكان حرفين من النوع char

** وهو بالطبع النوع إلي حنستخدمه لما نتعامل مع لغتنا الحبيبة لغة أهل الجنة .. اللغة العربية .

ومثاله نفس الشيء :
nchar(5)


- هو برده هنا بيحط 10 حروف في القائمة بتاعة الأنواع للـ nchar .. ممكن تغيرها لعدد الحروف إلي إنته عايزه .

3- النوع varchar : نفس قصة char .. برده يقبل من 1 إلى 8000 حرف .. بس الفرق إن لما تحدده بـ 3 حروف مثلا وتحط فيه حرف واحد بس .. حيعتبره حرف واحد مش تلاته زي الـ char ، يعني بمفهومنا نطلق عليه نوع مطاطي بيغير الحجم المخزن على حسب عدد الحروف المخزنة فيه ، ولكن أقصى عدد حروف بياخده هو ما حددته أنت .

وعلشان الميزة الجميلة دي عملوا نوع جديد في Sql Server 2005 إسمه ..

4 - (varchar(max : إيه قصته النوع الجديد دة بقة .. قصته إنه بيقبل حتى الـ 8000 حرف ولكن بيخزن أماكن لعدد الحروف الموجودة فيه بس

يعني كأنك كتبت كدة .. (varchar(8000 .. بس لو دخلت مثلا كلمة مكونة من 10 حروف فقط فسيخزنها في مكان يتسع لـ 10 حروف فقط وليس 8000 .

5- النوع nvarchar : نفس قصة varchar بس بياخد حروف Unicode وعلشان كدة هو بيقبل من 1 إلى 4000 حرف بس . " اللغة العربية "

6- (nvarchar(max : نفس قصة (varchar(max بس برده بياخد حروف Unicode وعلشان كدة هو بيقبل من 1 إلى 4000 حرف بس . " اللغة العربية "

مصطفى عدوية
11-04-2007, 12:59 AM
- النوع text : وهو يأخذ حروف حتى 2 جيجا بايت
.. ولكن تخزين هذا الكم الهائل من البيانات داخل خلية بياناتك ومع إستخدامه بكثرة يزيد من بطء قاعدة بياناتك .. لذلك لو ستدخل بيانات بحجم كبير جدا فنصيحتى أن تخزنه في ملف خارجي أفضل.. " وسنتعلم بإذن الله كيف نربط الملفات الخارجية بقاعدة البيانات " .. وميكروسوفت نفسها سوف تلغي هذا النوع كما تقول في الإصدارات القادمة وتزيد من إمكانيات إستخدام الـ (varchar(max
-- ولكن لو شعرت أن بياناتك ستزيد في الخلية عن 8000 حرف فستعمل هذا النوع طبعا ولكن لا تكثر من إستخدامه في إدخال حجم بيانات كبير لدرجة الـ 2 جيجا أو أقل .

8- النوع ntext : زي الـ النوع text بس بيحزن حروف بالنظام Unicode زي ما إحنا عارفين .. وعلشان كدة بياخد حروف حتى 1 جيجا بايت بس ،
ونفس القصة حيستبدلوه بـ (nvarchar(max إن شاء الله http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif

9- النوع image : زي النوع text بالضبط بس بيخزن بيانات باينري .. زي الصور والصوت والأفلام .. وبرده حيلغوه في الإصدار القادم ويستخدموا النوع
(varbinary(max إلي حنشرحه حالاً إن شاء الله .

10 - النوع int : " إلي إستخدمه الباشمهندس زكي في صف الرقم المسلسل للموظف http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif "
وهو نوع يأخذ أرقام صحيحة فقط سالب أو موجب .. " يعني ميخدش كسور " يعني لو البيانات بتاعتك من النوع int وقسمت 9 / 10 .. النتيجة حتكون إيه ؟؟؟
... حتكون 0 علشان النوع دة لا يقبل الكسور .. دي نقطة مهمة جدا لو حتتعامل مع فلوس وحسابات .. وعلشان الباشمهندس زكي محتاج أعداد صحيحة لأرقام الموظفين فستخدم النوع دة .. والنوع Int بيقبل من الرقم – 2,147,483,648 حتى الرقم 2,147,483,647 يعني 2 بليون وشوية .. فلو الشركة بتاعتك فيها عدد موظفين أكتر من كدة .. يبقى متستخدمش النوع دة http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif ، والنوع int بياخد مساحة 4 بايت .

11- النوع bigint : زي النوع int بالضبط بس بيقبل من الرقم – 9,223,372,036,854,775,808 حتى الرقم 9,223,372,036,854,775,807 يعني 9 كونتليون وشوية .. وللي مسمعش عن الـ كونتليون .. يعني واحد وقدامه 18 صفر .. " بس ميغركش الرقم .. برده مبيقبلش كسور .. يعني متستخدمهوش في الفلوس والحسابات إلي ممكن تطلع كسور " والنوع bigint بياخد مساحة 8 بايت .

12- النوع smallint : زي النوع int بالضبط بس بيقبل من الرقم – 32,768 حتى الرقم 32,767 " حاجة صغيرة كدة على قدنا http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif وبياخد مساحة 2 بايت .
" -- لاحظ إن الباشمهندس زكي مستخدمش النوع دة وإستخدم النوع int ودة لأنه لو في أي إحتمال إن أعداد الصف بتاعك يزيد عن العدد دة فإستخدم int أحسن ولكن لو متأكد إنه مش حيزيد بأي حال من الأحوال عن الرقم دة فإستخدمه طبعا أحسن علشان حيوفرلك في المساحة . " لاحظ إنه في الأرقام المتسلسلة لو حذفت موظف مثلا رقمه 500 وبعدين أضفت موظف آخر .. قاعدة البيانات حتحطه بـ 501 مش 500 يعني حيكون عاندك أعداد مهدورة فحط دة في حسبانك وإنت بتختار نوع البيانات المناسب "

13- النوع tinyint : وهو أصغر نوع في أنواع الأعداد الصحيحة ويأخذ من الرقم . حتى الرقم 255 .. وبياخد مساحة 1 بايت .
** واحد من حضراتكم حيسألني .. طاب إمته نستخدم النوع دة .. والإجابة .. إنك ممكن تستخدمه في التسلسل بتاع حجات ثابته ومش حتزيد عن 255 زي مثلا عدد المحافظات في دولتك .. أو إستخدمه في المدخلات التي لن تقبل عدد أكبر من 255 .


14- النوع decimal أو numeric : الإتنين بيعملوا نفس العمل والإختلاف في الأسماء فقط فلإسم الأول هو الإسم الأصلي والإسم الثاني من إختراع ميكروسوفت .

وعملهم هو إنهم بيقبلوا الأرقام العشرية .. بيقبلوا من الرقم – 0.00000000000000000000000000000000000001 حتى الرقم 10,000,000,000,000,000,000,000,000,000
يعني 38 صفر .. بس هنا إنت بتاخد إلي إنت عايزه من الرقم دة بس .. يعني لو عايز الرقم بتاعك يكون مكون من 6 خانات للأرقام الصحيحة وخانتين للأرقام العشرية .. حتكتب نوع بياناتك كالتالي ..
(decimal(8,2
و الـ 8 تدل على مجمل عدد الخانات المراد إستخدامها والـ 2 تدل إنك عايز من الـ 8 خانتين للكسور
ونفس القصة
(numeric(8,2
.. ومينفعش طبعا في المثال دة تختار 8 خانات وتقول عايز منهم 12 رقم عشري مثلا (decimal(8,12 .. حتطلعلك رسالة توبخك http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif
وطبعا أقصى خانات عاندك 38 زي ما قلنا في الأول ولو إخترت أكتر من كدة حتطلعلك نفس رسالة التوبيخ http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif

ويمكنك تحويل الرقم دة لرقم صحيح بإختيار . " صفر " في خانة الرقم العشري مثلا : (decimal(8,0 يعني عايز رقم مكون من 8 خانات ومفهوش كسور " مزاجي كدة http://www.arabteam2000-forum.com/style_emoticons/default/wink_smile.gif "
أو تخليه كله كسور .. مثلا (decimal(8,8 .. يعني ممكن تلعب براحتك http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif

15- النوع float : وهو يقبل الأعداد الحقيقية .. يعني الأعداد إلي فيها كسور دقيقة أوي .. ويستخدم في علوم الفلك والحسابات الدقيقة جدا ،
وهو يأخذ من الرقم – 1.79 أس 308 إلى الرقم 1.79 أس 308 .. بقوة 15 رقم عشري ، وبياخد حجم 8 بايت . وهنا إنت مبتحددش عدد الأرقام العشرية .. النوع هو إلي بيطلعها على حسب نسبة الرقم المتبقي .. لكن لو الرقم طلع بدون باقي كسور حيطلعهولك سليم .. زي 25 على 5 حتساوي 5 ..
لكن 25 على 1.3 حتساوي 19.2307692307692

16- النوع real : زي النوع float بالضبط بس بياخد .. من الرقم –3.40 أس 38 إلى الرقم 3.40 أس 38 بقوة 7 أرقام عشرية ، وبياخد حجم 4 بايت .


17- النوع money : وهو النوع المخصص للتعامل مع الأموال ويقبل من –922,337,203,685,477.5808 حتى 922,337,203,685,477.5807
ويحتل مساحة 8 بايت والجميل فيه أن التطبيقات تضع علامة الدولار أو علامة العملة التى تحددها بجوار الرقم .. وهذا يرشدنا أن العلامة لا تسجل داخل قاعدة البيانات .. فلو أردت أن تقوم بتخزينها فستقوم بذلك في صف منفصل .. والنوع money يقبل حتى 4 خانات عشرية فقط .

18- النوع smallmoney : مماثل للنوع money ولكن يقبل من –214,748.3648 حتى 214,748.3647 ويحتل مساحة 4 بايت .

19- النوع datetime : وهو المسؤول عن تخزين التاريخ والوقت وهو يقبل من تاريخ الأول من يناير 1753 حتى 31 ديسمبر 9999 ويخزن الساعة والدقيقة والثانية والمليثانية هكذا 00:00:00:000 ويحتل مساحة 8 بايت

20- النوع smalldatetime : مماثل للنوع datetime ولكن يقبل من تاريخ الأول من يناير 1900 حتى 6 يونية 2079 ويخزن الساعة والدقيقة فقط ويحتل مساحة 4 بايت

21- النوع binary : هذا النوع بيخزن بيانات باينري .. زي الصور والصوت والأفلام ويقبل حتى 8000 بايت

22- النوع varbinary : نفس النوع binary لكن من النوع المطاطي الذي يحجز حجم ما يحتويه فقط .. " يوفر في المساحة ولكن سرعة العمل معه تكون أقل من الـ binary " وأيضا يقبل حتى 8000 بايت .

23 - (varbinary(max : هو نفس النوع varbinary لكن يأخذ كل الـ 8000 بايت ويأخذ منها ما يتم تخزينه به فقط .. وستستبدل به ميكروسوفت النوع image

24- النوع bit : يأخذ القيمة صفر أو 1 .. وهو يستخدم لتخزين ناتج العملية البرمجية .. 1 أي صحيحة ، صفر أي خاطئة .

25- النوع xml : هو نوع جديد في الـ sql server 2005 يقبل بيانات xml بكامل تنسيقها ويمكنك البحث فيه عن طريق لغة الإستعلام داخل الـ xml المسماه xquery
** نكتفي الآن بهذا القدر من أنواع البيانات ونعود لإنشاء الجدول مرة أخرى

مصطفى عدوية
11-04-2007, 01:01 AM
-- ولكن ما هو النوع null ولماذا لم نضع صفر دليل على أنه لا يوجد بيانات .. هذا السؤال قد يسأله من لم يتعامل مع قواعد البيانات .. أولا لأن الصفر يعتبر بيانات .. ثانيا أنه سيأخذ مساحة .. على عكس الـ null فهي لا تأخذ مساحة وتخبر الـ server أن هذه الخلية خالية . ونستخدمها في البيانات التكميلية التى قد لا تتواجد عند مدخل البيانات مثل مثلا رقم الفاكس فليس كل الناس يملك جهاز فاكس .. ولو أجبرته على وضعه لوضع لك فاكس الجيران http://www.arabteam2000-forum.com/style_emoticons/default/regular_smile.gif

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


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 67% من الحجم الأصلي [ 888 x 620 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/02_03_06_05_28_01_1141349281_6.gif (http://www.arabteam2000.com/)


-- الخانة Default Values or binding .. وهنا نضع القيمة الإفتراضية للخلية .. فلو أدخل المستخدم ما يريد فسيقوم الـ server بتسجيل ما أدخله .. ولكن ماذا لو ترك المستخدم الخلية فارغة هنا سيقوم الـ server بتسجيل القيمة الإفتراضية التى وضعتها أنت .. وهذا الأمر مفيد جدا كثيرا .. ومن إستخداماته أنه يمكننا تسجيل الوقت الذي أنشأ فيه الصف عن طريق صنع خلية تاريخ وجعل القيمة الإفتراضية لها الدالة ()getdate والتى ستقوم بإحضار الوقت والتاريخ في نفس لحظة الإدخال وتسجيلها في الخلية .. وفي هذه الحالة لن أنت تعرض هذه الخانة أمام المستخدم لكي يقوم الـ server بتسجيل الوقت الإفتراضي دائما .

-- الخانة Identity Specification .. هنا لو أردنا جعل الـ server يتولى إدخال أرقام مسلسلة لنا مثل الرقم المسلسل للزبائن وجعلها لا تتكرر .. فهذه الخانة هي الكفيلة بذلك عن طريق فتح علامة الزائد المقابلة لها لتظهر لنا ثلاث خانات الأولى is Identity نجعل قيمتها yes لتنشيطها
ونضع الرقم الذي سيبدأ عنده التسلسل في الخانة Identity Seed
ونضع الرقم الذي بمقداره ستكون الزيادة على الرقم الذي سيبدأ منه التسلسل في الخانة Identity Increment

-- الخانة Description يمكننا أن نضع بها شرح للصف وطبيعة عمله للذكرى بعد ذلك أو لتوضيح تركيب قاعدة البيانات لشخص آخر .

" هذا ما نحتاجه الآن من هذه الإعدادات "

-- بعد أن إنتهى الباشمهندس ذكي من تخطيط جدول الزبائن قام بكتابة إسم الجدول بجوار الخانة name في نافذة الخصائص العامة على اليمين properties window .. ويمكنك إظهارها إن لم تكن ظاخرة بنقر f4 أو من القائمة view إختر properties window

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


-- والآن ماذا لو أرنا معرفة ما يدور وراء الكواليس وما هو الكود الذي كتبه الـ server نيابة عنا لإنشاء الجدول

ببساطة هذا هو الجدول
use alkhilafah
CREATE TABLE CustomerDetails
(Customer_Id int IDENTITY(1,1) NOT NULL,
Customer_FirstName nvarchar(50) NOT NULL,
Customer_LastName nvarchar(50) NOT NULL,
DateEntered datetime NOT NULL,
Notes nvarchar(max) NULL)

هنا قمنا بتحديد قاعدة البيانات التى سنقوم بإنشاء الجدول بها من خلال use alkhilafah
ثم قمنا بكتابة الكلمة CREATE TABLE
ثم إسم الجدول CustomerDetails
وفتحنا قوس ثم كتبنا إسم الصف Customer_Id
ثم مسافة ثم نوع البيانات int
ثم أخبرنا السيرفر أنا يقوم بعمل IDENTITY أي زيادة تلقائية كما أسلفنا
.. على أن يبدأ بالرقم 1 وكل مرة يزيد 1 .. أي أرقام الزبائن ستكون .. أول زبون 1 ، وثاني زبون 2 ، وثالث زبون 3 وهكذا
.. بعد ذلك أخبرنا الـ server أن هذا الصف لابد من إدخال بيانات فيه وأن لا يقبل أن يكون فارغا وذلك عن طريق الكلمة NOT NULL
.. ثم نضع علامة كومة " , " لنخبر الـ server أننا إنتهينا من كون أول صف وسننتقل للذي يليه
.. وهكذا حتى آخر صف ثم نغلق القوس . " أليس الأمر بسيط http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif "

مصطفى عدوية
11-04-2007, 01:22 AM
أخبرتكم فيما مضى أن هناك ميزة جديدة في sql server 2005 تسمى الـ Template وهي عبارة عن كود جاهز لإنشاء العناصر المختلفة التى نتعامل معها خلال عملنا مع قواعد البيانات .. ومنها بالطبع الجدول .. http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif .. إذن جاء الوقت لنستكشف هذه الميزة وننشأ بها جدول جديد

-- أنقر المفاتيح Ctrl+Alt+T .. أو إذهب للقائمة view ثم Template Explorer لفتح نافذة الـ Template


http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 67% من الحجم الأصلي [ 888 x 620 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/02_03_06_06_53_38_1141354418_7.gif (http://www.arabteam2000.com/)


-- قم بإستكشافها والتعرف على ما بها .. حتى تصل للجزء Table .. قم بفتحه لتجد مجموعة من الأكواد التى يمكن تطبيقها على الجداول .. قم بالنقر المزدوج على create table ... أن أن تششششش .. http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif .. قد تم فتح نافذة الكود ووضع كود إنشاء جدول .. ولكن ما هذا .. إنه كود كبير ..
-- =========================================
-- Create table template
-- =========================================
USE <database, sysname, AdventureWorks>
GO

IF OBJECT_ID('<schema_name, sysname, dbo>.<table_name, sysname, sample_table>', 'U') IS NOT NULL
DROP TABLE <schema_name, sysname, dbo>.<table_name, sysname, sample_table>
GO

CREATE TABLE <schema_name, sysname, dbo>.<table_name, sysname, sample_table>
(
<columns_in_primary_key, , c1> <column1_datatype, , int> <column1_nullability,, NOT NULL>,
<column2_name, sysname, c2> <column2_datatype, , char(10)> <column2_nullability,, NULL>,
<column3_name, sysname, c3> <column3_datatype, , datetime> <column3_nullability,, NULL>,
CONSTRAINT <contraint_name, sysname, PK_sample_table> PRIMARY KEY (<columns_in_primary_key, , c1>)
)
GO

-- إنه كبير ولكن لأنه يشمل الكثير من التوضيح ليس إلا .. ولكن الأمر مربك http://www.arabteam2000-forum.com/style_emoticons/default/wacko.gif .. http://www.arabteam2000-forum.com/style_emoticons/default/teeth_smile.gif .. لا عليك .. هل ترى هذا الكلام الذي بين قوسين أكبر من وأصغر من .. إنه يرشدك لأن تضع مكانه ما يناسب جدولك فهو يضع أولا إسم هذا العنصر ثم نوعه ثم قيمته .
.. وكل ما عليك الآن هو نقر المفاتيح Ctrl+Shift+M لتفتح لك نافذة ملء مكان هذه الأقواس ، التى تحول لك هذه الأقواس لجدول لطيف تعدل فيه بيانات وقيم الجدول كما تشاء ...



http://www.arabteam2000-forum.com/style_images/zajil2.2.1/img-resized.png مصغرة بنسبة : 67% من الحجم الأصلي [ 888 x 620 ] - إضغط هنا لعرض الحجم الأصلي
http://www.arabteam2000.com/picload/pics_10_05/02_03_06_06_54_36_1141354476_8.gif (http://www.arabteam2000.com/)

ولكن هذا الجدول يعطيني 3 صفوف فقط ، ولا يناسب إحتياجاتي ..

.. يا راجل إشتغل بقة شوية .. عدل في الكود وضاعف عدد الصفوف كما تشاء ورتب ونسق وفي النهاية أنقر Ctrl+Shift+M وعدل القيم كما تشاء .

والمفاجأة كمان إنك ممكن تعمل الـ template الخاصة بيك .. أو تعدل في أصل الـ template الموجودة علشان تناسب إحتياجاتك .. إزاي ؟

بص يا سيدي .. كل ما عليك هو عمل نقرة يمين على الـ template وإختيار new لعمل folder أو template جديد ، أو إختيار edit لتعديل الـ template الموجود وفي النهاية إحفظ ناتج تغيراتك .

-- ملفات الـ template دي موجودة في المسار


كود
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\sqlworkbe nchnewitems\Sql


دة لو كنت من هواة الإستكشاف

-- فعلا تطوير جميل وحيوفر عليك شغل كتير

.. على فكرة في بداية كود إنشاء الجدول في الـ template بيشوف الأول هل الجدول إلي عايز تنشأه موجود ولا لا .. ولو موجود بيحذفه وبينشأ جدول جديد .. " برده لو عايز تعدل في القصة دي على راحتك " وطبعا بالمثل في كل المكتبة إلي موجودة عندك دي

PlayZone
05-24-2008, 04:00 AM
الله يجزاك خير على هالمجهود


الصور لاتظهر في الدرس .. وبصراحه انا مهتم جدا بالموضوع اتمنى ان تحدث الصور أو تنزل الدروس على صيغه وورد او بي دي اف



انا بانتظار ردك


=== هذه الرسالة تلقائية ===

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

المبتدئة
10-26-2008, 09:00 PM
فى البداية بشكرك يا اخ مصطفى على مجهودك وربنا اعلم انا محتاجة الدورة دى تكمل اد ايه .... بس احب الفت نظرك لحاجة الموضوع دا بالنص انا لقيته على موقع تانى بالحرف فارجو اذا كان منقول تنوه عن دا واذا كان بتعبك يبقى حاول تحافظ عليه باستخدام الخاصية اللى بتمنع النسخ عشان تعبك ميرحش لغيرك والفضل ينسب لاصحابه وربنا يعينك وتكمل الكورس دا ان شاء الله لانى متأكدة ان فيه غيرى كتير محتاجينه.