برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

مراقب ضمائم نامه های الکترونیکی باشید !

مراقب ضمائم نامه های الکترونیکی باشید !
ارسال فایل و سایر مستندات به عنوان فایل ضمیمه همراه یک نامه الکترونیکی به امری متداول تبدیل شده است . علیرغم تمامی مزایای و پتانسل های ویژگی فوق ، ضمائم نامه های الکترونیکی به یکی از منابع اصلی به منظور توزیع ویروس ، تبدیل شده اند . استفاده کنندگان نامه های الکترونیکی ، می بایست در زمان بازنمودن فایل های ضمیمه ، دقت لازم را داشته باشند.(ولو اینکه این نوع ضمائم و نامه های الکترونیکی توسط افرادی ارسال می گردد که شما آنان را می شناسید ).

چرا ضمائم نامه های الکترونیکی می توانند خطرناک باشند :
شاید این سوال برای شما مطرح شده باشد که چرا ضمائم نامه های الکترونیکی می توانند خطرناک بوده و تهدیدی در مقابل ایمن سازی اطلاعات باشند؟ . در این رابطه به موارد زیر اشاره می گردد :

*

چرخش آسان نامه های الکترونیکی : چرخش و حرکت نامه های الکترونیکی بسیار ساده بوده و ویروس ها می توانند در مدت زمان کوتاهی تعداد زیادی از ماشین ها را آلوده نمایند . اکثر ویروس ها حتی به این موضوع نیاز نخواهند داشت که کاربران نامه های الکترونیکی را فوروارد نمایند . ویروس ها ، کامپیوتر کاربر را به منظور آگاهی از لیست آدرس نامه های الکترونیکی پویش نموده و به صورت اتوماتیک اقدام به ارسال پیام های آلوده برای هر یک از آدرس های موجود در دفترچه آدرس نامه های الکترونیکی ، می نمایند . مهاجمان از این واقعیت ناگوار استفاده می نمایند که اکثر کاربران به نامه های ارسالی بهمراه ضمائم مربوطه از جانب هر شخص اعتماد می نمایند ( سوء استفاده از حسن اعتماد کاربران ) .
*

برنامه های پست الکترونیکی ، سعی در تامین تمامی نیازهای کاربران می نمایند . تقریبا" هر نوع فایل می تواند به عنوان یک فایل ضمیمه در نظر گرفته شود . بنابراین مهاجمان دارای آزادی عمل زیادی در خصوص نوع ویروس ها ، می باشند.
*

برنامه های پست الکترونیکی دارای امکانات گسترده و متعددی در سطح لایه رابط کاربر می باشند . برخی از این نوع برنامه ها ، امکان دریافت اتوماتیک ضمائم نامه های الکترونیکی را فراهم می نمایند. بدین ترتیب ، امکان آلودگی سیستم بدلیل دریافت یک فایل ضمیمه آلوده افزایش خواهد یافت .

مراحل لازم به منظور حفاظت خود و سایر افراد موجود در لیست دفترچه آدرس

*

دقت لازم در خصوص ضمائم ناخواسته حتی در مواردیکه از هویت فرد ارسال کننده ، آگاهی لازم وجود داشته باشد. صرف این که یک نامه الکترونیکی از طرف برادر ، دوستان و یا همکاران ارسال شده باشد ، به منزله ایمن بودن آنان نمی باشد . تعداد زیادی از ویروس ها قادر به "جعل" آدرس و نمایش آن به صورت یک پیام ارسالی توسط اشخاص دیگر می باشند . در صورت امکان و قبل از باز نمودن فایل ضمیمه ، بررسی لازم در خصوص هویت فرد ارسال کننده فایل ضمیمه را انجام دهید . در برخی موارد این نوع نامه های الکترونیکی در ظاهری خیرخواهانه و اطلاع رسانی در خصوص ارائه یک محصول و یا Patch جدید ، مخاطبان خود را شکار می نمایند .فراموش نکنیم که تولید کنندگان نرم افزار ، هرگز patch و یا محصول جدید خود را از طریق نامه الکترونیکی ، ارسال نمی نمایند .
*

ذخیره و بررسی ضمائم قبل از باز نمودن آنان : در صورتی که شما مجبور به باز نمودن یک فایل ضمیمه قبل از بررسی منبع ارسال کننده آن می باشید ، پیشنهاد می گردد ، مراحل زیر دنبال شود :
- از بهنگام بودن نرم افزار آنتی ویروس خود مطمئن شوید .
- فایل ضمیمه ارسال شده را بر روی کامپیوتر خود ذخیره نمائید .
- با استفاده از نرم افزار آنتی ویروس ، بررسی لازم در خصوص آلودگی فایل ذخیره شده را انجام دهید .
- پس از انجام مراحل فوق و اطمینان از عدم آلودگی فایل ضمیمه ، می توان آن را فعال نمود .
*

ویژگی دریافت اتوماتیک فایل های ضمیمه را در نرم افزار خود ، غیر فعال نمائید . به منظور تسهیل در امر دریافت و مشاهده نامه های الکترونیکی ، تعداد زیادی از برنامه های پست الکترونیکی ، امکان دریافت اتوماتیک ضمائم نامه های الکترونیکی را در برنامه خود پیش بینی نموده اند . پیشنهاد می گردد بررسی لازم در خصوص تنظیمات موجود نرم افزار استفاده شده به منظور دریافت نامه های الکترونیکی انجام و در صورت وجود ویژگی فوق ، آن را غیرفعال نمائید .

استفاده ایمن از برنامه های IM و Chat

استفاده ایمن از برنامه های IM و Chat
با این که برنامه های IM و Chat ، روشی مناسب به منظور ارتباط با سایر افراد می باشند ، ابزارهای استفاده شده برای این نوع از مبادلات اطلاعاتی online می تواند خطرناک بوده و نتایج مخربی را به دنبال داشته باشد .

تفاوت ابزارهای استفاده شده برای مبادلات online
به منظور مبادله اطلاعاتی online بر روی اینترنت ، از ابزارهای متعددی استفاده می گردد . بررسی ویژگی هر یک از این ابزارهای موجود بهمراه تهدیدات مربوطه ، امکان استفاده ایمن و مطمئن از این نوع ابزارها را فراهم می نماید .

*

برنامه های Instant messaging ) IM) : از این نوع برنامه ها به منظور تفریح ، سرگرمی ، ارسال پیام ، ارتباط صوتی و یا تصویری با سایر افراد استفاده می گردد . از برنامه های فوق در سازمان ها به منظور ارتباط بین کارکنان نیز استفاده می گردد. صرفنظر از نوع برنامه انتخابی IM ، این نوع برنامه ها بستر مناسبی به منظور ارتباط یک به یک را ایجاد می نماید .
*

اطاق های چت : اطاق های چت صرفنظر از عمومی بودن و یا خصوصی بودن ، تالارهائی برای گروههای خاص از مردم و به منظور ارتباط با یکدیگر می باشند .اکثر اطاق های چت مبتنی بر خصایص مشترکی می باشند : مثلا" اطلاق هائی مختص افرادی با سن خاص و یا علائق مشترک . با اینکه اکثر برنامه های سرویس گیرنده IM از چت ، حمایت می کنند ، برنامه های IM همچنان و بر اساس روش سنتی خود ابزاری برای ارتباطات یک به یک می باشند . در حالی که چت به صورت سنتی ابزاری برای ارتباط چند نفر به چند نفر می باشد .

به منظور طراحی و پیاده سازی برنامه های فوق از فن آوری های متعددی نظیر : IM ، IRC و یا Jabber استفاده می گردد . برخی از نرم افزارهای ارائه شده با ترکیب چندین قابلیت توانسته اند پاسخگوی خواسته های متنوع کاربران باشند .

تهدیدات این نوع برنامه ها چیست ؟

*

وجود ابهام در خصوص هویت مخاطب . در برخی موارد نه تنها شناسائی مخاطب و شخصی که در حال ارتباط با وی هستید مشکل می باشد بلکه ماهیت انسانی و رفتاری وی نیز قابل پیش بینی نخواهد بود. مردم ممکن است در رابطه با هویت خودشان ، گزاف گفته ، account ها ممکن است در معرض سوء ظن باشند و یا ممکن است کاربران عملیات logout را فراموش نمایند . در برخی موارد ممکن است یک account توسط چندین نفر و به صورت مشترک استفاده می گردد . تمامی موارد فوق ، دلیلی است بر این ادعا که نمی توان بطور واقعی و حقیقی در رابطه با ماهیت شخصی که در حال گفتگو با وی هستید ، قضاوت کرده و به یک سطح مطلوب از اطمینان دست پیدا کرد .
*

کاربران ، مستعد انواع حملات می باشند . سعی کنید به شخصی بقبولانید که برنامه ای را اجراء و یا بر روی یک لینک ، کلیک نماید . اجرای یک برنامه به توصیه دیگران و یا کلیک بر روی یک لینک پیشنهادی توسط سایرین ، یکی از روش های متداول به منظور انجام برخی تهاجمات می باشد . این موضوع در اطاق های چت و یا برنامه های IM امری متداول و مرسوم است . در محیطی که یک کاربر در این اندیشه است که در یک جو مطمئن و اعتماد پذیر در حال گفتگو با اشخاص است ، یک کد مخرب و یا یک مهاجم می تواند شانس بیشتری برای رسیدن به اهداف خود و به دام انداختن سایر افراد را داشته باشد .
*

عدم وجود آگاهی لازم در خصوص سایر افراد درگیر و یا ناظر گفتگو : مبادلات online بسادگی ذخیره می گردند و در صورتی که شما از یک سرویس اقتصادی رایگان استفاده می نمائید، ماحصل گفتگوی انجام شده می تواند بر روی یک سرویس دهنده ذخیره شده ( logs ) و شما هیچگونه کنترلی در خصوص این logs نخواهید داشت . شما نمی دانید که آیا اشخاص و افراد دیگر نظاره گر این گفتگو می باشند یا خیر ؟ یک مهاجم می تواند بسادگی اقدام به شنود اطلاعات و ره گیری آنان از طریق مبادلات اطلاعاتی انجام شده در اطاق های چت نماید .
*

نرم افزاری که شما بدین منظور استفاده می نمائید ممکن است دارای نقاط آسیب پذیر خاص خود باشد . همانند سایر نرم افزارها ، نرم افزارهای چت ، ممکن است دارای نقاط آسیب پذیری باشند که مهاجمان با استفاده از آنان می توانند به اهداف خود نائل گردند .
*

