به نام خدا
اعتقاد به بخت و قسمت بدترين نوع بردگي است
عادت کنيد که به چيزي عادت نکنيد
***********
موضوع مقاله : sql server
تهیه و تنظیم : شریفی تهرانی ۰۹۱۳۲۱۳۸۹۳۲
برگرفته از: سخا روش
MS SQL Server يکی از سيستم های مديريت بانک های اطلاعاتی رابطه ای (Relational) است که توسط شرکت مايكروسافت ارائه شده است . SQL Server از مدل سرويس دهنده - سرويس گيرنده (Client/Server) تبعيت می نمايد . در اين مدل ، درخواست های (InQuery) سرويس گيرندگان برای سرويس دهنده ارسال و در سمت سرويس دهنده بررسی و آناليز می گردند . در ادامه ، پردازش های مورد نياز بر روی اطلاعات ذخيره شده در بانک های اطلاعاتی انجام و در نهايت ، نتايج برای سرويس گيرنده ارسال خواهد شد .
MS SQL Server با استفاده از مجموعه عناصری ( Components ) كه به صورت هدفمند اجراء می گردند ، قادر به تامين نيازها و درخواست ها از مخازن داده (Data Storages) می باشد . مخازن داده در SQL Server به دو روش زير مديريت می گردند :
· OLTP ( برگرفته از OnLine Transaction Processing System )
· OLAP ( برگرفته از OnLine Analytical Processing System )
در مدل OLTP ، مخازن داده به صورت جداول رابطه ای که عموما" به جهت جلوگيری از تکرار و ناهمگونی اطلاعات به صورت هنجار (Normalize) درآمده اند ، سازماندهی می شوند . اين نوع از بانک های اطلاعاتی برای درج و تغییر سریع اطلاعات توسط چندین کاربر بطور همزمان مناسب می باشند .
در مدل OLAP مخازن داده جهت تجزيه و تحليل و خلاصه سازی حجم زيادی از اطلاعات سازماندهی می شوند . مخازن داده و ارتباط بين اطلاعات در اين مدل توسط SQL Server مديريت می گردد .
يکی از اهداف مهم سيستم های مديريت بانک های اطلاعاتی ، قابليت رشد و توسعه (Scalability) است . MS SQL Server مجموعه ای از پتانسيل ها را به منظور تامين هدف فوق ارائه نموده است كه به برخی از مهمترين آنها اشاره می گردد :
· قابليت کار با بانکهاي اطلاعاتی حجيم (در حد ترابايت)
· قابليت دسترسی هزاران کاربر بطور همزمان به بانک اطلاعاتی
· قابليت خود سازگاری (Self Compatibility) . با استفاده از ويژگی فوق ، منابع مورد نياز هر كاربر (نظير حافظه ، فضای ديسک و ...) به محض اتصال به سرور (Log in) به صورت اتوماتيك به وی تخصيص داده می شود و پس از Log off ، منابع اختصاص يافته به منظور استفاده ساير كاربران آزاد می شوند .
· قابليت اعتماد و در دسترس بودن (Reliability) . با استفاده از ويژگی فوق می توان بسياری از فعاليت های مديريتی را بدون توقف سرور انجام داد (نظير BackUp) .
· برخورداری از سطوح امنيتی بالا . بدين منظور اعتبار سنجی کاربران توسط SQL با اعتبار سنجی ويندوز تجميع می گردد . در چنين مواردی ، ضرورتی به تعريف کاربر در MS SQL نخواهد بود و اعتبار سنجی وی توسط ويندوز انجام خواهد شد .
· پشتيبانی از حجم بالائی از حافظه در سرور (در نسخه 2000 تا 64 گيگابايت و در نسخه 2005 متناسب با حافظه ای كه سيستم عامل از آن حمايت می نمايد ) .
· استفاده از چندين پردازنده به صورت موازی (در نسخه 2000 تا 32 پردازنده همزمان و در نسخه 2005 محدوديتی وجود ندارد )
· پشتيباني از لايه ها و سوکت های امنيتی نظير SSL ، خصوصا" جهت استفاده در وب .
یکی ديگر از ويژگی های مهم سيستم های مديريت بانک های اطلاعاتی ، ايجاد تسهيلات لازم به منظور مديريت بانك های اطلاعاتی است . SQL Server با ارائه برنامه هاي جانبی نظير Enterprise Manager استفاده و مديريت بانک های اطلاعاتی را آسان نموده است .
MS SQL Server بطور اتوماتيک در Active Directory ثبت می شود (Register) ، بنابراين کاربران شبکه به راحتی می توانند آن را در Active Directory جستجو و در صورت نياز به آن متصل شوند . همچنين ، MS SQL Server توسط IIS پشتيبانی می گردد و مرورگرها با استفاده از پروتکل HTTP قابليت استفاده از آن را خواهند داشت .
از جمله نكات مهم در خصوص MS SQL Server ، اجرای آن به صورت يك سرويس است . بنابراين ، در صورتی كه كاربری به ماشينی كه MS SQL Server بر روی آن اجراء شده است ، Log on نكرده باشد ، همچنان سيستم در دسترس كاربران خواهد بود . علاوه بر اين ، می توان از سيستم مانيتورينگ ويندوز به منظور مانيتورينگ SQL Server استفاده نمود .
یکی از مهمترین و شاخص ترین ویژگی های MS SQL Server که از نسخه 2000 در آن ايجاد شده است ، امکان نصب چندین نسخه SQL بر روی یک ماشین می باشد (Multi Instance) ، بطوریکه هر یک از نسخه ها فایل های باینری مخصوص به خود را داشته و بطور جداگانه مدیریت و راهبری می گردند ، ولی تمام نسخه ها بطور همزمان اجرا می شوند (دقيقا" مشابه اين است كه چندين نسخه بر روی چندين كامپيوتر نصب شده باشد ) .
با توجه به اين كه نسخه (Instance) قراردادی فاقد نام است و سایر نسخه ها می بايست دارای نام باشند به آنها نسخه های دارای نام (Named Instance) می گويند . نسخه های دارای نام را می توان هر زمان نصب نمود (قبل و یا بعد از نسخه قراردادی) . ابزارهای همراه SQL نظیر SQL Enterprise Manager یک مرتبه نصب خواهند شد و در تمامی نسخه های SQL به صورت مشترك استفاده خواهند شد .
تاكنون نسخه های متعددی از MS SQL Server ارائه شده است . استفاده از نسخه های 2000 و 2005 بيش از ساير نسخه ها ، متداول است . هر يک از نسخه های MS SQL Server ، در مدل های مختلف ( با توجه به نوع استفاده و اندازه سازمان متقاضی ) ، ارائه شده اند كه در يك مقاله جداگانه به بررسی ويژگی هر يك از آنها خواهيم پرداخت .
بانک های اطلاعاتی رابطه ای : مفاهيم و تعاريف
قبل از پرداختن به موضوع بانک های اطلاعاتی رابطه ای (Relational Data Base) ، بهتر است اشاره ای به مفاهيم ذيل داشته باشيم :
· موجوديت (Entity)
به هر چيزی (شی ، شخص ، محل و ...) که می خواهيم در يک سيستم راجع به آن اطلاعاتی را جمع آوری ، پردازش و نگهداری نمائيم ، يک موجوديت گفته می شود . تعريف فوق ، متداولترين برداشت اوليه از موجوديت می باشد . مجموعه موجوديت های يک سيستم ، ساختار اطلاعاتی آن سيستم را مشخص می كند . هر موجوديت شامل اجزاء و المان هائی است که آن موجوديت را توصيف می كند كه به آنها خصيصه و يا Attribute گفته می شود . هر موجوديت بسته به اين كه در سيستم مورد مطالعه چه ميزان اطلاعات راجع به آن می خواهيم داشته باشيم ، شامل حداقل يک و يا چند خصيصه خواهد بود. از آنجا که هر موجوديت راجع به يک موضوع به خصوص می باشد ، بنابراين يک ارتباط منطقی بين کليه خصايص موجوديت وجود خواهد داشت .در واقع ، تمام خصائص يک موجوديت توصيف کننده آن موجوديت خواهد بود . برای روشن شدن موضوع بد نيست به نمونه مثال ذيل توجه نمائيد :
- موجوديت مشتری شامل خصلت های نام مشتری ، آدرس مشتری ، تلفن مشتری و ... است .
- موجوديت سفارش شامل خصلت های شماره سفارش ، تاريخ سفارش ، نام مشتری ، کالای سفارش شده ، تعداد کالای سفارش شده و ... است
همانگونه که در مثال فوق مشاهده گرديد ، تمام خصلت های موجوديت مشتری توصيف کننده يک مشتری و تمام خصلت های موجوديت سفارش توصيف کننده يک سفارش می باشند .
· کليد (Key)
هر رخداد از يک موجوديت را بايد بتوان به وسيله يک و يا ترکيبی از چند خصيصه آن به صورت يکتا شناسائی نمود . به تعبير ديگر ، هر يک از رخدادهای يک موجوديت بايد يکتا باشد ، در غير اينصورت تغيير و يا حذف يک رخداد از موجوديت (در مثال فوق يک مشتری) غير ممکن خواهد بود . از اينرو از بين خصلت های يک موجوديت يک و يا ترکيبی از چند خصيصه به عنوان کليد آن موجوديت انتخاب می شود . اين خصلت (و يا ترکيب خصلت ها) بايد بتواند يکتائی هر رخداد از موجوديت را تضمين نمايد . در موجوديت سفارش مثال فوق ، خصلت شماره سفارش می تواند بعنوان کليد انتخاب شود .
توضيح : در برخی از موارد در يک موجوديت چندين کليد وجود دارد كه به هر يک از آنها يک Candidate Key يا Alternate Key گفته می شود .
در برخی از حالات نمی توان در يک موجوديت هيچ کانديدی براي کليد يافت ، مانند موجوديت مشتری در مثال فوق . در اين موجوديت هيچيك از خصلت ها و يا هيچ ترکيبی از آنها نمی تواند صد درصد تضمين کننده يکتائی آن باشد (با اينکه احتمال وجود دو مشتری هم نام در يک آدرس و با يک شماره تلفن بسيار کم است ، اما باز هم احتمال وقوع دارد) . در چنين مواردی مجبور هستيم يک خصلت به موجوديت اضافه کنيم تا تضمين کننده يکتائی رخدادهای آن باشد . در مثال فوق با اضافه کردن خصلت کد مشتری به موجوديت مشتری ، می توان يکتائی آن را تضمين نمود . به اين نکته دقت شود که بسياری از خصلت های يک موجوديت در کنترل سيستم نيست و از خارج به سيستم تحميل می گردد . به عنوان مثال ما نمی توانيم تعيين کنيم که نام مشتری های سازمان تکراری نباشد . اما عدم تکراری بودن خصلت هائی که خود ما ايجاد نموده ايم را می توان تضمين کرد ( نظير کد مشتری که توسط سيستم و يا سازمان مربوطه توليد می شود ) .
· کليد اصلی (Primary Key)
از بين کليدهای يک موجوديت (Candidate Key) ، می بايست يک کليد را به عنوان کليد اصلی انتخاب نمود . معيارهای مختلفی در اين انتخاب دخيل هستند ، اما معمولا" بهترين کليدی که معرف مفهوم و ماهيت موجوديت باشد به عنوان کليد اصلی انتخاب می گردد .
· وابستگی تابعی (Functional Dependency)
وابستگی تابعی مفهومی است که مابين خصلت های يک موجوديت تعريف می گردد . به اين معني که می گوئيم خصلت A با خصلت B وابستگی تابعی دارد ، در صورتيکه به ازای هر مقدار مشخص از خصلت B بتوان مقدار مشخص و يکتائی از خصلت A را بدست آورد ، اما عکس آن ممکن است صادق نباشد . در موجوديت مشتری مثال قبل ، به ازای هر کد مشتری می توان نام او را بدست آورد در اين صورت می گوئيم خصلت نام مشتری با خصلت کد مشتری وابستگی تابعی دارد . اما عکس آن صادق نيست چرا که به ازای يک نام مشتری مشخص ، نمی توان يک کد مشتری يکتا استخراج نمود (دو مشتری مختلف می توانند نام يکسان داشته باشند ، در اين حالت يک نام مشتری ممکن است متناظر با دو و يا حتی چند کد مشتری باشد).
· انواع رابطه بين خصلت های يک موجوديت
بين خصلت های يک موجوديت سه نوع رابطه وجود دارد :
- رابطه يک به يک (One To One) : در حالتی اتفاق می افتد که خصلت A وابستگی تابعی به خصلت B داشته باشد و خصلت B نيز وابستگی تابعی به خصلت A داشته باشد . در اين حالت هر دو خصلت A و B کانديدای کليد شدن می باشند.
- رابطه يک به چند (One To Many) : اگر خصلت A وابستگی تابعی به خصلت B داشته باشد و عکس آن صادق نباشد ، يك ارتباط از نوع يک به چند وجود خواهد داشت . در اين حالت ، خصلت B کانديد کليد شدن است و خصلت A صرفا" يکی از توصيف گرهای موجوديت محسوب می گردد .
- رابطه چند به چند (Many To Many) : اگر دو خصلت هيچکدام وابستگی تابعی به يکديگر نداشته باشند آنگاه رابطه بين آنها چند به چند خواهد بود . در اين حالت هيچيکدام از آنها کانديد کليد شدن نبوده (ممکن است ترکيب آنها کانديد کليد شدن باشد) و صرفا" توصيف کننده موجوديت خواهند بود .
· هنجار سازی (Normalization)
هنجار سازی ، فرآيندی است كه طی آن يك موجوديت جهت به حداقل رسانی نابهنجاری های بوجود آمده در خلال تغييرات اعمال شده بر روی رخدادهاي يک موجوديت مورد بررسی و تبديل قرار می گيرد. اگر اين فرآیند به طور صحيح بر روی يک موجوديت اعمال نگردد ، آنگاه نمی توان هيچ تضمينی در خصوص حفظ يکپارچگی اطلاعات آن موجوديت ارائه داد . فرآيند هنجار سازی به دليل اهميت و گستردگی آن در مقاله ای جداگانه تشريح خواهد شد.
· نا بهنجاری
به پيامدهای ناخواسته تغيير اطلاعات نابهنجاری گفته می شود .
· Relation
موجوديت ها در مدل منطقی داده های سيستم مورد بحث و بررسی قرار می گيرند و پس از طی فرآيند هنجارسازی در مرحله فيزيکی به صورت ماتريسهای دوبعدی مشتمل بر سطرها (رخدادهاي مختلف يک موجوديت) و ستون ها (خصلت های مختلف آن موجوديت) تعريف می گردند . هر يک از اين ماتريس ها را يک ارتباط يا Relation می نامند که در مدل فيزيکی معمولا" آنها را با نام جدول (Table) معرفی می کنند . همانطور که پيش از اين اشاره شد تمام خصلت های يک موجوديت با يکديگر ارتباط منطقی داشته و معرف آن موجوديت می باشند ، از اينرو به اين جداول ارتباط می گويند .
· Tuple
هر يک از رخدادهای مختلف يک موجوديت را يک Tuple می گويند که در مدل فيزيکی معمولا" از آنها با نام رديف (Row) و يا رکورد (Record) نام برده می شود . بنابراين Tuples ، رديف های جدول دو بعدی هستند که آن را به عنوان Relation و يا Table می شناسيم .
· Attribute
هريک از خصلت های مختلف يک موجوديت را Attribute می نامند ( نظير کد مشتری ) . معمولا" در مدل فيزيکی به جای Attribute از فيلد (Field) و يا ستون (Column) استفاده می شود . بنابراين Attributes ، ستون های جدول دو بعدی هستند که آن را به عنوان Relation و يا Table می شناسيم .
شكل زير يك Relation را به همراه اجزاء آن نشان می دهد :
يك Relation به همراه اجزاء آن
- ارتباط (Relationship)
منظور ارتباط بين دو Relation و یا جدول است که بر اساس برابری فيلدهای يکسان در هر جدول تعريف و دارای انواع مختلفی است . ( به دليل اهميت و گستردگی ، در مقاله ای جداگانه تشريح خواهد شد) . اين ارتباط ها در مدل منطقی مابين موجوديت ها (خصوصا" موجوديت های نرمال شده ) تعيين می گردند و به آن Entity Relation یا ER سيستم می گويند . مدل ER سيستم توسط ابزارهای مستند سازی جهت درک بهتر مدل داده ای سيستم ترسيم می گردد که به آنها ERD می گويند .
پس از تشريح برخی از مفاهيم اوليه و در عين حال مهم بانك های اطلاعاتی رابطه ای ، به اختصار می توان گفت که يک بانک اطلاعات رابطه ای مجموعه ای از رابطه ها (Relations) و يا جداول به همراه تمامی ارتباط هائی (Relationship) است که بين آنها وجود دارد . هر بانک اطلاعاتی در خصوص يک سيستم مورد نظر طراحی و ايجاد می گردد ، اما در برخی از سازمان های بزرگ که بين سيستم های مختلف آن ارتباط وجود دارد (نظير سيستم پرسنلی ، حقوق و دستمزد و مالی و ...) ممکن است بانک های اطلاعاتی با يکديگر تجميع و پس از طی فرآيند يکپارچه سازی به صورت يک بانک اطلاعاتی جامع و يکپارچه برای آن سازمان تعريف و ايجاد گردد .
امروزه سيستم های مديريتی بانک های اطلاعاتی رابطه ای مختلفی وجود دارد که هر يک ويژگی ها و قابليت هايی خاص خود را دارند . به اين سيستم ها و يا نرم افزارها اختصارا" RDBMS گفته می شود . MS ACCESS ، MS SQL ، ORACLE ، SYBASE ، نمونه هائی متداول در اين زمينه می باشند .
تمامی سيستم های مديريت بانک های اطلاعاتی رابطه ای به منظور ارائه قابليت های خود و استفاده از آنها از زبان مشترکی که به آن SQL ( برگرفته شده از Structured Query Language ) گفته می شود ، استفاده می نمايند . تمامی نيازها و انتظارات کاربران از بانک های اطلاعاتی نظير جستجوی اطلاعات ، ايجاد ، تغيير و يا حذف اطلاعات حتی ايجاد بانک اطلاعاتی و يا ساير اجزاء مرتبط با آن توسط زبان فوق تعريف و تحويل RDBMS داده خواهد شد تا پس از بررسی بر روی بانک اعمال گردد.(تهیه و تنظیم شریفی تهرانی عارف)