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

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

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

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

یجاد یک وب سایت توسط ویژوال استودیو 2005 (بخش اول)

ایجاد یک وب سایت توسط ویژوال استودیو 2005 (بخش اول)
ویژوال استودیو دات نت نسخه 2005 ، یک محیط پیشرفته به منظور طراحی وب سایت های پویا و یا برنامه های وب را در اختیار پیاده کنندگان قرار می دهد . به همراه ویژوال استودیو دات نت 2005 ، ابزار پیاده سازی برنامه های وب که از آن با نام VWD ( برگرفته از Visual Web Developer ) نیز نام برده می شود ارائه شده است . VWD ، مجموعه ای از ابزارها و برنامه های کمکی به منظور ایجاد وب سایت های مبتنی بر ASP.NET 2.0 را در اختیار پیاده کنندگان قرار می دهد .
در این مقاله قصد داریم با نحوه ایجاد یک وب سایت با استفاده از امکانات ویژوال استودیو دات نت 2005 آشنا شویم . بدین منظور مراحل زیر را دنبال نموده و پس از انجام هر مرحله نتایج را بررسی خواهیم کرد.

* مرحله اول : ایجاد یک وب سایت و صفحه جدید
* مرحله دوم : افزودن کنترل های سرویس دهنده به صفحه
* مرحله سوم : نوشتن روتین های پاسخگو در زمان بروز یک رویداد ( Event handlers )

مرحله اول : ایجاد یک وب سایت و صفحه جدید
برای ایجاد یک وب سایت در محیط ویژوال استودیو از گزینه های زیر می توان با توجه به شرایط موجود استفاده نمود :

*

ایجاد یک وب سایت مبتنی بر سیستم فایل : این نوع سایت ها ، صفحات و سایر فایل ها را در یک فولدر موجود بر روی سیستم محلی ذخیره می نمایند . در چنین مواردی ضرورتی به نصب IIS بر روی کامپیوتر محلی وجود نداشته و می توان از ASP.NET Development Server همراه با ویژوال استودیو دات نت استفاده نمود .
*