تنظیمات امنیتی پیش فرض انجام شده ، ممکن است به درستی مقداردهی نشده باشند . تنظیمات امنیتی در نرم افزارهای چت ، با نگرشی خیرخواهانه و ساده در نظر گرفته شده تا بدینوسیله و به زعم خود پتانسیل های بیشتری را در اختیار متقاضیان قرار دهند . رویکرد فوق ، کاربران و استفاده کنندگان از این نوع برنامه ها را مستعد انواع حملات توسط مهاجمان می نماید .

چگونه می توان از این ابزارها به صورت ایمن استفاده نمود ؟

*

بررسی و ارزیابی تنظیمات امنیتی :در این رابطه لازم است تنظیمات پیش فرض در نرم افزار به منظور بهینه سازی امینتی آنان بررسی گردد .مطمئن شوید که ویژگی دریافت اتوماتیک فایل ( Download ) ، غیر فعال شده باشد. برخی از نرم افزارهای چت ، امکان ارتباط محدود با افراد را ارائه می نماید . در صورتی که از این نوع برنامه ها استفاده می نمائید ، پیشنهاد می گردد ویژگی فوق فعال گردد .
*

هشیاری و دقت لازم در خصوص افشای اطلاعات. تا زمانی که نسبت به هویت طرف درگیر در ارتباط اطمینان لازم را کسب نکرده اید ، از افشای اطلاعات شخص و مهم خود جدا" اجتناب کنید . مبادله اطلاعات در اطاق های چت می بایست با دقت و حساسیت بالا ، انجام شود .هرگز اطلاعات تجاری و حساس مربوط به سازمان خود را در اطاق های چت و یا برنامه های عمومی IM افشاء و برملاء ننمائید .
*

شناسائی هویت افرادیکه در حال گفتگو با آنان هستید ( حتی المقدور ). در برخی موارد تشخیص هویت فردی که در حال گفتگو با وی می باشید ، چندان حائز اهمیت نمی باشد. در صورتی که شما نیازمند سطح خاصی از اطمینان در خصوص شخص مورد نظر می باشید و یا قصد اشتراک اطلاعاتی خاص با وی را دارید ، شناسائی هویت مخاطب بسیار حائز اهمیت است (مطمئن شوید شخصی که در حال گفتگو با وی هستید ، همان شخص مورد نظر شما است ) .
*

عدم اعتماد و باور هر چیز :اطلاعات و یا توصیه هائی که شما از طریق یک اطاق چت و یا برنامه های IM دریافت می نماید، ممکن است نادرست ، غلط و حتی مخرب باشند . در اینگونه موارد می بایست در ابتدا بررسی لازم در خصوص صحت اطلاعات و یا دستورالعمل های ارائه شده ، انجام و در ادامه از آنان استفاده گردد.
*

بهنگام نگه داشتن نرم افزارها : فرآیند بهنگام سازی نرم افزارها شامل نرم افزار چت ، مرورگر وب ، سیستم عامل ، برنامه سرویس گیرنده پست الکترونیکی و برنامه آنتی ویروس است . عدم بهنگام بودن هر یک از برنامه های فوق می تواند زمینه بروز تهاجمات توسط مهاجمان را فراهم نماید .

مقدمه ای بر Microsoft 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 Employee
یک Relation به همراه اجزاء آن

*

ارتباط (Relationship)
منظور ارتباط بین دو Relation و یا جدول است که بر اساس برابری فیلدهای یکسان در هر جدول تعریف و دارای انواع مختلفی است . ( به دلیل اهمیت و گستردگی ، در مقاله ای جداگانه تشریح خواهد شد) . این ارتباط ها در مدل منطقی مابین موجودیت ها (خصوصا" موجودیت های نرمال شده ) تعیین می گردند و به آن Entity Relation یا ER سیستم می گویند . مدل ER سیستم توسط ابزارهای مستند سازی جهت درک بهتر مدل داده ای سیستم ترسیم می گردد که به آنها ERD می گویند .

پس از تشریح برخی از مفاهیم اولیه و در عین حال مهم بانک های اطلاعاتی رابطه ای ، به اختصار می توان گفت که یک بانک اطلاعات رابطه ای مجموعه ای از رابطه ها (Relations) و یا جداول به همراه تمامی ارتباط هائی (Relationship) است که بین آنها وجود دارد . هر بانک اطلاعاتی در خصوص یک سیستم مورد نظر طراحی و ایجاد می گردد ، اما در برخی از سازمان های بزرگ که بین سیستم های مختلف آن ارتباط وجود دارد (نظیر سیستم پرسنلی ، حقوق و دستمزد و مالی و ...) ممکن است بانک های اطلاعاتی با یکدیگر تجمیع و پس از طی فرآیند یکپارچه سازی به صورت یک بانک اطلاعاتی جامع و یکپارچه برای آن سازمان تعریف و ایجاد گردد .
امروزه سیستم های مدیریتی بانک های اطلاعاتی رابطه ای مختلفی وجود دارد که هر یک ویژگی ها و قابلیت هایی خاص خود را دارند . به این سیستم ها و یا نرم افزارها اختصارا" RDBMS گفته می شود . MS ACCESS ، MS SQL ، ORACLE ، SYBASE ، نمونه هائی متداول در این زمینه می باشند .
تمامی سیستم های مدیریت بانک های اطلاعاتی رابطه ای به منظور ارائه قابلیت های خود و استفاده از آنها از زبان مشترکی که به آن SQL ( برگرفته شده از Structured Query Language ) گفته می شود ، استفاده می نمایند . تمامی نیازها و انتظارات کاربران از بانک های اطلاعاتی نظیر جستجوی اطلاعات ، ایجاد ، تغییر و یا حذف اطلاعات حتی ایجاد بانک اطلاعاتی و یا سایر اجزاء مرتبط با آن توسط زبان فوق تعریف و تحویل RDBMS داده خواهد شد تا پس از بررسی بر روی بانک اعمال گردد.

نرمال سازی بانک های اطلاعات

نرمال سازی ( Normalization ) یا به تعبیری هنجار سازی فرآیندی است در رابطه با بانک های اطلاعاتی که با دو هدف عمده زیر انجام می شود :

*

کاهش افزونگی اطلاعات ، به این معنی که اطلاعات فقط در یک مکان (جدول) ذخیره و در تمام بانک با استفاده از روابط منطقی تعریف شده (RelationShip) قابل دسترسی باشد .
*

حفظ یکپارچگی اطلاعات ، به این معنی که اعمال تغییرات بر روی اطلاعات ( نظیر ایجاد ، بهنگام سازی و حذف ) در یک مکان انجام و به دنبال آن آثار تغییرات در تمام بانک مشاهده گردد . برای روشن شدن مفهوم یکپارچگی بد نیست به مثال ذیل توجه نمائید :
فرض کنید در یک بانک اطلاعاتی دارای دو موجودیت کتاب و نویسنده باشیم . هر یک از موجودیت های فوق دارای المان های اطلاعاتی (Attribute) مختص به خود می باشند . به عنوان نمونه موجودیت "کتاب" دارای المان اطلاعاتی نام نویسنده و موجودیت "نویسنده " دارای المان های اطلاعاتی متعددی نظیر نام نویسنده ، آدرس نویسنده و ... باشد . در صورتی که در موجودیت "کتاب" یک رخداد (رکورد) ایجاد نمائیم بدون اینکه نام نویسنده آن را در موجودیت "نویسنده" ایجاد کرده باشیم ، دچار یک ناهمگونی اطلاعات خواهیم شد .

با توجه به اهداف فوق می توان گفت که فرآیند نرمال سازی از ناهنجاری های بوجود آمده به دلیل بروز تغییرات در بانک جلوگیری خواهد نمود . با اعمال فرآیند نرمال سازی ، یک بانک اطلاعاتی کارآ و مطمئن را خواهیم داشت .
فرآیند نرمال سازی ، فرم های متفاوتی دارد که انواع متداول آن به شرح ذیل است :

*

فرم اول نرمال سازی 1NF
*

فرم دوم نرمال سازی 2NF
*

فرم سوم نرمال سازی 3NF
*

فرم بویس کد نرمال سازی BCNF
*

فرم چهارم نرمال سازی 4NF

فرم اول نرمال 1NF
موجودیت و یا جدولی در فرم اول نرمال است که تمامی المان های اطلاعاتی آن ( منظور Attribute است ) یکتا و یا اصطلاحا" atomic باشند . برای روشن شدن این موضوع فرض کنید دارای موجودیتی با نام "فاکتور فروش " باشیم .

فاکتور فروش

شماره فاکتور(کلید اصلی)
تاریخ فاکتور
کد مشتری
نام مشتری
کالای 1
تعداد کالای 1
قیمت واحد کالای 1
.
.
.
کالای n
تعداد کالای n
قیمت واحد کالای n

با مشاهده موجودیت فوق متوجه این موضوع خواهیم شد که المان های کالا ، تعداد کالا و قیمت واحد کالا بیش از یک مرتبه در موجودیت وجود داشته و اصطلاحا" یک گروه تکرار را تشکیل می دهند . برای اجرای مدل فیزیکی این موجودیت ناچار خواهیم بود در طراحی جدول آرایه ای به طول ثابت ( به عنوان نمونه با ده عضو ) تعریف و در آن به ترتیب کالای 1 تا 10 را تعریف نمائیم .

مشکل : طراحی فوق ما را با دو مشکل عمده روبرو خواهد ساخت : اول این که کارائی بانک اطلاعاتی پائین خواهد آمد (اگر در آینده تعداد کالاهای فاکتور فروش بیش از 10 کالا باشد ، آنگاه مجبور خواهیم بود طراحی جدول مربوطه و متعاقب آن نرم افزارهائی که از آن استفاده می کنند را تغییر دهیم ) و مشکل دوم این که بسیاری از فاکتورها لزوما" دارای 10 کالا نیستند و بنابراین محتوی بسیاری از فیلدها در جدول فوق خالی (دارای ارزش Null) خواهد ماند و حجم زیادی از فضای دیسک هدر خواهد رفت .

راه حل : برای حل این مشکل کافی است تمامی گروه های تکرار و یا آرایه ها را از موجودیت خارج کرده و به موجودیت دیگری منتقل نمائیم . در چنین مواردی ، کلید اصلی موجودیت اول را به عنوان بخشی از کلید اصلی موجودیت جدید قرار داده و با تلفیق یکی دیگر از آیتم های اطلاعاتی موجودیت جدید که تضمین کننده یکتا بودن رکوردهای آن موجودیت ( جدول ) است ، کلید اصلی موجودیت ایجاد می گردد . بدین ترتیب ، یک ارتباط بین موجودیت پدر و فرزند بر اساس کلید اصلی موجودیت پدر برقرار خواهد شد .
مجددا" به موجودیت "فاکتور فروش " مثال قبل پس از تبدیل به فرم اول نرمال توجه نمائید :

ردیف های فاکتور فروش




ارتباط بین موجودیت پدر و فرزند بر اساس کلید اصلی موجودیت پدر
(فاکتور فروش)


فاکتور فروش

شماره فاکتور(قسمت اول کلید اصلی)
کالا (قسمت دوم کلید اصلی)
تعداد
قیمت واحد



شماره فاکتور(کلید اصلی)
تاریخ فاکتور
کد مشتری
نام مشتری

به طور خلاصه می توان گفت که هدف از فرم اول نرم سازی حذف گروه های تکرار و آرایه ها از موجودیت یا جدول است . فرآیند فوق ، می بایست بر روی تمامی موجودیت های بانک اطلاعاتی اعمال گردد تا بتوان گفت بانک اطلاعاتی نرمال شده در فرم اول است .

فرم دوم نرمال 2NF
موجودیتی در فرم دوم نرمال است که اولا" در فرم اول نرمال باشد و ثانیا" تمامی آیتم های (Attribute) غیر کلیدی آن وابستگی تابعی به تمام کلید اصلی‌ موجودیت داشته باشند نه به بخشی از آن .همانگونه که از تعریف فوق استنباط می گردد ، فرم دوم نرمال سازی در خصوص موجودیت هائی بررسی و اعمال می شود که دارای کلید اصلی مرکب هستند ( بیش از یک جزء ) . بنابراین در مثال فوق موجودیت "فاکتور فروش " به خودی خود در فرم دوم نرمال است ولی موجودیت "ردیف های فاکتور فروش " که دارای کلید اصلی مرکب است ، نیاز به بررسی دارد .

مشکل : در صورتی که موجودیت در فرم دوم نرمال نباشد ، آنگاه با تغییر اطلاعات قسمت های غیروابسته به تمام کلید ، این تغییرات در یک رکورد اعمال می شود ولی تاثیری بر روی سایر رکوردها و یا جداول نخواهد داشت . در مثال فوق با تغییر محتوی قیمت واحد در موجودیت "فاکتور فروش " ، قیمت واحد کالا در یک فاکتور فروش اصلاح می گردد اما در سایر فاکتورها اعمال نخواهد شد .

راه حل : برای حل این مشکل کافی است موجودیت جدیدی ایجاد نمائیم و کلید اصلی آن را برابر با آن بخش از کلید اصلی موجودیت مورد بررسی که دارای المان های وابسته به آن است قرار دهیم ، سپس تمام المان های اطلاعاتی وابسته تابعی به این کلید را از موجودیت مورد بررسی خارج کرده و به موجودیت جدید منتقل نمائیم . در این حالت بین موجودیت جدید ایجاد شده و موجودیت نرمال شده ، بر اساس کلید اصلی موجودیت جدید ایجاد شده یک ارتباط پدر فرزندی تعریف خواهد شد . دقت کنید که بر عکس نرمال سازی فرم اول ، در این جا موجودیت موردبررسی فرزند بوده و موجودیت جدید پدر خواهد بود .
به مثال فوق برمی گردیم و فرم دوم نرمال سازی را بر روی آن اعمال می نمائیم . موجودیت "فاکتور فروش" دارای کلید مرکب نیست پس در فرم دوم نرمال بوده و نیاز به بررسی ندارد ، اما موجودیت "ردیف های فاکتور فروش" نیاز به بررسی دارد . در این موجودیت آیتم اطلاعاتی "قیمت واحد" وابستگی تابعی به آیتم کالا دارد که بخشی از کلید است نه کل کلید ، پس لازم است تا این موجودیت را تبدیل به فرم دوم نرمال نمائیم . بدین منظور موجودیتی به نام "کالا" ایجاد کرده ، کلید اصلی آن را برابر کالا قرار داده و آیتم قیمت واحد را از موجودیت ردیف های فاکتور فروش خارج نموده و به این موجودیت منتقل می نمائیم. مثال فوق پس از تبدیل به فرم دوم نرمال به شکل ذیل خواهد بود :

ردیف های فاکتور فروش




ارتباط بین موجودیت پدر و فرزند بر اساس کلید اصلی موجودیت پدر (فاکتور فروش)


فاکتور فروش

شماره فاکتور(قسمت اول کلید اصلی)
کالا (قسمت دوم کلید اصلی)
تعداد



شماره فاکتور(کلید اصلی)
تاریخ فاکتور
کد مشتری
نام مشتری

ارتباط بین موجودیت پدر و فرزند بر اساس کلید اصلی موجودیت پدر (کالا)


کالا

کالا (کلید اصلی)
قیمت واحد

فرم سوم نرمال 3NF
موجودیت و یا جدولی در فرم سوم نرمال است که اولا" در فرم دوم نرمال بوده و ثانیا" تمام آیتم های غیر کلید آن وابستگی تابعی به کلید اصلی داشته باشند ، نه به یک آیتم غیر کلید .

مشکل : در صورتی که موجودیتی در فرم سوم نرمال نباشد ، آنگاه با تغییر آیتم یا آیتم های اطلاعاتی غیر وابسته به کلید اصلی در یک رکورد، تغییرات در سایر رکوردها اعمال نخواهد شد و دچار دوگانگی اطلاعات خواهیم شد (مثلا" یک مشتری با دو نام متفاوت) .

راه حل : کافی است آیتم های غیر کلیدی به هم وابسته را به موجودیت جدیدی منتقل و کلید اصلی موجودیت جدید را تعیین نمائیم ، آنگاه کلید اصلی موجودیت جدید را در موجودیت نرمال شده به عنوان یک کلید خارجی (Foreign Key) در نظر گرفت . در موجودیت "فاکتور فروش" مثال فوق آیتم نام مشتری وابستگی تابعی به آیتم کد مشتری دارد که خود یک آیتم غیر کلید است بنابر این باید نرمال سازی فرم سوم در خصوص آن اعمال شود . شکل ذیل نحوه انجام این کار را نشان می دهد :

ردیف های فاکتور فروش




ارتباط بین موجودیت پدر و فرزند بر اساس کلید اصلی موجودیت پدر (فاکتور فروش)


فاکتور فروش

شماره فاکتور(قسمت اول کلید اصلی)
کالا (قسمت دوم کلید اصلی)
تعداد



شماره فاکتور(کلید اصلی)
تاریخ فاکتور
کد مشتری (کلید خارجی)



ارتباط بین موجودیت پدر و فرزند بر اساس کلید اصلی موجودیت پدر (کالا)




ارتباط بین موجودیت پدر
( مشتری ) و فرزند بر اساس کلید خارجی



کالا


مشتری

کالا (کلید اصلی)
قیمت واحد


کدمشتری (کلید اصلی)
نام مشتری

فرم بویس کد نرمال BCNF
فرم بویس کد دارای مفهوم جامع تری نسبت به فرم دوم و سوم نرمال است . در فرم دوم و سوم نرمال بحث بر سر وابستگی تابعی آیتم های غیر کلیدی به کلید اصلی است . اما در فرم بویس کد ، موجودیتی در فرم بویس کد نرمال است که اولا" در فرم اول نرمال بوده و ثانیا" تمام المان های غیر کلیدی آن کاملا" وابسته تابعی به یک کلید باشند و نه چیز دیگر . نکته حائز اهمیت در این فرم این است که بحث بر سر وابستگی تابعی با یک کلید است نه فقط کلید اصلی. مفهوم فوق در خصوص موجودیت هائی که دارای چندین کلید هستند (Alternate Key) مطرح می شود .

فرم چهارم نرمال 4NF
این فرم در خصوص موجودیت هائی است که ارتباط بین المان های آن یک ارتباط چند ارزشه و یا چند به چند باشد . به عنوان مثال ، موجودیت کلاس درس می تواند شامل چندین دانش آموز و چندین معلم باشد. در چنین مواردی ارتباط بین معلم و دانش آموز یک ارتباط چند به چند می باشد . در این حالت با ایجاد یک موجودیت رابط مابین موجودیت های مذکور، مشکل ارتباط چند به چند حل خواهد شد (بسیاری از سیستم های مدیریت بانک های رابطه ای نظیر MSSQL از رابطه چند به چند پشتیبانی نمی نمایند ، یعنی نمی توان بین دو جدول یک رابطه چند به چند ایجاد نمود). معمولا" تمام المان های موجودیت رابط ایجاد شده بخشی از کلید اصلی است .

خلاصه
نرمال سازی فرم های دیگری نیز دارد که به دلیل نادر بودن و خاص بودن آنها در این مقاله به آنها اشاره نشده است . آنچه در خصوص نرمال سازی عمومیت دارد تا فرم سوم آن است ، یعنی در هنگام طراحی بانک های اطلاعاتی حتما" می بایست فرآیند نرمال سازی تا فرم سوم را انجام داد .
فرآیند نرمال سازی یک فرآیند تکراری (Recursive) است یعنی پس از هر مرحله نرمال سازی که منجر به ایجاد موجودیت های جدید می گردد ، فرآیند را باید از ابتدا تا انتها بر روی موجودیت های تازه ایجاد شده نیز اجرا نمود.

طراحی بانک های اطلاعاتی : مبانی مدل سازی

طراحی بانک های اطلاعاتی : مبانی مدل سازی
طراحی پایگاه داده و ایجاد نمودار ارتباط موجودیت ها (ERD) یکی از مهمترین بخش های چرخه حیات توسعه یک نرم افزار است که در برخی موارد از آن به عنوان مهمترین بخش نیز نام برده می شود . مدل صحیح و به هنگام (Up To Date) اطلاعات می تواند به عنوان مهمترین ابزار مرجع برای مدیران بانک اطلاعاتی (DBAs) ، پیاده کنندگان نرم افزار و سایر اعضاء تیم توسعه دهنده نرم افزار باشد . فرآیند ایجاد مدل داده به تیم توسعه دهنده کمک می کند تا به پرسش های مطرح شده توسط کاربران نهائی سیستم پاسخ دهند .همچنین طراحی کارا و موثر پایگاه داده به تیم توسعه دهنده این امکان را می دهد تا سیستم را از همان ابتدا در فرم مناسب پیاده سازی نمایند . ساخت سیستم با کیفیت فوق الذکر این امکان را به تیم توسعه دهنده خواهد داد تا زمان کلی انجام پروژه را کاهش دهند ، که در واقع این امر موجب کاهش هزینه های توسعه پروژه نیز خواهد شد .
با توجه به موارد فوق ، شعار طراحی خوب و جامع پایگاه داده این است که :

اول اندازه بگیر و بعد قیچی کن

طراحان خوب و خبره بانک های اطلاعاتی ، مبانی و اصول نرمال سازی پایگاه داده را همواره در خلال طراحی به خاطر داشته و آن را به کار خواهند گرفت . نرمال سازی فرآیندی در خلال طراحی پایگاه داده است که با چهار هدف عمده ذیل دنبال می شود :

* به حداقل رسانی افزونگی اطلاعات
* به حداقل رسانی تغییر ساختار اطلاعات
* به حداقل رسانی I/O سرور به منظور کاهش تعداد تراکنش ها (Transactions)
* و در نهایت حفظ یکپارچگی اطلاعات

برای طراحی بانک اطلاعاتی نرم افزار و مدل سازی آن می بایست اصول و تکنیک های ذیل را مد نظر داشت و از آنها استفاده نمود .

موجودیت (Entity) ، مجموعه ای از چیزهائی است که مربوط به بانک اطلاعاتی سیستم مورد نظر می باشد و یا به تعبیر دیگر هر آنچه که می خواهید در سیستم راجع به آن اطلاعات جمع آوری و نگهداری نمائید را شامل می شود . در مدل فیزیکی ، موجودیت تبدیل به جدول (Table) می شود .

خصلت (Attribute) یکی از مشخصه های توصیفی و یا مقداری موجودیت می باشد . در مدل فیزیکی یک خصلت به یک ستون (Column) و یا فیلد (Field) تبدیل می شود .

کلید اصلی (Primary Key) خصلت و یا ترکیبی از خصلت ها در یک موجودیت است که تضمین کننده یکتا بودن هر رخداد از موجودیت می باشد . خصلت یا خصلت های کلید اصلی نمی توانند فاقد ارزش باشند (NULL) و معمولا" کمتر تغییر می کنند . معمولا" سعی می شود جهت انتخاب کلید اصلی از خصلت هائی استفاده شود که کارائی بیشتری داشته و بهترین معرف موجودیت باشند (کارائی یک فیلد از نوع Integer به مراتب بیشتر از فیلدی از نوع Char است ) . در صورتیکه نتوان در یک موجودیت خصلت یا خصلت هائی برای کلید اصلی شدن یافت ، آنگاه کلیدهای دستی برای این کار را ایجاد می کنیم که به آنها کلید Artificial می گویند .

ارتباط ( Relationship) ، ارتباط منطقی بین دو موجودیت است . یک ارتباط در واقع نشان دهنده قوانین کاری حاکم بر پروژه و اطلاعات آن است که معمولا" به صورت جملات فعلی توصیف می گردد . مثل ارتباط بین موجودیت کارمند و دپارتمان که به صورت جمله ذیل بیان می شود :
"کارمند شاغل است در دپارتمان" در این مثال ارتباط بین موجودیت کارمند و دپارتمان با جمله "شاغل است" توصیف میگردد .
دو نوع ارتباط می تواند بین موجودیت ها وجود داشته باشد :

*

ارتباط یک به چند (One To Many) در این نوع ارتباط ، هر رخداد از موجودیت والد با چندین رخداد در موجودیت فرزند ارتباط دارد . به عنوان مثال چندین کارمند می توانند در یک دپارتمان شاغل به کار باشند .
*

ارتباط چند به چند (Many To Many) . در این نوع ارتباط ، چند رخداد از یک موجودیت با چند رخداد از موجودیت دیگر ارتباط دارند . به عنوان مثال اگر یک کارمند بتواند در چند دپارتمان شاغل به کار باشد ، آنگاه ارتباط بین موجودیت کارمند و دپارتمان یک ارتباط چند به چند است . ارتباط چند به چند در طراحی پایگاه داده پذیرفته شده نیست چراکه علاوه بر افزونگی اطلاعات موجب عدم یکپارچگی اطلاعات نیز می گردد ، از اینرو باید این ارتباط طبق فرم چهارم نرمال سازی تبدیل به دو ارتباط یک به چند شود . همانطور که د برای حل این مشکل کافی است یک موجودیت واسط که به آن موجودیت XREF می گویند ایجاد و خصلت های کلید اصلی هردو موجودیت را به این موجودیت رابط منتقل نمود . با این عمل هریک از موجودیت های اصلی به عنوان والد این موجودیت رابط تلقی شده و یک ارتباط یک به چند بین آنها برقرار خواهد شد. در نتیجه یک ارتباط چند به چند تبدیل به دو ارتباط یک به چند خواهد شد . لازم به ذکر است که بسیاری از سیستم های مدیریت بانک های اطلاعاتی رابطه ای ( نظیر MS SQL Server) از ارتباط چند به چند پشتیبانی نمی کنند .

کلید خارجی (Foreign Key) . هرگاه خصلت(های) کلید اصلی موجودیت والد در موجودیت فرزند وجود داشته باشد (بر اساس ارتباط تعریف شده بین دو موجودیت) آنگاه این خصلت ها در موجودیت فرزند ، کلید خارجی نامیده می شوند . در واقع نمی توان هیچ رخدادی در موجودیت فرزند (که دارای کلید خارجی است) ایجاد نمود که رخداد مربوط به آن (بر اساس محتوای خصلت کلید خارجی) قبلا" در موجودیت والد ایجاد نشده باشد . آنگونه که از توصیف فوق استنباط می شود کلید خارجی تضمین کننده یکپارچگی اطلاعات در داخل پایگاه داده است چرا که باعث می شود که هیچ فرزند بدون والدی در بانک اطلاعاتی نداشته باشیم .

ارتباط (RelationShip) بین دو موجودیت به دو مدل ذیل دسته بندی می گردد :

*

ارتباط تعریف شده (identifying Relationship) . اگر کلید اصلی جدول والد بخشی (یا تمام) از کلید اصلی جدول فرزند باشد و یا به تعبیر دیگر بخشی از کلید اصلی موجودیت فرزند کلید خارجی نیز باشد ، در این حالت ارتباط مابین این دو موجودیت از نوع تعریف شده است .
*

ارتباط تعریف نشده (Non-Identifying Relationship) ، برخلاف مورد فوق اگر کلید اصلی جدول والد در جدول فرزند وجود داشته باشد اما نه به عنوان بخشی از کلید اصلی آن و صرفا" به عنوان یک خصلت غیر کلید ، در این حالت ارتباط بین این دو موجودیت از نوع تعریف نشده می باشد . ارتباط تعریف نشده خود دارای دو حالت متفاوت به شرح ذیل است :
mandatory non-identifying relationship ، زمانی است که خصلت کلید خارجی در موجودیت فرزند نتواند فاقد ارزش باشد (Not Allow NULL)
non-mandatory non-identifying relationship ، زمانی است که خصلت کلید خارجی در موجودیت فرزند بتواند فاقد ارزش باشد (Allow NULL)

Cardinality ، به ما در فهم بیشتر ماهیت ارتباط مابین موجودیت والد و فرزند کمک می کند . جهت تشخیص Cardinality یک ارتباط کافی است به سئوال ذیل پاسخ داده شود :
" چه تعداد رخداد از موجودیت فرزند مرتبط است با هر رخداد از موجودیت والد؟ "
چهار نوع Cardinality مختلف به شرح ذیل وجود دارد :

*

One To Zero or Many به این معنی که هر رخداد از موجودیت والد با هیچ و یا چند رخداد از موجودیت فرزند مرتبط است . به این نوع Common Cardinality می گویند.
*

One To One Or Many به این معنی که هر رخداد از موجودیت والد با حداقل یک و یا چند رخداد از موجودیت فرزند مرتبط است . به این نوع P Cardinality می گویند .
*

One To Zero Or One ، به این معنی که هر رخداد از موجودیت والد با هیچ و یا تنها یک رخداد از موجودیت فرزند مرتبط است . به این نوع Z Cardinality می گویند .
*

One to Exactly N ، به این معنی که هر رخداد از موجودیت والد باید با N رخداد از موجودیت فرزند مرتبط باشد . به این نوع N Cardinality می گویند .

خلاصه

*

طراحی خوب بانک اطلاعاتی می تواند به تیم توسعه دهنده نرم افزار در کاهش زمان انجام پروژه و هزینه های آن کمک کند .
*

طراحی بانک اطلاعاتی و مدل سازی آن به تیم توسعه دهنده نرم افزار کمک خواهد کرد تا درک بهتر و عمیقتری نسبت به نیازمندیهای کاربران نرم افزار پیدا کرده و در نتیجه نرم افزاری را توسعه دهند که در برگیرنده قوانین کاری و خواسته آنها باشد .
*

یکی از اهداف اصلی طراحی بانک اطلاعاتی و مدل سازی آن ، مستقل بودن آن از پلت فرم است ، بنابر این اختیار انتخاب محیط و پلت فرم پیاده سازی فیزیکی پایگاه داده با تیم توسعه دهنده بوده و در ماحصل کار هیچ تغییری ایجاد نخواهد کرد .

XSLT چیست ؟ ( بخش اول )

XSLT، از کلمات eXtensible Stylesheet Language :Transformation اقتباس و زبانی برای تبدیل یک سند XML به نوع دیگر است . تکنولوژی فوق توسط کنسرسیوم وب با هدف اولیه تبدیل یک سند XML به نوع دیگر، طراحی شده است . XSLT ، دارای قابلیت های بمراتب بیشتری بمنظور تبدیل یک سند XML به HTML و سایر فرمت های مبتنی بر متن است . بدین ترتیب می توان تعریف کامل تری در رابطه با تکنولوژی فوق را بصورت زیر ارائه داد :

تعریف XSLT

XSLT ، زبانی بمنظور تبدیل ساختار یک سند XML است .

جرا سندهای XML نیازمند تبدیل می باشند ؟
XML ، روشی ساده و استاندارد بمنظور مبادله داده های ساختیافته بین برنامه های متفاوت کامپیوتر است . بخشی از موفقیت XML جهت نیل به خواسته فوق ، به نحوه نوشتن و خواندن این نوع فایل ها بر می گردد . با استفاده از یک ادیتور متنی می توان بسادگی و بسرعت اقدام به نوشتن یک سند XML ،خواندن و اعمال تغییرات در آنان نمود. فراموش نکنیم که مهمترین هدف XML ، ارتباط بین سیتستم های متفاوت نرم افزاری بوده و در این راستا به دو نیاز حیاتی بخوبی جواب داده است :
تفکیک داده از نمایش ( ارائه ) . نیاز به تفکیک اطلاعات از جزئیات نمایش بر روی یک دستگاه خاص همواره مورد نظر طراحان و پیاده کنندگان بوده است . خواسته فوق ، بموازات رشد دستگاههای مبتنی بر اینترنت به یک ضرورت حیاتی تبدیل شده است . سازمان ها و موسسات ارائه دهنده اطلاعات باارزش ، تمایل به عرضه اطلاعات خود بر روی مرورگرهای وب و سایر دستگاهها نظیر تلویزیون و یا تلفن های مبتنی بر WAP را دارند . بدین ترتیب دامنه استفاده از اطلاعات صرفا" به مرورگرهای وب محدوده نبوده و دستگاههای متفاوت مبتنی بر تکنولوژی اینترنت را شامل می گردد .
ارسال داده بین برنامه ها . ارسال اطلاعات از سازمانی به سازمان دیگر بدون در گیر شدن در جزئیات ، همواره از آرزوهای بزرگ طراحان و پیاده کنندگان سیستم های نرم افزاری بوده است .

دو خواسته فوق هیچگونه تعارضی با یکدیگر ندارند ، مثلا" یک لیست قیمت کالا را می توان بر روی صفحه ، نمایش و در همان زمان از آن بعنوان ورودی در سایر برنامه ها استفاده کرد . یکی دیگر از مزایای اساسی XML ، یکپارچگی بین دنیای سندها و داده ها است . بدین ترتیب می توان از یک روش خاص بمنظور عرضه ساختار داده ها ( صرفنظر از اینکه اطلاعات توسط انسان و یا ماشین استفاده می گردد) ، بهره گرفت . صرفنظر از اینکه داده های XML سرانجام توسط انسان و یا یک برنامه نرم افزاری دیگر استفاده می گردند ، به این نکته مهم می بایست اشاره گردد که بندرت داده ها به همان صورت که دریافت می گردند، استفاده خواهند شد. در این راستا لازم است که داده ها در ابتدا به یک فرمت دیگر تبدیل گردند . تبدیل XML به Html ، متداولترین کاربرد استفاده از XSLT است . پس از تبدیل داده ها به فرمت Html ، امکان نمایش آنها در هر مرورگری فراهم خواهد شد . بنابراین جایگاه "تبدیل " در رابطه با ارائه و نمایش داده ها ، به تغییر فرمت سندهای XML به سایر فرمت های متداول نظیر Html برمی گردد .XSLT در این رابطه بخوبی پاسخگو بوده و با استفاده از قوانین موجود قادر به تبدیل نوع یک سند به نوع دیگر با توجه به نیازهای مربوطه خواهد بود .

بمنظور ارسال اطلاعات بین برنامه های متفاوت، می بایست قادر به تبدیل داده ها از مدل استفاده شده توسط یک برنامه به مدل استفاده شده توسط برنامه دیگر باشیم . بمنظور تامین اطلاعات مورد نیاز یک برنامه ،از فرمت های متفاوت استفاده می گردد . یک فایل حاوی داده های جداشده توسط ویرگول ، یک اسکریپت SQL ، یک پیام HTTP و یا مجموعه ای از توابع مربوط به یک اینترفیس خاص برنامه نویسی ، نمونه هائی در این زمینه می باشند . بموازات رشد تجارت الکترونیکی مبتنی بر XML ، نقش XSLT در تبدیل داده ها بین برنامه ها ی متفاوت ، بسیار حائز اهمیت شده است .در این راستا استانداردهای متعددی وجود دارد . مثلا" در صنعت روزنامه نگاری از یک فرمت خاص برای مبادله اطلاعات، نسبت به صنعت تلویزیون استفاده می گردد .در برخی حالات دیگر ممکن است ، تمایل به استخراج یک آدرس خاص از یک لیست ثبت سفارش و الحاق آن به لیست صورتحساب را داشته باشیم . بهرحال ، استخراج و ترکیب داده ها از یک مجموعه اسناد XML و ایجاد اطلاعات مورد نیاز برای سایر اسناد XML ، یک ضرورت بوده و XSLT در این راستا ابزاری مناسب است .

XSLT چگونه یک سند XML را تبدیل می نماید ؟
برای تبدیل یک سند XML و ایجاد خروجی مورد نظر، دو مرحله متفاوت را می بایست دنبال نمود :

*

اولین مرحله ، شامل یک تبدیل ساختاری است . در این حالت داده ها از ساختار استفاده شده در یک سند XML ، به ساختاری دیگر که تامین کننده خروجی مورد نیاز است ، تبدیل خواهند شد .
*

دومین مرحله، ایجاد فرمت مورد نیاز است . ساختار جدید به فرمت مورد نظر نظیر Html و یا PDF تبدیل و در خروجی نمایش داده خواهد شد .

در رابطه با دومین مرحله ، در بخش قبل موارد لازم بیان گردید : ساختمان داده ئی که از اولین مرحله بدست می آید، می تواند بعنوان یک HTML ، یک فایل متن و یا یک سند XML دیگر در خروجی ارائه گردد . خروجی Html ، امکان نمایش مستقیم اطلاعات در یک مرورگر و یا تغذیه به یک برنامه پیشرفته واژه پرداز را دارا است . خروجی مبتنی بر متن ، امکان فرمت دهی داده ها را با یک روش قابل قبول بمنظور استفاده توسط سایر برنامه ها فراهم می نماید . با تبدیل یک سند XML به نوع دیگر که خود نیز از نوع XML خواهد بود ، امکان استفاده مستقیم آن برای سایر برنامه هائی که قادر به دریافت داده های خود بصورت XML می باشند ، فراهم می گردد . مثلا" یک تبدیل کننده XSLT ، ممکن است میزان فروش ماهیانه را بعنوان یک سند XML اخذ و یک منحنی هیستوگرام را بصورت XML در خروجی ایجاد نماید .

در مرحله اول ( تبدیل ) ، عملیات لازم در خصوص ایجاد خروجی با فرمت مناسب انجام خواهد شد . در مرحله فوق عملیاتی نظیر : انتخاب داده ، گردآوری و گروه بندی داده ها ، مرتب سازی داده ها و انجام عملیات محاسباتی ( نظیر تبدیل اینچ به سانتیمتر ) صورت می پذیرد. نحوه انجام عملیات فوق به چه صورت است ؟ قبل از عرضه XSLT ، امکان پردازش سندهای XML ، صرفا" از طریق نوشتن یک برنامه خاص میسر بود . برنامه ها با استفاده از یک رابط برنامه نویسی (API) ، پارسر را فراخوانده تا امکان اخذ اطلاعات دررابطه با سند و یا انجام عملیات مورد نظر فراهم گردد . در این راستا از دو رابط برنامه نویسی استفاده می گردد : SAX)Simple API for XML ) و DOM)Document object Model) .

رابط برنامه نویسی SAX ، یک اینترفیس مبتنی بر رویداد بوده که پارسر در رابطه با هر یک از بخش های موجود در سند ، اطلاعات لازم را در اختیار برنامه متقاضی قرارخواهد داد. در صورتیکه از رابط برنامه نویسی DOM استفاده گردد، پارسر از طریق ایجاد یک ساختار شبه درختی در حافظه ، امکان ارتباط با آن را پیدا می نماید . در ادامه ، با نوشتن یک برنامه خاص ( مثلا" با استفاده از زبانهای برنامه نویسی نظیر VB ، جاوا ) امکان ارتباط با درخت بوجود می آمد . در مدل فوق ، برای پردازش هر نوع سند XML ، لازم است که یک برنامه خاص و اختصاصی نوشته شده تا با دنبال نمودن مراحل مورد نظر، عملیات لازم در رابطه با یک سند XML صورت پذیرد.

چگونه می توان از XSLT بمنظور تبدیل یک سند XML در مقابل نوشتن برنامه های اختصاصی استفاده کرد ؟ طراحی XSLT ، مبتنی بر این واقعیت بوده است که این نوع برنامه ها بسیار مشابه هم بوده و می توان بمنظور تشریح عملکرد مربوطه ، از یک زبان تعریفی سطح بالا ( در مقابل نوشتن هر یک از برنامه ها توسط زبانهائی نظیر VB و یا جاوا) استفاده کرد . تبدیلات انجام شده ، از مجموعه ای قوانین نشات خواهد گرفت . قوانین فوق ،نحوه ایجاد خروجی را در صورت وجود یک الگوی خاص در سند ، مشخص می نمایند . زبان فوق تعریفی بوده و تبدیل مورد نیاز تشریح می گردد ( در مقابل ارائه دنباله ای از دستورالعمل های رویه ای برای عملیات تبدیل) . XSLT ، تبدیل مورد نیاز را تشریح و در ادامه با تاکید بر نقش پردازنده XSL ، مناسبترین و کارآمدترین روش برای عملیات انتخاب می گردد .

XSLT ، همچنان بر نقش پارسرها تاکید ( پارسر سازگار با DOM و یا پارسر سازگار با SAX) ، و از آن برای تبدیل یک سند XML به یک ساختار درختی استفاده می نماید . در حقیقت ، پردازش برروی یک سند XML توسط XSLT ، از طریق ساختار درختی ارائه شده از سند ، محقق می گردد . در DOM ، هر آیتم در یک سند XML ( المان ها ،خصلت ها ، دستورالعمل های پردازش ) ، بعنوان یک گره در نظر گرفته می شود . با بکارگیری XSLT ، مجهز به یک زبان برنامه نویسی سطح بالا شده که قادر به حرکت در طول درخت و گره های موجود ، انتخاب گره ها و انجام عملیات پیچیده پردازش برروی گره ها ، خواهیم بود. مدل درخت XSLT ، در برخی مفاهیم مشابه DOM بوده ولی دقیقا" مشابه آن نیست .

مقایسه XSLT و SQL
در یک بانک اطلاعاتی رابطه ای ، داده ها شامل مجموعه ای از جداول می باشند . داده ها در فایل هائی تخت با فرمت های مورد نظر ذخیره می گردند. قدرت یک بانک اطلاعاتی رابطه ای از ساختمان داده آن نبوده و به زبانی که قادر به پردازش داده ها است(SQL) ، وابسته است . در روشی مشابه، XML ، صرفا" یک ساختمان داده مناسب از اطلاعات را تعریف و با استفاده از یک زبان سطح بالا می توان عملیات دلخواه در رابطه با ساختمان داده را انجام داد (XSLT) .
SQL و XSLT دو زبان کاملا" متفاوت نسبت بیکدیگر می باشند .در حالتی خاص ، می توان این ادعا را داشت که آنان دارای شباهت هائی در برخی موارد عملیاتی هستند. مثلا" بمنظور پردازش داده های موجود در یک بانک اطلاعاتی رابطه ای و یا یک سند XML ، زبان پردازش می بایست مبتنی بر یک گرامر مشخص باشد . در SQL از عبارت SELECT و در XSLT از عبارات XPath استفاده می گردد .

زبان عبارات XPath ، یکی از بخش های اساسی XSLT بوده که توسط کنسرسیوم وب استاندارد شده است . امکان استفاده از XPath مستقل از XSLT نیز وجود دارد . گرامر XPath ، امکان بازیابی گره های خاصی را از یک سند XML فراهم می نماید . بدین منظور ممکن است از طریق مسیری در سند XML و یا از طریق فهرستی که گره ها در آن قرار خواهند گرفت ، این امر تحقق یابد . با استفاده از XPath ، امکان دستیابی به گره هائی خاص فراهم و در ادامه با استفاده از XSLT امکان اخذ نتایج مورد نظر بوجود می آید . ( اجراء پرس وجوی لازم )

XSLT و SQL دارای شباهت های دیگری نیزمی باشند . هر دو زبان ، دارای یک ویژگی مهم با نام closure می باشند. ویژگی فوق، بدین مفهوم است که خروجی ، دارای ساختمان داده مشابه ورودی است . مثلا" SQL خروجی خود را بصورت یک جدول و XSLT بصورت یک درخت ارائه خواهد داد . بدین ترتیب می توان خروجی یک عملیات را بعنوان ورودی در اختیار عملیات بعدی قرار داد. در SQL این عملیات با استفاده از تعریف view و یا Subquery و در XSLT با ارسال داده از طریق مجموعه ای stylesheet انجام می گیرد .

در دنیای واقعی وچود XSLT و SQL ضرورت داشته و ارتباطات متعدددی بین آنها وجود خواهد داشت . داده ها عموما" در بانک های اطلاعاتی رابطه ای ذخیره و با فرمت XML بین سیستم های متنوع ارسال خواهند شد. مدل های داده در هر یک از سیستم های فوق با یکدیگر متفاوت بوده و XSLT قادر به ایفای نقشی حساس در رابطه با تبدیل مدل های متفاوت داده است . تولیدکنندگان متفاوت بانک های اطلاعاتی در تلاش برای ارائه محصول خود بگونه ای هستند که امکان ارتباط XML و SQL را فراهم نماید . SQL Server 2000 امکان استفاده از پرس و جو های مبتنی بر XPath را حمایت می نماید.

پردازنده XSLT
مهمترین رسالت پردازنده XSLT ، بکارگیری یک XML stylesheet در رابطه با یک سند XML و ایجاد( تولید ) خروجی مناسب است . لازم به یادآوری است که هر یک از موارد اشاره شده ، بمنزله یک برنامه XML بوده و بدیهی است که ساختار هر یک از آنها یک درخت باشد . عملکرد پردازنده XSLT وابسته به وجود درخت های فوق است. پردازنده های متعددی در رابطه با XSLT نظیر Saxon, xt, MSXML3 وجود دارد . پردازنده های فوق را می توان بصورت رایگان تهیه نمود .

پردازنده saxon ، قادر به تبدیل سند XML به سایر مدل های دیگر است ( یک سند Html) . برای استفاده از برنامه فوق،می بایست برنامه Instan Saxon را از آدرس http://users.iclway.co.uk/mhkay/saxon/instant.html دریافت و بر روی سیستم نصب کرد . برنامه فوق به زبان جاوا نوشته شده و می توان آن را مستقیما" از طریق خط دستور اجراء نمود ( ضرورتی به داشتن مرورگرهای وب و یا سرویس دهنده وب نخواهد بود ) . مرورگرها و سرویس دهندگان وب در این حالت با سند تبدیل یافته سروکار خواهند داشت .

xt ، یکی دیگر از پردازنده های XSLT است . برنامه فوق با زبان جاوا نوشته شده و امکان اجرای آن از طریق خط دستور وجود دارد . برای دریافت پردازنده فوق می توان به آدرس http://www.jclark.com/xml/xt.html مراجعه نمود. پردازنده فوق همانند saxon ، قادر به فعالیت با پارسر های مبتنی بر SAX می باشد .

امکان اجرای XSLT stylesheet بهمراه مرورگر IE نیز وجود دارد . بدین منظور می بایست نسخه پنج مرورگر فوق و آخرین نسخه پردازنده MSXML مربوط به شرکت ماکروسافت ، بر روی سیستم نصب گردند. برای دریافت آخرین نسخه پردازنده فوق می توان به آدرس www.microsoft.com/xml مراجعه کرد .

مثال : در ادامه به بررسی مثالی خواهیم پرداخت که نحوه استفاده از XSLT بمنظور تبدیل یک سند ساده XML را نشان خواهد داد . فرض کنید ، یک سند ساده XML مطابق زیر را داشته باشیم :

یک سند ساده XML


Hello, world!

خروجی مورد نظر سند XML یک فایل Html بصورت زیر خواهد بود .

خروجی Html



Today's greeting


Hello, world!





XSLT زیر بمنظور تبدیل سند XML و ایجاد خروجی Html استفاده می گردد .

XSLT بمنظور تبدیل سند XML و ایجاد خروجی Html






Today's greeting








اجرای StyleSheet
برای اجرای stylesheet با استفاده از سه پردازنده اشاره شده در بخش قبل ، مراحل زیر را می بایست دنبال کرد.

استفاده از پردازنده saxon .بمنظور اجرای Stylesheet فوق با استفاده از پردازنده saxon ، عملیات زیر را می بایست انجام داد :

*

دریافت برنامه پردازنده ( آدرس مربوطه در بخش قبل اشاره گردید )
*

نصب برنامه saxon.exe در یک فولدر مناسب
*

با استفاده از برنامه notepad دو فایل اشاره شده را در فایل هائی با نام hello.xml و hello.xsl ذخیره نمائید.
*

خط دستور DOS را فعال نمائید .(start|programs|MSDOS prompt)
*

دستور saxon hello.xml hello.xsl را در خط دستور تایپ نمائید .
*

خروجی html بر روی صفحه نمایش داده خواهد شد .

در صورتیکه قصد مشاهده خروجی را در مرورگر داشته باشید ، خروجی خط دستور را در یک فایل Html بصورت زیر ذخیره نمائید .

Saxon hello.xml hello.xsl > hello.html

استفاده از پردازنده xt . برای اجرای پردازنده xt ، از روشی مشابه saxon استفاده شده با این تفاوت که در عوض استفاده از برنامه saxon از برنامه xt استفاده می گردد .

استفاده از پردازنده MSXML . بمنظور اجرای stylesheet بهمراه مرورگر IE ، می بایست تغییرات اندکی در سند XML بمنظور مراجعه به stylesheet ایجاد گردد :



Hello, world!

در ادامه می توان فایل hello.xml را در مرورگر IE ، فعال و مشاهده نمود . مرورگر فوق ، سند XML را خوانده و از وجود یک stylesheet آگاه می گردد . در ادامه stylesheet مربوطه فعال و بمنظور تبدیل سند XML و ایجاد خروجی Html ، آن را اجراء می نماید . در صورتیکه بر روی صفحه نمایشگر عبارت hello,world نمایش داده نشود و صرفا" سند XML مشاهده گردد، علت عدم استفاده از آخرین نسخه MSXML بهمراه مرورگر بوده و می بایست آخرین نسخه را از آدرس اشاره شده دریافت و بر روی سیستم نصب نمود .

تشریح نحوه عملکرد XSLT در رابطه با مثال فوق
اولین خط فایل stylesheet ، شامل دستور زیر است :



دستور فوق، اعلام می نماید که یک XSLT stylesheet ، خود بعنوان یک سند XML است . برای encoding کاراکترها ،می توان از استانداردهای متعدد موجود منجمله utf-8 استفاده کرد .
در ادامه با خط زیر مواجه می گردیم :



خط فوق، عنوان استاندارد XSLT است . یک المان شروع که نوع سند را بعنوان یک stylesheet معرفی می نماید . خصلت xmlns:xsl تعریف یک namespace بوده که مشخص می نماید پیشوند xsl در ادامه بمنظور مراجعه به المان های تعریف شده ( استاندارد کنسرسیوم وب XSLT ) ، استفاده خواهد شد .
در ادامه با خط زیر مواجه می شویم :



المان ، یک قانون تمپلیت را تعریف که بر اساس آن نحوه برخورد با بخش های خاص سند مبداء در هنگام پردازش، تبین می گردد . خصلت "/" مشخص می نماید که قانون فوق از ابتدای سند مبداء اعمال خواهد شد . در حقیقت، عبارت فوق یک عبارت مبتنی بر XPath بوده و المان ریشه سند XML را مشخص می نماید . یک سند XML دارای یک ساختار سلسله مراتبی بوده و همانند یونیکس که از "/" برای مشخص نمودن ریشه استفاده می نماید، XPath نیز از "/" برای مشخص نمودن المان ریشه در یک سند XML استفاده می نماید . در مدل DOM به عنصر فوق " Document object" و در XPath به آن ریشه گفته می شود .
در ادامه با خطوط زیر مواجه می شویم :



Today's greeting






بدنه تمپلیت،نحوه ایجاد خروجی را مشخص می نماید . اکثر بدنه تمپلیت در مثال فوق ، مجموعه ای از المان های Html و متن مورد نظر را که می بایست در فایل خروجی منعکس گردند ، شامل می گردد . در دستورات فوق یک المان خاص با نام وجود داشته که یک دستورالعمل XSLT است( چون از namespace مربوطه با نام xsl استفاده می نماید ) . دستورالعمل فوق ، مقدار یک گره موجود در سند مبداء را در سند خروجی تکثیر می نماید . خصلت SELECT مربوط به المان ، گره ای را که مقدار آن می بایست انتخاب شود را مشخص می نماید . ( تمام المان های که فرزند گره مربوطه می باشند ،انتخاب می گردند ) .
در ادامه با دستور زیر مواجه می گردیم :



برای یک تمپلیت ساده نظیر آنچه در مثال فوق وجود داشت ، می توان برخی از بخش ها را حذف نمود. با توجه به اینکه صرفا" از یک تمپلیت استفاده شده است المان را می توان حذف نمود . در این حالت Stylesheet مربوطه بصورت زیر خواهد بود :

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Today's greeting




نسبت دهی داده در فرم های وب

ممنظور نمایش داده در فرم های وب ، می توان کنترل ها را به منابع داده نسبت داد. نسبت دهی داده در فرم های وب با سا یر فرم ها ، نظیر فرم های تحت ویندوز کاملا" متفا وت است . در این مقاله به بررسی فرآیند فوق در فرم های وب و نحوه مشخص نمودن آنا ن برای کنترل ها ی متفاوت خواهیم پرداخت .
ما هیت فقط خواندنی داده ها . نسبت دهی داده در فرم های وب بر این واقعیت استوار است که : دستیابی به داده ها در برنامه های تحت وب، عمدتا" بصورت فقط خواندنی است . در چنین حا لتی ، صفحات متنا وبا" اطلاعاتی را از یک منبع داده ئی ، نمایش خواهند داد.در این نوع برنامه ها به موارد کمتری برخورد می شود که نیاز به نوشتن داده ( در مقایسه با خواندن اطلاعات از یک منبع داده ) در یک بانک اطلاعاتی باشد . موارد زیر نمونه هائی در این زمینه می باشند ( اطلاعات از منابع داده ئی خوانده شده و در اختیار کاربران قرار می گیرند )

*

یک صفحه جستجو که حا وی اطلاعات مربوط به سا یر صفحات و یا محصولات است.اطلاعات نمایش داده شده در صفحه نتا یج ،اغلب بصورت لینک به سا یر صفحات بوده که در چنین حالتی نیاز به ورود اطلاعات از طرف کاربر جهت ذخیره در بانک اطلاعاتی نخواهد بود.
*

یک صفحه که شامل نتایج مسابقات ورزشی و یا گزارش آب و هوا است .
*

یک صفحه که اطلاعات مربوط به بورس و سهام را نشا ن می دهد
*

و سایر موارد مشابه

معماری نسبت دهی داده در فرم های وب ، امکان ویرایش را فراهم نمی کند ، بدین ترتیب می با یست در صورت لزوم ، منطق مورد نطر جهت انجام این کار توسط برنامه نویس نوشته گردد. منطق مربوط به ویرایش فرم های وب ، به عوامل متفا وتی بستگی خواهد داشت :

*

منبع داده چیست ؟
*

آیا داده ها توسط یک Dataset می توانند Cache شوند ؟
*

از چه نوع کنترل ها ئی استفاده می شود؟ ( مثلا" آیا کنترل چندین رکورد را در یک Grid نمایش داده و یا یک رکورد ( مقدار) را در یک TextBox نمایش می دهد؟)
*

قصد استفاده از چه نوع کنترل هائی را بصورت همزمان دارید ؟

نسبت دهی داده در فرم های وب کاملا" انعطاف پذیر بوده و در این راستا می توان هر یک از خصلت های یک کنترل را به یک منبع داده نسبت داد. در روش های قبلی نسبت دهی داده ، معمولا" به خصلت Display داده ئی نسبت داده می گردید. ( مثلا" Text Property مربوط به یک Text box ) . در فرم های وب ، منبع داده می تواند شامل تقریبا" هر نوع اطلاعات قابل دسترس برای صفحات باشد . ( بانک اطلاعاتی ، سند Xml ، یک کنترل و یا پردازش دیگر و یا حتی ما حصل محا سبات انجام شده توسط شما ) . از نسبت دهی داده در موارد زیر می توان استفاده کرد :

*

مقداردهی متن مورد نظر جهت نمایش در کنترل های Textbox,Lable,Button,LinkButton و سایر کنترل ها
*

مقداردهی صفحات مقصد ( HREF ) مربوط به یک Link Control
*

نسبت دادن یک کنترل Checkbox به یک مقدار منطقی ( Boolean) بمنظور تنظیم خودکار وضعیت بررسی شده کنترل
*

مقدار دهی یک فایل گرافیکی به کنترل Image از طریق نسبت دادن صفت ImageURL به ستون مربوطه ای که حاوی نام فایل گرافیکی در بانک اطلاعاتی است .
*

مقدار دهی رنگ ،فونت ،اندازه کنترل ها و ... در مواردیکه می خواهیم رابط کاربری پیاده سازی نمائیم که اطلاعات مربوطه بهمراه مقدار پارامترهای مورد نظر در یک بانک اطلاعاتی ذخیره شده باشند .

کنترل ها ، دو نوع اسا سی نسبت دهی داده را حمایت می نمایند:

*

کنترل های چند رکوردی ، قادر به نمایش یک و یا بیش از یک رکورد داده در هر لحظه می باشند. Repeater ,DataList , DataGrid ، نمونه هائی در این زمینه می باشند.
*

کنترل های تک مقدار ، در هر لحظه قا در به نمایش یک مقدار خواهند بود. اغلب کنترل های سرویس دهنده Html نظیر textbox,Lable,HtmlInputText,HtmlAnchor نمونه هائی از این نوع کنترل ها می باشند.

اغلب کنترل ها امکا ن نسبت دهی خصا یص وصفات به یک مقدار داده ئی را فراهم می کنند.مثلا" کنترل DataList ، قادر به نمایش چندین رکورد در هر لحظه است اما می بایست صفت Backcolor آن را صرفا" به یک داده نسبت داد. فرآیند نسبت دهی داده ، با توجه به نوع استفاده شده ( چند رکورد ، تک مقدار ) دارای عملکردی کاملا" متفاوت با یکدیگر می باشند . برای نمایش چندین رکورد می با یست یک کنترل از نوع چند رکوردی ، را به یک منبع داده که شامل چندین رکورد است نسبت داد ( نظیر بردار ،یک مجموعه ،یک جدول و ...) . برای نسبت دهی یک کنترل تک مقدار ، می بایست مشخص نمود که چه صفتی می بایست نسبت داده شده و چه مقداری را می بایست به آن اختصاص یابد .

مقایسه کنترل های چند رکوردی و تک رکوردی

برخی از کنترل های فرم های وب ، قادر به نمایش چندین رکورد اطلاعاتی در یک لحظه می باشند. کنترل هائی نظیر Repeater,DataList,DataGride,CheckBoxList,RadioButtonList نمونه هائی در این زمینه می باشند . کنترل هائی نظیر Label,Textbox,Checkbox,Hyperlink ، صرفا" در هر لحظه قادر به نمایش یک مقدار ( رکورد) خواهند بود.
برای نسبت دهی داده در رابطه با کنترل های چند رکوردی ، مطابق زیر عمل می شود.
در رابطه با این نوع کنترل ها ، مهم مشخص کردن منبع داده ئی است که می بایست به یکی از خصلت های مربوطه نسبت داده شود . منابع داده ئی می تواند یکی از موارد زیر با شد :

*

Source Data و یا container که شا مل رکوردها ی مورد نظر جهت نسبت دهی به یکی از خصلت های مربوط به کنترل است ، می بایست مشخص گردد .
*

Data Member ، نظیر نا م یک جدول
*

یک فیلد یا ستون خاص برای نمایش ، ویژگی فوق در رابطه با کنترل هائی نظیر ListBox ،HtmlSelect که چندین آیتم اطلاعا تی را نمایش خواهند داد، استفاده می گردد.

کنترل های چند رکوردی را می توان به یک DataSet نسبت داد. علاوه بر امکا ن فوق می توان کنترل هائی از این نوع را به تقریبا" هر نوع ساختما ن داده ئی که اینترفیس IEnumerable را حمایت می کنند، نیز نسبت داد:

▪ ArrayList objects
▪ Collections
▪ Data readers (objects of type OleDbDataReader and SqlDataReader)
▪ DataView objects
▪ DataRow objects
▪ DataTable objects in datasets


کنترل های تک مقدار ، صرفا" قادر به نمایش یک مقدار ( رکورد) در هر لحظه خواهند بود. مثلا" می توان صفت Text مربوط به کنترل TextBox را به یک مقدار داده ئی نسبت داد. برای نسبت دادن مقدار به کنترل هائی از این نوع ،می توان از روش های متعددی بمنظور مشخص نمودن رکورد مورد نظر استفا ده نمود:

*

یک Data View را بگونه ای ایجا د کرد که با بکارگیری فیلتر های مربوطه صرفا" یک رکورد برگردانده شده و در ادامه می توان کنترل مورد نظر را به Data view نسبت داد. عبارت مربوط به نسبت دهی داده به این نوع کنترل ها مطابق زیر است. ا یندکس صفر [0] ، مشخص می نماید که می بایست اولین رکورد موجود در Data View انتخا ب و به کنترل مربوطه نسبت داده شود.

DataBinder.Eval(DataView1, "[0].au_lname")

*

یک DataSet را بگونه ای تکمیل کرد که شامل صرفا" یک رکورد باشد. ( روش فوق یک را هکا ر منا سب جهت استفاد ه از DataSet نخواهد بود )
*

استفاده از دستورات SQL و یا Stored Procedure جهت نسبت دهی مقدار به کنترل مورد نظر

XPath چیست ؟ ( بخش اول )

، بهمراه خود مجموعه ای از سایر تکنولوژی ها را ایجاد کرده است . XSL یکی از مهمترین تکنولوژی های مرتبط با XML بوده که عموما" به سه تکنولوژی دیگر اشاره می نماید :

*

XSLT : زبانی برای تبدیل ساختار یک سند XML
*

XPath : زبانی برای آدرس دهی بخش های متفاوت یک سند XML
*

XSL-FO : زبانی بمنظور فرمت دهی یک سند XML

XPath یکی از تکنولوژی های مرتبط با XML بوده که ارتباط بسیار نزدیکی با XSLT دارد . بنابراین لازم است قبل از آشنائی با XPath ،نگاهی سریع به تکنولوژی XSLT داشته و از این رهگذر جایگاه XPath را تبین نمائیم .XSLT زبانی مبتنی بر قوانین بوده و با سایر زبان های برنامه نویسی تفاوت دارد. XSLT مبتنی بر مجموعه ای از تمپلیت ها است که هر یک بر اساس قوانین تعریف شده شکل واقعی خود را پیدا خواهند کرد .در حقیقت یک تمپلیت با اتکاء بر قوانین تعریف شده، نحوه پردازش سندهای XML را مشخص می نماید.به عبارت دیگر یک Stylesheet ، نحوه ایجاد خروجی مورد نظر در زمان مواجه شدن با یک الگو در سند XML را مشخص می نماید. در XSLT بر اساس مجموعه ای از قوانین، تمپلیت ( تمپلیت ها ) تعریف و در زمان تبدیل یک سند XML از قوانین موجود در XSLT برای یافتن یک الگو در سند XML استفاده می گردد . در صورتیکه الگوی مورد نظر در سند XML پیدا گردد ، واکنش های پیش بینی شده ، انجام و خروجی مورد نظر ایجاد می گردد. یک StyleSheet می تواند نحوه برخورد با یک المان خاص در زمان عملیات تبدیل را مشخص و تعریف نمائید. مثلا" در صورتیکه المانی با نام NAME در سند XML پیدا گردید، می توان واکنش های مورد نظر را بمنظور برخورد با واقعیت موجود مشخص کرد. گرامر تمپلیت در این حالت بصورت زیر خواهد بود :


...


مثال: استفاده از XSLT بمنظور تبدیل یک سند XML
در این مثال با استفاده از XSLT یک سند XML به Html تبدیل و در خروجی نمایش داده می شود .
سند XML نمونه ( Test.xml)





Webmaster
webmaster@Srco.ir


Webadmin
info@Srco.ir



در سند فوق از یک دستورالعمل پردازشی بمنظور مراجعه به Stylesheet بصورت زیر استفاده شده است :





خروجی Html مورد نظر
Name Email
Webmaster webmaster@Srco.ir
Webadmin info@Srco.ir


سند XSLT بمنظور تبدیل سند XML به HTML برای نمایش در مرورگر ( Test.xsl)

















Name Email






در هر فایل XSL ، می بایست XSL namespace معرفی گردد . بدین ترتیب پارسر از نسخه XSLT استفاده شده ، آگاهی لازم را پیدا خواهد کرد .




توضیحاتی در رابطه با مثال فوق :

*

قبل از انجام هر گونه پردازش در رابطه با یک سند XML ، می بایست با استفاده از یک عبارت XPath بخش مورد نظر در سند انتخاب گردد .عملیات فوق توسط یک عملگر match انجام می شود . در صورتیکه تمام سند انتخاب گردد، از "/" = match استفاده می گردد. یکی دیگر از رویکردهای موجود، استفاده از المانی است که نشاندهنده تمام سند است . در مثال فوق،المان موجود در سند که دارای چنین رسالتی است با استفاده از match = PEPOLE مشخص می گردد.



*

عبارت زیر، تمام المان های PERSON در بافتار PEPOLE را با استفاده از PEPOLE/PERSON که عبارتی از نوع XPath است، پیدا خواهد کرد. در صورتیکه گره انتخابی، شامل تمام المان ها در ریشه باشد ، تمام المان های PEOPLE انتخاب خواهند شد . با توجه به اینکه قصد نمایش تمام المان های PERSON در سند خروجی وجود دارد ، از عبارت فوق استفاده شده است . عبارت for-each یک حلقه تکرار بوده که باعث انجام پردازش های یکسان در رابطه با المان های مورد نظر( انتخابی ) خواهد شد .



*

زمانیکه یک المان PEPOLE توسط عبارت xsl:for-each انتخاب گردید، با استفاده از عبارت xsl:value-of مقدار مربوط به المان استخراج و در فایل خروجی قرار می گیرد. در مثال فوق، مقدار ذخیره شده در المان NAME در خروجی قرار خواهد گرفت .



CSS
هسته اولیه XSL از CSS شکل گرفته است . CSS بمنظور تعریف و افزودن فرمت به یک فایل Html استفاده می گردد . گرامر استفاده شده در یک Stylesheet مربوط به XSLT مشابه گرامر استفاده شده در CSS است . Stylesheet های استفاده شده در XSLT دارای عملکردی بسیار متفاوت نسبت به نمونه های خود در CSS می باشند . CSS امکان تعریف زنگ ها ، زمینه ها ، نوع و اندازه فونت ها را برای یک صفحه وب Html فراهم می نماید . XSLT امکان تبدیل یک فایل XML را به فرمتی دیگر فراهم می نماید . در صورتیکه هدف صرفا" تعریف فرمت و قالب برای یک صفحه وب باشد ، می توان همچنان از CSS استفاده کرد . استفاده از CSS با توجه به عمومیت آن، برای اکثر استفاده کنندگان گزینه ای مناسب خواهد بود .

XML Query Language
XML ، امکان تعریف تگ های اختصاصی را توسط مولفین سندها ، فراهم می نماید، بنابراین تبدیل یک سند XML به نوع دیگر، همواره بعنوان یک نیاز خواهد بود . از طرف دیگر، مرورگر قادر به نمایش مستقیم اسناد XML نمی باشند . بنابراین ضروری است که یک سند XML به HTML تبدیل تا امکان نمایش آن توسط مرورگرهای وب فراهم گردد . بمنظور پاسخ به نیازهای فوق، شرکت های ماکروسافت، Texcel و WebMethods در سال 1998 پیشنهاد ایجاد یک زبان پرسو جو برای XML را به کنسرسیوم وب، ارائه دادند (XML Query Language :XQL) . بخشی از پیشنهاد فوق به نحوه استفاده از زبان XSL در اسناد XML اشاره داشت . در سال 1999 کنسرسیوم وب ، تصمیم به یکپارچه نمودن تمامی تحقیقات انجام شده در رابطه با " ایجاد یک مدل اساسی برای پرس و جو " ، گردید . و بر همین اساس XSLT معرفی و عرضه گردید .

XPath
در زمان پیاده سازی XSLT ، گروه دیگری در کنسرسیوم وب بر روی یکی از تکنولوژی های مرتبط با XML و با نام XPointer فعالیت خود را آغاز نمودند. XPointer از ایده تگ های anchor در یک سطح جدید استفاده می کرد . هم XPointer و هم XSLT نیازمند روشی بمنظور اشاره به بخش های متفاوت یک سند XML می باشند. XSLT نیازمند انتخاب بخش های از یک سند XML بمنظور عملیات تبدیل بوده و XPointer بمنظور الحاق دو سند به امکان فوق نیاز خواهد داشت . بدین منظور می بایست از یک گرامر متداول در این زمینه استفاده تا امکان بکارگیری آن در XSLT و XPointer فراهم گردد . این تکنولوژی جدید، XPath نامیده شد . با اینکه XPath زیرمجموعه ای از XSLTاست ولی می تواند بصورت مستقل نیز استفاده گردد .
XPath زبانی برای یافتن اطلاعات در یک سند XML است . با استفاده از XPath می توان محل و موقعیت ساختار سند و یا داده های موجود در یک سند XML را مشخص نمود. پس از مشخص نمودن موقعیت و مکان المان مورد نظر در یک سند XML ، می توان با استفاده از XSLT پردازش های لازم را در رابطه با اطلاعات مربوطه، انجام داد .کنسرسیوم وب ، تعریف زیر را در ارتباط با XPath ارائه نموده است :

تعریف XPath

XPath ، زبانی بمنظورآدرس دهی بخش های متفاوت یک سند XML بمنظور استفاده در XSLT و XPointer است .

هدف اولیه XPath ،امکان آدرس دهی بخش های متفاوت یک سند XML است . بمنظور تامین خواسته فوق از امکانات و پتانسیل های متعددی بمنظور انجام عملیات بر روی رشته ها ، اعداد و منطق استفاده می شود . XPath از یک گرامر فشرده و عدم مبتنی بر XML بهمراه URI و مقادیر خصلت های XML استفاده می نماید.دلیل انتخاب نام XPath برای تکنولوژی فوق بدین علت است که در حقیقت از یک آدرس بمنظور حرکت در طول یک سند XML با ساختار سلسله مراتبی استفاده می گردد. XPath یک سند XML را بعنوان درختی از گره ها شبیه سازی می نماید . در این راستا ، گره های متفاوتی نظیر: گره های Element ، گره های Attribute و گره های Text ، وجود دارد برای هر گره توسط XPath ، یک رشته در نظر گرفته می شود . برخی از انواع خاص گره ها دارای اسامی اختصاصی خود می باشند . XPath بطور کامل XML Namespace را حمایت می نماید .بنابراین نام یک گره توسط یک زوج ، شامل یک بخش محلی و یک Namespace از نوع URIمشخص می گردد ( نام توسعه یافته ) .

برخی از مفاهیم اولیه XPath
گرامر استفاده شده در XPath شباهت زیادی به نحوه آدرس دهی فایل ها در یک سیتستم آدرس دهی فایل ها دارد . در صورتیکه مسیر با "/" شروع گردد ، نشاندهنده یک مسیر مطلق به المان مورد نیاز است . در صورتیکه آدرس با " //" شروع گردد، تمام المان هائی که با شرایط اعلام شده مطابقت نمایند، انتخاب می گردند . مثلا" //Price// ، باعث انتخاب تمام المان های price موجود در سند می گردد .

Context ( بافتار )
بافتار یک پرس وجو ، گره ای در سند XML است که پردارشی بر روی آن در حال انجام است . بنابراین در تمپلیت زیر :

xsl:template match="/"

ما در بافتار ریشه سند XML می باشیم . زمانیکه از از حلقه تکرار xsl:for-each استفاده می گردد ، بافتار، گره ای است که در حال حاضر از طریق حلقه تکرار بر روی آن قرار گرفته ایم . شناخت بافتاری که توسط یک تمپلیت XSL پردازش می گردد ، بسیار حایز اهمیت بوده و در خیلی از موارد و زمانیکه یک فایل XSL نوشته شده ، خروجی مورد نظر را تولید نمی نماید ، ممکن است اشکال از بافتار باشد . زمانیکه عملیات اشکال زدائی XSL را انجام خواهیم داد ، اولین سوالی که مطرح خواهد شد ، ماهیت بافتار پردازش شده است .

مکان یابی مسیرها
با مکان یابی مسیرها ، بافتار مربوط به گره ای که قصد یافتن آن را داریم ، مشخص می گردد . برای تعیین موقعیت یک مسیر، می توان از دو روش کوتاه و یا غیرکوتاه استفاده کرد . بمنظور انتخاب یکی از روش های فوق، می بایست به حمایت آن از طرف پارسر مطمئن گردید( از سال 2000 ، پارسر MSXML ماکروسافت، دو روش فوق را حمایت می نماید ) .

*

گرامر کوتاه (Abbreviated ) . مثال زیر، نحوه مکان یابی المان های موجود در یک سند XML را به صورت کوتاه توسط XPath نشان می دهد.



*

گرامر غیرکوتاه (unabbreviated ) .مثال زیر ، نحوه مکان یابی المان های موجود در یک سند XML را به صورت غیرکوتاه توسط XPath نشان می دهد.



د ر بخش دوم این مقاله، به بررسی عبارات و توابع در XPath خواهیم پرداخت .