ایجاد یک وب سایت محلی با استفاده از امکانات ارائه شده توسط سرویس دهنده وب مایکروسافت ( IIS ) : در این نوع سایت ها که با فرض نصب IIS بر روی سیستم ایجاد خواهند شد ، تمامی فایل ها و صفحات در یک فولدر زیر مجموعه و در مسیر ریشه محل نصب IIS ( معمولا" Inetpubwwwroot ) ذخیره خواهند شد . پس از ایجاد وب سایت ، برای اجرای برنامه از آدرس http://localhost/yourFolderName/YourPage.aspx استفاده می گردد .
*

ایجاد یک وب سایت بر روی یک سرویس دهنده راه دور : این نوع سایت ها بر روی یک سرویس دهنده از راه دور ایجاد خواهند شد و می توان از طریق اینترنت و با استفاده از پروتکل FTP اقدام به ارسال فایل ( و یا دریافت فایل ) به وب سایت مورد نظر نمود .

ایجاد یک وب سایت جدید
در این مقاله ایجاد یک وب سایت را با لحاظ کردن گزینه اول و انجام مراحل زیر دنبال می نمائیم :

*

اجرای ویژوال استودیو دات نت
*

انتخاب گزینه Web site از طریق File |New . در ادامه جعبه محاوره ای New Web Site نمایش داده می شود .
*

در پنجره Visual Studio installed templates ، گزینه ASP.NET Web Site را انتخاب می نمائیم ( در زمان ایجاد یک وب سایت ، از یک تمپلیت استفاده می گردد . هر تمپلیت برنامه وبی را ایجاد می نماید که شامل فایل ها و فولدرهای مختلفی است ) .
*

از طریق فیلد Location ، ( از طریق این فیلد می بایست نوع وب سایت و مکان ذخیره فایل ها و صفحات وب سایت را مشخص نمود ) گزینه File System را انتخاب کرده و در ادامه نام فولدر محل ذخیره فایل ها و صفحات وب را تایپ می نمائیم ( مثلا" C:Mywebsite ) .
*

از لیست Language ، یکی از گزینه های # Visual Basic ، Visual C و یا # Visual J را انتخاب می نمائیم ( زبان برنامه نویسی انتخاب شده در این مرحله به عنوان گزینه پیش فرض برای وب سایت در نظر گرفته خواهد شد . در یک برنامه وب می توان از چندین زبان برنامه نویسی استفاده نمود و متناسب با شرایط موجود در زمان ایجاد هر صفحه زبان برنامه نویسی آن را انتخاب نمود ) .
*

انتخاب گزینه OK

شکل زیر ، مراحل اشاره شده را نشان می دهد :

ایجاد یک وب سایت جدید

پس از انجام مراحل فوق ، فولدر محل استقرار فایل ها و یک صفحه جدید با نام Default.aspx ایجاد می گردد .پس از ایجاد صفحه فوق ، به صورت پیش فرض Source view نمایش داده می شود ( در Source view ، می توان عناصر html مربوط به صفحه را مشاهده نمود ) .

نمایش یک صفحه در Source view

پس از ایجاد ساختار اصلی وب سایت ،‌ در ادامه می توان یک فرم وب جدید را متناسب با خواسته موجود ایجاد نمود .
ایجاد یک فرم وب جدید
پس از ایجاد یک وب سایت جدید ، ویژوال استودیو یک صفحه ASP.NET ( صفحات فرم های وب ) را با نام Default.aspx ایجاد می نماید. در صورت تمایل می توان صفحه فوق را به عنوان صفحه اصلی سایت در نظر گرفت . در ادامه با نحوه ایجاد یک صفحه وب جدید آشنا می شویم . بدین منظور مراحل زیر را دنبال می نمائیم :

*

صفحه Default.aspx را غیر فعال نمائید ( close )
*

از طریق Solution Explorer ، بر روی وب سایت مورد نظر کلیک سمت راست نموده و گزینه Add New Item را انتخاب نمائید .

اضافه کردن یک آیتم جدید به وب سایت

*

در پنجره Visual Studio installed templates ، گزینه Web Form را انتخاب نمائید .
*

در فیلد Name ، یک نام دلخواه برای صفحه وب را تایپ نمائید ( نظیر FirstWebpage )
*

در لیست Language ، زبان برنامه نویسی مورد نظر خود را انتخاب نمائید ( #Visual Basic , C و یا #J ) . توجه داشته باشید با این که در زمان ایجاد وب سایت ، زبان پیش فرض برای وب سایت مشخص شده است ولی هر مرتبه که یک صفحه و یا عنصر جدید ایجاد می گردد، می توان زبان پیش فرض انتخاب شده را تغییر داد . همانگونه که قبلا" نیز اشاره گردید ، در یک وب سایت می توان از زبان های برنامه نویسی متفاوتی استفاده نمود .
*

CheckBox مربوط به Place Code in Separate file را غیر فعال نمائید .( در این مثال ، از یک فایل برای ذخیره کد ها و تگ های html استفاده شده است . در صورت تمایل می توان کد صفحات ASP.NET را در یک صفحه و یا کلاس فایل جداگانه ذخیره نمود) .

شکل زیر ، مراحل اشاره شده را نشان می دهد :

افزودن تگ های Html به صفحه
برای افزودن تگ های Html به یک صفحه مراحل زیر را دنبال می نمائیم :

*

در بخش پائین صفحه بر روی گزینه Design tab کلیک نموده تا به Design view سوئیچ نمائید . در Design view ، صفحه ای که با آن کار می کنید به صورت WYSIWYG نمایش داده می شود . با توجه به این که تاکنون متن و یا محتویات خاصی در صفحه تایپ نشده است ، این بخش خالی است .
*

بر روی صفحه متن مورد نظر خود را تایپ نمائید ( ایجاد اولین صفحه با استفاده از ویژوال استودیو 2005 )

درج متن در Design view

*

به Source View سوئیچ نمائید . در این مرحله شما تگ های Html را مشاهده می نمائید که در Design View ایجاد شده اند.

مشاهده تگ های html در Source view

اجرای صفحه
قبل از افزودن کنترل به صفحه ، می توان صفحه را اجراء نمود . برای اجرای یک صفحه به یک سرویس دهنده وب نیاز است. در یک وب سایت عملیاتی و نهائی ، از IIS به عنوان سرویس دهنده وب استفاده می گردد . برای تست یک صفحه ، شما می توانید از ASP.NET Development Server که به صورت محلی اجراء شده است (به IIS نیاز نمی باشد) ،‌ استفاده نمائید . برای وب سایت های مبتنی بر فایل ، سرویس دهنده وب پیش فرض ASP.NET Development Server می باشد .
برای اجرای صفحه موارد زیر را دنبال می نمائیم :

*

فعال کردن کلیدهای CTRL+F5 برای اجراء صفحه
*

برنامه VWD ، سرویس دهنده ASP.NET Development Server را آغاز می نماید. یک Icon درقسمت پائین toolbar نمایش داده شده و نشاندهنده این موضوع است که سرویس دهنده وب VWD فعالیت خود را آغاز نموده است (ASP.NET Development Server ) .
*

در ادمه ، صفحه در مرورگر نمایش داده می شود . با این که صفحه ای که ایجاد نموده اید دارای یک انشعاب aspx . است ولی اجرای آن همانند یک صفحه HTML است .
(در صورتی که با پیام خطای 502 برخورد نمائید و پیامی مبنی بر عدم امکان نمایش صفحه نمایش داده شود ، می بایست تنظیمات مرورگر را بگونه ای انجام داد که از سرویس دهنده پراکسی استفاده ننماید ) .

اجرای صفحه و مشاهده آن در مرورگر

در بخش دوم ، به بررسی مراحل دوم ( افزودن کنترل به صفحه ) و سوم ( نوشتن روتین های پاسخگو در زمان بروز یک رویداد ) ، خواهیم پرداخت .

نمایش داده در Gridview با استفاده از Stored Procedure

نمایش داده در Gridview با استفاده از Stored Procedure
نمایش داده در صفحات وب از جمله مهمترین وظایف پیاده کنندگان برنامه های وب محسوب می گردد . در ASP.NET 2.0 امکانات متعددی به منظور دستیابی و نمایش داده ارائه شده است . مجموعه کنترل های منبع داده و نمایش داده ، نمونه هائی در این زمینه می باشند . برای نمایش داده موجود در یک منبع داده بر روی یک صفحه وب ، در ابتدا می بایست به یک منبع داده متصل و متناسب با خواسته موجود یک query را اجراء و در ادامه نتایج را در یک کنترل نمایش داده ، نمایش داد . query مورد نظر را می توان در متن برنامه و یا به عنوان یک Stored Procedure در سرویس دهنده بانک اطلاعاتی SQL ذخیره نمود . Stored Procedures در مقایسه با query نوشته شده در متن برنامه از سرعت و ایمنی بمراتب بیشتری برخوردار می باشند.
در این مقاله قصد داریم با نحوه نمایش داده در یک کنترل Gridview ( یکی از مهمترین کنترل های نمایش داده ، ارائه شده در ASP.NET 2.0 ) با استفاده از یک Stored Procedure آشنا شویم . بدین منظور مراحل زیر را دنبال خواهیم کرد :

* مرحله اول : ایجاد یک وب سایت
* مرحله دوم : اتصال به یک بانک اطلاعاتی سرویس دهنده SQL و اضافه کردن یک Stored Procedure به آن
* مرحله سوم : نمایش داده برگردانده شده در Gridview
* مرحله چهارم : تست برنامه


مرحله اول : ایجاد یک وب سایت
به منظور ایجاد یک وب سایت با استفاده از ویژوال استودیو دات نت 2005 ، مراحل زیر را دنبال می نمائیم :

مرحله اول : فعال نمودن برنامه ویژوال استودیو

مرحله دوم : انتخاب گزینه New از طریق منوی File و کلیک بر روی گزینه Web site

مرحله سوم : انتخاب ASP.NET Web Site پس از نمایش جعبه محاوره ای New Web Site و از طریق بخش Visual studio installed templates

مرحله چهارم : مشخص کردن نوع وب سایت. در ابتدا و از طریق Location گزینه File System را انتخاب نموده و در ادامه نام فولدری که قرار است صفحات وب سایت در آن ذخیره شوند را مشخص می نمائیم ( به عنوان نمونه E:SrcoWebSiteStoredProcedure ) .

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

مرحله ششم : با کلیک بر روی دکمه Ok کار ایجاد یک وب سایت به اتمام می رسد .

پس از انجام مراحل فوق یک فولدر با نام مشخص شده و صفحه ای با نام Default.aspx ایجاد خواهد شد .

مرحله دوم : اتصال به یک بانک اطلاعاتی سرویس دهنده SQL و اضافه کردن یک Stored Procedure به آن
به منظور نمایش داده در صفحات ASP. NET می بایست مراحل زیر را دنبال نمود :

*

ایجاد و فعال کردن یک connection به بانک اطلاعاتی ( در این مقاله از بانک اطلاعاتی Northwind استفاده خواهیم کرد )
*

ایجاد یک Stored Procedure که مسئولیت برگرداندن داده به منظور نمایش در کنترل Gridview را برعهده خواهد داشت .
*

استفاده از یک کنترل منبع داده که مسئولیت اجرای Stored Procedure و مدیریت نتایج برگردانده شده را برعهده خواهد داشت .

در اولین مرحله ، یک Stored Procedure را ایجاد و در ادامه آن را به سرویس دهنده بانک اطلاعاتی اضافه می نمائیم .

مرحله اول : از طریق پنجره Server Explorer بر روی Data Connections کلیک ( سمت راست ) نموده و در ادامه گزینه Add Connection را انتخاب می نمائیم . در ادامه ، جعبه محاوره ای Add Connection نمایش داده می شود :

اضافه کردن یک connection
اضافه کردن یک connection

در صورتی که در لیست Data Source آیتم (( Microsoft SQL Server (SqlClient) نمایش داده نشده است ، گزینه Change را انتخاب تا در ادامه جعبه محاوره ای Change Data Source نمایش داده شود . در ادامه ، گزینه Microsoft SQL Server را انتخاب می نمائیم .
در صورتی که در مقابل نمایش Connection properties ، جعبه محاوره ای ‍Choose Data Source نمایش داده شود از طریق لیست Data Source ، نوع منبع داده را انتخاب می نمائیم . در این مقاله نوع منبع داده ، Microsoft SQL Server در نظر گرفته شده است . در لیست Data Provider ، گزینه .NET Framework Data Provider for SQL Server را انتخاب و در ادامه بر روی Continue کلیک می نمائیم .

انتخاب نوع منبع داده
انتخاب نوع منبع داده



مرحله دوم : در جعبه محاوره ای Add connection ، نام سرویس دهنده را در مکان Server Name وارد می نمائیم .

مرحله سوم : در بخش Log on to the server ، یکی از گزینه های موجود به منظور دستیابی و اجرای سرویس دهنده SQL را انتخاب ( integrated security و یا مشخص نمودن ID و رمز عبور ) و در صورت لزوم یک نام و رمز عبور را وارد نمائید .

مرحله چهارم : در صورت درج یک رمز عبور ، گزینه Save my Password را انتخاب نمائید .

مرحله پنجم : در بخش Select or enter a database name بانک اطلاعاتی Northwind را انتخاب نمائید .

ایجاد یک Connection به بانک اطلاعاتی Northwind
ایجاد یک Connection به بانک اطلاعاتی Northwind

مرحله ششم : بر روی Test Connection کلیک نموده و پس از اطمینان از صحت عملیات ، گزینه ok را انتخاب می نمائیم . بدین ترتیب ، connection جدید ایجاد و از طریق بخش Data Connection مربوط به Server Explorer قابل مشاهده خواهد بود .

مرحله هفتم : در Server Explorer و از طریق بخش Data Connections ، اتصال ایجاد شده را باز نموده تا جداول ، view و Stored Procedure مربوط به بانک اطلاعاتی قابل مشاهده گردند .

مرحله هشتم : در بخش Stored Procedures کلیک ( سمت راست ) نموده و گزینه Add New Stored Procedure را انتخاب می نمائیم . ( ویژگی Add New Stored Procedure توسط Visual Web Developer Express حمایت نمی شود ) .

اضافه کردن Stored Procedures
اضافه کردن Stored Procedures

مرحله نهم : کد زیر را به Stored Procedure جدید اضافه می نمائیم :

CREATE PROCEDURE PP_GetEmployees
AS
Select EmployeeID, LastName, FirstName from Employees
RETURN

مرحله دهم : بستن پنجره و کلیک بر روی Yes به منظور ایجاد Stored Procedure

مرحله سوم : اضافه کردن یک کنترل Gridview به منظور نمایش داده
پس از ایجاد connection به یک منبع داده ،‌ به منظور نمایش داده می بایست عملیات زیر را انجام داد :

*

استفاده از یک کنترل منبع داده بر روی صفحه که مسئولیت اجرای ‍ Stored Procedure و مدیریت نتایج را برعهده خواهد گرفت .
*

اضافه کردن کنترل GridView بر روی صفحه به منظور نمایش اطلاعات

بدین منظور مراحل زیر را دنبال می نمائیم تا داده در کنترل Gridview نمایش داده شود . کنترل فوق ، داده مورد نظر جهت نمایش را از کنترل SqlDataSource دریافت خواهد کرد .

مرحله اول : فعال نمودن صفحه Default.aspx و در ادامه سوئیچ به Design view

مرحله دوم : از طریق Toolbox و بخش Data ، یک کنترل Gridview را انتخاب و بر روی صفحه مستقر می نمائیم .

مرحله سوم : از طریق منوی Gridview Tasks ، گزینه Choose Data Source و در ادامه New Data Source را انتخاب می نمائیم . در ادامه ، ویزارد Data Source Configuration فعال خواهد شد .

مرحله چهارم : انتخاب Database و در ادامه کلیک بر روی OK ( بدین ترتیب مشخص نموده ایم که می خواهیم داده را از یک بانک اطلاعاتی سرویس دهنده SQL دریافت نمائیم ) . در بخش Specify an ID for the data source ، یک نام پیش فرض برای کنترل منبع داده با نام SqlDataSource1 در نظر گرفته می شود ( در صورت تمایل می توان این نام را تغییر داد ) . در ادامه ویزارد Configure Data Source SqlDataSource1 ، صفحه ای را نمایش خواهد داد که از طریق آن می توان یک connection را انتخاب نمود .

پیکربندی منبع داده
پیکربندی منبع داده

مرحله پنجم : در لیست ? Which data connection should your application use to connect to the database ، نام connection ایجاد شده در مرحله قبل را وارد نموده و بر روی دکمه Next کلیک نمائید . در ادامه ، ویزارد موبوطه صفحه ای را نمایش خواهد داد تا به کمک آن بتوان Connection string را در یک فایل پیکربندی ذخیره نمود . ذخیره Connection string در فایل پیکربندی دارای دو مزیت عمده است :

* بمراتب ایمن تر از ذخیره در یک صفحه است .‌
* امکان استفاده از connection string مشابه در چندین صفحه وجود خواهد داشت .


مرحله ششم : گزینه Yes, save this connection as را انتخاب و در ادامه بر روی دکمه Next کلیک نمائید . در ادامه ، ویزارد صفحه ای را نشان خواهد داد که به کمک آن می توان نحوه بازیابی داده از منبع داده را مشخص نمود .

مرحله هفتم : گزینه Specify a custom SQL statement or stored procedure را انتخاب و بر روی دکمه Next کلیک نمائید .

نحوه بازیابی اطلاعات از بانک اطلاعاتی ( Stored Procedure )
نحوه بازیابی اطلاعات از بانک اطلاعاتی ( Stored Procedure )

مرحله هشتم : در صفحه Define Custom Statements or Stored Procedures page ، گزینه Stored Procedure را انتخاب و در ادامه ، Stored Procedure ایجاد شده در مرحله قبل را انتخاب می نمائیم ( SP_GetEmployees ) .

انتخاب Stored Procedure
انتخاب Stored Procedure

مرحله نهم : کلیک بر روی دکمه Next

مرحله دهم : کلیک بر روی Test Query به منظور اطمینان از صحت داده بازیابی شده

مرحله یازدهم : با کلیک بر روی دکمه Finish ، پیکربندی Gridview به منظور نمایش داده بازیابی شده از بانک اطلاعاتی توسط Stored Procedure به اتمام می رسد.

مرحله چهارم : تست برنامه
با فشردن کلیدهای CTRL+F5 برنامه اجراء و تمامی رکوردهای موجود در جدول Employees بانک اطلاعاتی Northwind در Gridview نمایش داده می شوند . شکل زیر خروجی این برنامه را نشان می دهد .

نمایش داده در Gridview با استفاده از Stored Procedure
نمایش داده در Gridview با استفاده از Stored Procedure

برنامه های وب مبتنی بر سرویس گیرنده : AJAX و Atlas

برنامه های وب مبتنی بر سرویس گیرنده : AJAX و Atlas
یکی از ویژگی های مهم برنامه های وب ، تبعیت آنان از معماری "سرویس گیرنده - سرویس دهنده" است . این بدان معنی است که پیاده کنندگان برنامه های وب می توانند به منظور تحقق پردازش های سمت سرویس دهنده و سرویس گیرنده از فن آوری های متعددی استفاده نمایند. یکی از نکات مهم در خصوص انجام پردازش های سمت سرویس گیرنده ، میزان وابستگی آنان به اطلاعات موجود در سمت سرویس دهنده است . به عبارت دیگر ، اجرای یک event handler در سرویس گیرنده تا چه میزان وابسته به کد سمت سرویس دهنده است و به منظور انجام آن چه میزان داده می بایست بین سرویس گیرنده و سرویس دهنده مبادله گردد ؟
صرفنظر از این که به سوال فوق چه پاسخی داده می شود ، واقعیت این است که به منظور مدیریت رویدادهای محقق شده در سمت سرویس گیرنده ، می بایست ملزومات مورد نیاز ایجاد تا پیاده کنندگان بتوانند با استفاده از آنان پردازش های سمت سرویس گیرنده را مدیریت نمایند .

پردازش های سمت سرویس گیرنده از گذشته تاکنون
با توجه به این که پردازش های سمت سرویس گیرنده در برنامه های وب می بایست مستقل از نوع پلت فرم باشند ، بدیهی است که تمامی تلاش های انجام شده در این عرصه ، می بایست متمرکز بر روی برنامه های مرورگر باشد تا با ایجاد پتانسیل هائی در آنها ، امکان انجام پردازش های سمت سرویس گیرنده فراهم گردد . ظهور زبان های اسکریپت نویسی نظیر جاوااسکریپت و تجهیز مرورگرها به برنامه های مفسر مربوطه از جمله اقدامات عملی دراین عرصه است . استفاده از زبان جاوااسکریپت به منظور کدینگ پردازش های سمت سرویس گیرنده دارای قدمتی چندین ساله است . در ادامه ، قابلیت های جدیدی به مرورگرها اضافه گردید تا پیاده کنندگان بتوانند به کمک آنان برنامه های وب سمت سرویس گیرنده را ایجاد نمایند . هم اینک ، تمامی مرورگرهای متداول از یک مدل شی گراء موسوم به DOM ( برگرفته از document object model ) استفاده می نمایند و تعداد اندکی از آنها از یک ویژگی جدید با نام XMLHTTP استفاده می نمایند که به کمک آن ، سرویس گیرندگان و سرویس دهندگان می توانند بدون نیاز به انجام یک postback کامل و round trip با یکدیگر و به صورت مستقیم ارتباط برقرار نمایند.
XMLHTTP ، شامل مجموعه ای API ( رابط برنامه نویسی ) است که امکان ارسال و یا دریافت داده به صورت باینری ، HTML و XML را از سرویس دهندگان وب بر روی اینترنت و به کمک پروتکل HTTP فراهم می نماید . در مواردی که نیاز به داده موجود در سمت سرویس دهنده می باشد ، XMLHTTP به صورت پیوسته اقدام به ارسال درخواست خود برای سرویس دهنده می نماید تا آخرین اطلاعات را بدون نیاز به refresh کردن مدام مرورگرها ، بازیابی نماید . در واقع ، به کمک فن آوری فوق ، سرویس گیرندگان قادر به مبادله غیرهمزمان با سرویس دهنده بوده و می توانند اقدام به ارسال و یا دریافت داده XML بدون نیاز به انجام یک round trip کامل که باعث تولید مجدد یک صفحه می گردد ، نمایند .
ماحصل این تحولات ، ظهور نسل جدیدی از برنامه های وب نظیر Microsoft Virtual Earth و Microsoft Windows Live است . ایجاد چنین برنامه های وبی کار ساده ای نخواهد بود و پیاده کنندگان می بایست شناخت مناسبی نسبت به جاوااسکریپت و مدل DOM داشته باشند که ممکن است در هر مرورگر متفاوت باشد . علاوه بر این ، جاوااسکریپت تمامی ویژگی های یک زبان شی گراء را ارائه نمی نماید و بسیاری از ملزومات مورد نیاز پیاده کنندگان برنامه های وب در فریمورک دات نت را تامین نمی نماید ( نظیر type-safe ) .

ایجاد برنامه های وب با تاکید بر انجام پردازش سمت سرویس گیرنده ، نیازمند ملزوماتی نظیر
یک زبان برنامه نویسی و پلت فرم پیاده سازی جدید است .

AJAX ( برگرفته از asynchronous JavaScript and XML )
پیاده سازی برنامه های وب با استفاده از فن آوری های اشاره شده ( اسکریپت نویسی سمت سرویس گیرنده و مبادله غیرهمزمان با سرویس دهنده ) ، AJAX نامیده می شود . AJAX ، پیاده کنندگان را قادر به تولید صفحاتی می نماید که از توان پاسخگوئی بسیار مطلوبی در سمت سرویس گیرنده متناسب با رویداد ایجاده شده ، برخوردار می باشند . چراکه آنها از اسکریپت های سمت سرویس دهنده برای دستیابی و مدیریت عناصر بخش رابط کاربر استفاده می نمایند . علاوه بر این ، با توجه به مبادله غیرهمزمان داده به منظور ارسال و دریافت داده ، امکان انجام عملیات مورد نظر بر روی داده بدون وقفه و ازدست دادن state وجود خواهد داشت . Microsoft Virtual Earth و برنامه سرویس گیرنده نامه های الکترونیکی Outlook Web Access ، دو نمونه از برنامه های سبک AJAX ، می باشند .

Atlas : تلاش‍ی در جهت ایجاد یک پلت فرم پیاده سازی جامع
فن آوری جدید ASP.NET با نام Atlas ، مجموعه ای از فن آوری های مایکروسافت را شامل می شود که با تمرکز بر روی اصول AJAX ، سعی در توسعه و بهبود آن را دارد .
Atlas ، یک فن آوری جدید در عرصه پیاده سازی برنامه های وب ASP.NET است که کتابخانه های اسکریپت سرویس گیرنده را با فریمورک پیاده سازی مبتنی بر سرویس دهنده ASP.NET 2.0 ترکیب می نماید . در واقع ، Atlas به پیاده کنندگان برنامه های وب یک پلت فرم مناسب به منظور پیاده سازی صفحات وب مبتنی بر سرویس گیرنده را ارائه می نماید که قبلا" مشابه آن در خصوص صفحات وب مبتنی بر سرویس دهنده توسط ASP.NET ارائه شده بود . با توجه به این که Atlas ، به عنوان یک پتانسیل اضافه در کنار ASP.NET مطرح می باشد ، بدیهی است که کاملا" سازگار با سرویس های مبتنی بر سرویس دهنده باشد . با استفاده از Atlas ، می توان بخش قابل توجهی از پردازش های مورد نیاز یک برنامه را به سمت سرویس گیرنده انتقال داد ( fat-client ) . در چنین مواردی ، امکان ارتباط سرویس گیرنده با سرویس دهنده در background فراهم می گردد. ماحصل این فن آوری ، ایجاد برنامه های وبی است که علاوه بر ارائه امکانات مناسب در لایه رابط کاربر ( UI ) ، دارای توان پاسخگوئی بالائی می باشند و به سادگی می توانند با سرویس دهنده ارتباط برقرار نمایند .

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

*

DOM : به کمک فن آوری فوق ، عناصر موجود در یک صفحه HTML به عنوان مجموعه ای از اشیاء استاندارد ( نظیر document و windows ) در نظر گرفته می شوند . بدین ترتیب ، امکان دستیابی و انجام عملیات دلخواه بر روی آنان از طریق کد فراهم می گردد .
*

DHTML ( برگرفته از Dynamic HTML ) : فن آوری فوق ، توانمندی HTML را به منظور واکنش مناسب در خصوص عملیاتی که توسط کاربران انجام می شود ( نظیر درج داده ) با استفاده از اسکریپت های سمت سرویس گیرنده و بدون نیاز به یک round trip افزایش می دهد .
*

رفتارها ، شامل روشی مناسب به منظور برخورد سیستماتیک با عملیاتی نظیر drag and drop در سطح لایه رابط کاربر و مرتبط با عناصر موجود بر روی یک صفحه می باشد .
*

عناصر : اشیاء سفارشی شده جاوااسکریپت می باشند که پتانسیل های توسعه یافته ای را در سمت سرویس گیرنده ایجاد می نمایند .

چالش های فن آوری AJAX
برنامه نویسی صفحات به سبک AJAX دارای چالش های متعددی است :

*

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

برنامه نویسی سمت سرویس گیرنده صرفا" با استفاده از جاوااسکریپت انجام می شود . پیاده سازی برخی از پتانسیل های AJAX می تواند برای پیاده کنندگان بسیار پیچیده باشد و نیازمند دانش بالائی در خصوص استفاده از جاوااسکریت است .
*

جاوا اسکریپت ، ویژگی ها و امکانات مورد نیاز پیاده کنندگان برنامه های دات نت را تامین نمی نماید ( نظیر یک رویکرد شی گراء کامل ) . علاوه بر این ، در این فن آوری از کتابخانه ای نظیر آنچه در پلت فرم دات نت ارائه شده است ،‌ استفاده نمی گردد و برنامه نویسان می بایست تمامی برنامه را از ابتدا کد نمایند .
*

جاوااسکریپت و پیاده سازی سمت سرویس گیرنده ، عموما" بخوبی در IDEs حمایت نمی گردند .

فن آوری Atlas ، مسائل اشاره شده را با ارائه یک فریمورک کامل برای ایجاد برنامه های وب مبتنی بر سرویس گیرنده برطرف می نماید.

فن آوری Atlas ،
دارای عناصر سرویس گیرنده و سرویس دهنده ای است
که آن را به خوبی با ASP.NET یکپارچه و مرتبط می نماید

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

عناصر سمت سرویس گیرنده Atlas
فن آوری Atlas برای پیاده سازی برنامه های سمت سرویس گیرنده ، از مجموعه ای کتابخانه سمت سرویس گیرنده ( فایل هائی با انشعاب Js . ) استفاده می نماید که پیامد آن تعریف یک رویکرد لایه ای برای ایجاد برنامه های مبتنی بر سرویس گیرنده است . این لایه ها عبارتند از :

*

لایه مختص مرورگرها : با استفاده از پتانسیل های ارائه شده توسط این لایه ، اسکریپت های Atlas در اکثر مرورگر سازگار بوده و ضرورتی به نوشتن اسکریت های مختص یک مرورگر وجود ندارد .
*

سرویس های هسته atlas : شامل ضمائمی به جاوااسکریپت نظیر کلاس ها ، namespace ، event handler ، توارث ، نوع های داده و تسلسل اشیاء است . ویژگی های فوق یک مدل برنامه نویسی شی گراء را در اختیار پیاده کنندگان قرار می دهد تا به کمک بتوان علاوه بر سرعت در ایجاد برنامه ها از کد تولید شده نیز بدفعات استفاده نمود.
*

کتابخانه کلاس پایه Atlas : شامل عناصری نظیر دیباگرها ، Timers ، ردیابی و string buliders است .
*

لایه شبکه : این لایه با سرویس های مبتنی بر وب و برنامه ها ارتباط برقرار می نماید و مدیریت فراخوانی متدها از راه دور و غیرهمزمان را برعهده می گیرد . لایه فوق ، مدیریت فراخوانی غیرهمزمان برروی XMLHTTP را برعهده گرفته و باعث می گردد که پیاده کنندگان بدون این که درگیر پیچیدگی های موجود شوند با نوشتن چندین خط کد ، متدهای مورد نظر را فراخوانند .
*

لایه UI : در این لایه قابلیت های سرویس گیرنده Atlas نظیر رفتارها ، گرامر تعریفی Atlas ، عناصر UI و نسبت دهی داده ارائه می گردد .
*

لایه کنترل ها : این لایه کنترل های مختص atlas را برای پیاده سازی سمت سرویس گیرنده ایجاد می نماید . علاوه بر این که می توان از طریق اسکریپت به این کنترل ها دستیابی داشت ، امکان انجام عملیات متفاوتی نظیر نسبت دهی داده نیز وجود دارد. کنترل های Navigation و data-bound listview نمونه هائی در این زمینه می باشند .
*

یک مدل برنامه نویسی تعریفی که پیاده کنندگان را قادر می سازد عناصر atlas را با روشی مشابه کنترل های سرویس دهنده ASP.NET ایجاد نمایند .

فن آوری Atlas را می توان
به عنوان کتابخانه های اسکریپت سرویس گیرنده تصور نمود که زیرمجموعه ای از معماری ASP.NET بر روی ‌سرویس دهنده می باشند

برای پیاده سازی برنامه های وب سمت سرویس گیرنده ، فن آوری Atlas ویژگی های متعددی را ارائه می نماید . ارائه یک مجموعه API برای پیاده سازی در جاوااسکریپت ، قابلیت سازگاری اتوماتیک با مرورگرها و یک مدل تعریفی برای پیاده سازی سمت سرویس گیرنده ، نمونه هائی در این زمینه م‍ی باشند .

عناصر سمت سرویس دهنده Atlas
فن آوری Atlas ، صرفا" در ارتباط با اسکریپت های سمت سرویس گیرنده نمی باشد و از عناصر سمت سرویس دهنده ، سرویس ها و کنترل هائی استفاده می نماید که می توانند با اسکریپت های Atlas سمت سرویس گیرنده مرتبط گردند :

*

سرویس های وب که ویژگی های ASP.NET نظیر سرویس های پروفایل ، membership ، roles ، personalization و globalization را ارائه می نمایند .
*

کنترل های سرویس دهنده Atlas که کنترل های سرویس دهنده ASP.NET را reasemble می نمایند ولی اسکریپت های سمت سرویس گیرنده Atlas را منتشر می نمایند . این نوع کنترل ها ارتباط بسیار نزدیکی با کنترل های سرویس دهنده ASP.NET نظیر دکمه ها ، Label و ... دارند .
*

کنترل های سرویس دهنده Atlas که باعث می گردند جاوااسکریپت رفتارهای سمت سرویس گیرنده را تولید نماید . کنترل های HoverBehavior ، ClickBehavior ، Popup و AutocompleteBehavior نمونه هائی در این زمینه می باشند .
*

تمامی کنترل های سرویس دهند atlas در ویژوال استودیو نیر قابل استفاده می باشند. بنابراین می توان از آنان در زمان طراحی استفاده نمود ( همانند کنترل های سرویس دهنده ASP.NET ) .

فن آوری Atlas ، اسکریپت نویسی سمت سرویس گیرنده را با پیاده سازی سمت سرویس دهنده ASP.NET یکپارچه می نماید و پیاده کنندگان می توانند از پتانسیل های ASP.NET در سمت سرویس دهنده برای برنامه های Atlas نیز استفاده نمایند .

هدف اولیه فن آوری Atlas ،
ترکیب ویژگی اسکریپت های سمت سرویس گیرنده با ویژگی هائی از ASP.NET بر روی سرویس دهنده است تا به کمک آن
یک پلت فرم پیاده سازی جامع و فراگیر ایجاد گردد .

مقدمه ای بر 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 می گویند .

خلاصه

*

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

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

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

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

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

*

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

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

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

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

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

*

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

آیا داده ها توسط یک 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 خواهیم پرداخت .

آموزش کامل نصب PHP بر روی Windows

مقدمات نصب PHP (مشترک در تمامی حالات)

آخرین نسخهء PHP را از سایت رسمی PHP به آدرس http://www.php.net می گیریم. (توجه کنید که نسخهء installer را نگیرید.)

فایل فشرده را باز کرده و در شاخهء دلخواه (در اینجا c:php) می ریزیم.

به شاخهء c:php رفته و شاخه ای با نام tmp و شاخه ای با نام uptmp بسازید. (این نام ها اختیاری هستند)

فایل php.ini-recommended که در شاخهء c:php وجود دارد را با notepade باز کرده، register_globals را پیدا کرده و مقدار جلوی آن را on کنید. سپس متغیر upload_tmp_dir را پیدا کرده و مقدار c:phpuptmp را در جلوی آن قرار دهید و متغیر session.save_path را نیز پیدا کرده و مقدار c:phptmp را جلوی آن بنویسید.

نصب PHP 4 روی IIS به صورت CGI

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر دهید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.

فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:

 

 

Executable : C:phpphp.exe

Extension : .php

 

سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی IIS به صورت CGI

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر دهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.

فایل libmysql.dll که در شاخهء c:php وجود دارد را در شاخهء ویندوز خود کپی کنید.

فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:

  

Executable : C:phpphp-cgi.exe

Extension : .php

 سرور را دوباره راه اندازی کنید.

نصب PHP 4 روی IIS به صورت ISAPI

فایل‌هاى c:phpphp4ts.dll و c:phpsapiphp4isapi.dll و c:phpdlls*.dll را در شاخه system ویندوز خود ذخیره کنید.

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر دهید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.

فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:

 Executable : C:{WIN_DIR}systemphp4isapi.dll

Extension : .php

 سپس به برگهء ISAPI رفته و مقادیر زیر را وارد کنید:

 Filter Name : php

Executable : C:{WIN_DIR}systemphp4isapi.dll

 سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی IIS به صورت ISAPI

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر دهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.

فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.

فایل های php5isapi.dll و php5ts.dll که در شاخهء c:php وجود دارد را در شاخهء system ویندوز خود کپی کنید.

فایل libmysql.dll که در شاخهء c:php وجود دارد را در شاخهء ویندوز خود کپی کنید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:

 Executable : C:{WIN_DIR}systemphp5isapi.dll

Extension : .php

 سپس به برگهء ISAPI رفته و مقادیر زیر را وارد کنید:

 Filter Name : php

Executable : C:{WIN_DIR}systemphp5isapi.dll

 سرور را دوباره راه اندازی کنید.

نصب PHP 4 روی Apache به صورت CGI

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.

در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.

در بخشی که ScriptAlias ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:

 ScriptAlias /php/ "c:/php/"

 به قسمت AddType application رفته و سطر زیر را می نویسیم:

 AddType application/x-httpd-php .php

 در بخش Action application هم این خط اضافه می ‌شود:

 Action application/x-httpd-php "/php/php.exe"

 در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:

 DirectoryIndex index.html index.htm index.html.var index.php

 سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی Apache به صورت CGI

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر بدهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.

فایل libmysql.dll که در شاخهء c:php وجود دارد را در شاخهء ویندوز خود کپی کنید.

در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.

در بخشی که ScriptAlias ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:

 ScriptAlias /php/ "c:/php/"

 به قسمت AddType application رفته و سطر زیر را می نویسیم:

 AddType application/x-httpd-php .php

 در بخش Action application هم این خط اضافه می ‌شود:

 Action application/x-httpd-php "/php/php-cgi.exe"

 در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:

 DirectoryIndex index.html index.htm index.html.var index.php

 سرور را دوباره راه اندازی کنید.

نصب PHP 4 روی Apache2 به صورت Module

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.

فایل‌هاى c:phpphp4ts.dll و c:phpsapiphp4isapi.dll را در شاخه modules در شاخهء نصب Apache ذخیره کنید.

در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.

در بخشی که LoadModule ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:

 LoadModule php4_module modules/php4apache2.dll

 به قسمت AddType application رفته و سطر زیر را می نویسیم:

 AddType application/x-httpd-php .php

 در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:

 DirectoryIndex index.html index.htm index.html.var index.php

 سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی Apache2 به صورت Module

فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.

فایل‌هاى c:phpphp5ts.dll و c:phpphp5isapi.dll را در شاخه modules در شاخهء نصب Apache ذخیره کنید.

در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.

در بخشی که LoadModule ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:

 LoadModule php5_module modules/php5apache2.dll

 به قسمت AddType application رفته و سطر زیر را می نویسیم:

 AddType application/x-httpd-php .php

 در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:

 DirectoryIndex index.html index.htm index.html.var index.php

 سرور را دوباره راه اندازی کنید.

پانویس:

1- توصیهء اکید من در این زمان، استفاده از "نصب PHP 5 روی Apache2 به صورت Module" می باشد.

2- Apache را می توانید از سایت رسمی این نرم افزار به آدرس http://httpd.apache.org دریافت کنید.

3- تمامی نصب ها مخصوص ویندوز می باشند.

4- احتمال وجود اشکال یا نقص در توضیحات وجود دارد.

5- دخل و تصرف در این مطلب وانتشار آن، مجاز نمی باشد. (انتشار بدون هیچگونه تصرفی مجاز است)

6- احتمال تکمیل شدن این مقاله وجود دارد، آخرین نسخه را می توانید از اوایل آگوست 2004 به بعد، از سایت http://www.iranphp.net دریافت کنید.