ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11
  1. #1
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432

    آموزش جامع SQL Server بصورت تصويري

    [B]آموزش جامع SQL Server 2005 بصورت تصويري و مرحله به مرحله[/B]

    دوستان مي*خوام در اين تاپيك در مورد SQL Server 2005 صحبت بكنم. هرچند خودم تجربه**ي آنچناني ندارم. ولي ميخوام هر چي هست رو به قول معروف Share كنم! و البته به كمك شما دوستان نيز نياز مبرم دارم.


    در ضمن اين تاپيك، پرسش و پاسخ در مورد SQL Server نيست. پس لطفاً در اين تاپيك سئوالي ارسال نكنيد. چون توالي پست*هاي آموزشي رو به هم خواهد ريخت و باعث سردرگمي كاربران خواهد شد.

    [B] سرفصل*هايي كه مورد نظرم هست به صورت زير هستش:[/B]
    [B]
    - مقدمه*اي بر SQL Server 2005
    - ديتابيس (Database)
    - جدول (Tables)
    - فهرست (Index)
    - دستور SELECT
    - توابع تجميعي (Aggregate Functions)
    - دستورات دستكاري جداول (Tables Manipulate Commands)
    - توابع از پيش ساخته شده (Built In Functions)
    - متغير*ها و دستورات شرطي T-SQL
    - توابع (Functions)
    - ماژول*ها (Procedures)
    - دستور Trigger
    - دستور Transaction
    - قفل كردن ركوردها (Locking)
    - كنترل خطا (Error Handling)
    - دستور Cursor
    [/B]


    منبع :دانشجويان پيام نور
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  2. #2
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    خب! اميدوارم بدونيدSQL Server چيه! كلاً دو جور ديتابيس داريم. ديتابيس*هاي Desktop و ديتابيس*هاي Client/Server.

    ديتابيس*هاي معروف Desktop عبارتند از:
    Access – dBase
    ديتابيس*هاي Client/Server معروف هم عبارتند از:
    [B]DB2[/B] – [B]Oracle[/B] - [B]MS SQLServer[/B] –[B]MySQL[/B]

    مهمترين ويژگي ديتابيس*هاي Client/Server اين هستش كه كاربر بطور مستقيم به ديتابيس دسترسي نداره. يعني بايد از طريق يك سرويس واسط دستور خودش رو براي اجرا به سيستم بده. در حالي كه در ديتابيس*هاي Desktop اينگونه نيست و همين خصوصيت باعث ميشه كه ديتابيس*هاي Client/Server نسبت به ديتابيس*هاي Desktop امنيت بالاتري داشته باشند.

    براي اينكه بفهميم SQL Server 2005 روي يك كامپيوتر نصب شده يا نه، اكثراً دنبال برنامه Management Studio مي*گرديد. در حالي كه وجود برنامه Management Studio نه شرط لازم و نه شرط كافي براي وجود سرويس SQL Server 2005 روي يك سيستم مي*باشد. روش درست براي اطمينان از وجود SQL Server 2005 در يك سيستم، چك كردن مسير زير است:

    Control Panel>Administrative Tools>Services>SQL Server (MSSQLServer)



    يعني سرويسي به نام (SQL Server (MSSQLServer بايد در ليست سرويس*هاي ويندوز موجود باشد.

    [B]مواردي در خصوص نصب SQL Server 2005[/B]

    اگر بخواهيد SQL Server 2005 را روي كامپيوتر شخصي خودتون نصب كنيد، توجه داشته باشيد كه اگر ويندوزتون XP هست نمي*تونيد نسخه Enterprise رو روي سيستمتون نصب كنيد و بايد از نسخه*هاي Standard و يا Developer استفاده كنيد. ضمناً ويندوز XP شما حتماً بايد SP2 به بالا باشد.
    ولي اگر بخواهيد SQL Server 2005 رو براي شركت و يا سازماني نصب كنيد، بايد نسخه Enterprise رو روي Windows Server 2003 با SP1 به بالا نصب شود.
    فراموش نكنيد كه قبل از نصب SQL Server 2005 حتماً DotNet Framework 2.0 (و بالاتر) روي سيستمون نصب شده باشه. براي ديدن Minimum Requirement*ها و Windows Compatibility ورژن*هاي مختلف SQL Server 2005 ميتونيد [برای نمایش لینک باید عضو شوید. ]رو ببيند.

    كلاً در يك كامپيوتر مي*توان تعدد 64 سرويس SQL Server 2005 نصب كرد. ولي حداكثر 4 عدد instance را ميتوان نامگذاري و تعريف نمود.

    در هنگام نصب SQL Server 2005 به يكسري اصطلاحات برميخوريد كه شايد بعضي از اونها رو ندونيد. من به اختصار اونها رو توضيح ميدم:

    [B]Reporting Service[/B]
    اگر در زمان نصب SQL Server 2005 اين گزينه فعال شود، بخش گزارشگيري خودكار روي سيستم شما نصب خواهد شد. اين سرويس امكاناتي را براي ايجاد گزارش از بانك هاي اطلاعاتي مختلف در اختيارتان قرار مي دهد. گزارشهاي ايجاد شده توسط اين سرويس Web-enabled هستند و قابليت پخش روي انواع دستگاهها را دارند . شما مي توانيد اين گزارشات را با فرمتهاي مختلف Excel و Word و PDF و Html و ... ايجاد كنيد .

    [B]Analysis Service[/B]
    قابليت پردازش هاي تجزيه و تحليلي آنلاين (OLAP) با سرعت بالا، تجزيه وتحليل پيشرفته براي مجموعه ديتابيس هاي پيچيده و بزرگ با استفاده از راههای متعدد ذخيره سازي اطلاعات. در حقيقت اگر بخواهيم روي ديتابيس*هاي خيلي بزرگ گزارشگيري كنيم، پروسه ساخت گزارش خيلي كند است. براي اين منظور يك مخزن اطلاعات جنبي در نظر گرفته مي*شود و گزارشات از روي آن تهيه مي*شود. نتيجه گزارش بر روي يك فضاي جداگانه قرار مي*گيرد و چنانچه اطلاعات تغيير كند، تغييرات ايجاد شده بصورت اتوماتيك بر روي گزارشات اعمال مي*شود.
    فرض كنيم كه پليس 110 يك نرم افزار در اختيار دارد كه توسط آن آمار جرائم را نگهداري مي كند. در اين آمار، پليس اطلاعات مربوط به مكان و زمان وقوع جرم و نوع جرم مثلا دزدي را نگهداري مي كند. پس از مدتي پليس مي تواند اطلاعات مربوط به دزدي در يك مكان خاص را بررسي كند. مثلا پليس در بررسي و تحليل اطلاعات خود پي مي برد كه در فلان محله خاص بين ساعت 8 الي 10 صبح هيچ مورد دزدي گزارش نشده است بنابراين مي تواند نيروهاي خود را در آن زمان خاص در آن محله خاص كاهش داده و در جاي ديگري كه امكان وقوع دزدي بيشتر است استفاده كند.

    [B]Notification Service[/B]
    اين سرويس محيطي براي ايجاد برنامه هايي است كه پيامهايي را ايجاد و ارسال ميكنند. از اين سرويس مي توانيد براي ايجاد و ارسال پيامهاي شخصي و زمانبندي شده به هزاران يا ميليونها شخص يا دستگاههاي گوناگون استفاده نماييد.
    مثلاً تصور کنید که تعدادی کاربر در حال اتصال به یک بانک حاوی اطلاعات مربوط به ارزش سهام در بورس هستند. از آن*جایی که ممکن است قیمت سهام هر شرکت یا مؤسسه برای تعدادی از کاربران از اهمیت زیادی برخوردار باشد، می*توان این سیستم را طوری تنظیم کرد تا هرگاه ارزش سهام خاصی که مورد نظر هر کاربر است تغییر کرد، به صورت اتوماتیک به وی اعلام شود. کاربر هم می*تواند این تغییرات را برروی برنامه کاربردی خود، تلفن همراه (در قالب Windows Messenger ،(SMS و یا ایمیل به*صورت مرتب دریافت و مشاهده کند.

    [B]Integration Services[/B]
    اين سرويسها يك پلت فرم هستند كه راه حل هايي براي ايجاد يكپارچگي اطلاعات با سرعت بالا ارائه مي كنند و شامل بسته هاي نرم افزاري پردازش extract, transform, and load براي data warehousing است.

    [B]SQL Server Agent[/B]
    به بيان ساده، اين سرويس مسئول دفتر SQL SERVER است. مثلاً در صورت تعريف توسط ادمين، هر شب ساعت 10 از اطلاعات كپي پشتيبان مي*گيرد.

    [B]Authentication Mode[/B]
    چنانچه گزينه*ي Windows Authentication Mode انتخاب گردد، دسترسي كاربران و كلمه عبور آنان به
    SQL Server بر اساس وجود و درستي آن*ها در ويندوز انجام مي*گيرد. ولي اگر Mixed Mode انتخاب شود بايد براي دسترسي به SQL Server مجدداً نام كاربري و سطح دسترسي تعريف كرد.

    [B]Collation[/B]
    شمايي در SQL Server كه نحوه Sort حروف الفباي يك زبان خاص و همچنين نحوه Compare كردن حروف الفباي آن زبان را در بر مي*گيرد.
    تنظیمات collation به صورت پیش فرض از تنظیمات سیستم عامل گرفته می شود. ودر صورتی که سیستم عامل شما در بخش Regional settings دارای تنظیمات لازم فارسی باشد، نیاز به تغییر در این بخش ندارید.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  3. #3
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    قبل از ادامه مبحث، به يه نكته كوچيك كه يادم رفت در پست قبليم بگم، اشاره كنم. تلفظ صحيح SQL ، بصورت سيكوئل است. اين تلفظ چيزي است كه من در فيلم*هاي آموزشي به لهجه آمريكايي شنيدم. حالا مطلب قبلي رو ادامه ميدم.

    پس از نصب SQL Server 2005 حالا ميخواهيم به سرور وصل بشيم و تغييراتي را اعمال كنيم. براي اين كار از نرم*افزاري به نام SQL Server Management Studio (كه در صورت انتخاب، همراه با سرويس SQL Server 2005 نصب مي*شود) استفاده مي*كنيم. همونطور كه قبلاً هم گفتم، وجود اين برنامه در كامپيوتر دليلي بر وجود سرويس SQL Server روي آن كامپيوتر نيست. چون مي*توان اين برنامه را بدون نصب سرويس SQL Server 2005 نصب نمود و همچنين مي*توان سرويس SQL Server 2005 را بدون نصب اين برنامه، نصب نمود.

    دسترسي به اين برنامه، از مسير زير امكان*پذير است:
    Start>All Programs>Microsoft SQL Server 2005>SQL Server Management Studio

    و يا اينكه در Command Prompt تايپ كنيد sqlwb

    كه پس از اجرا، پنجره*اي شبيه عكس زير را خواهيد ديد.


    براي وصل شدن به يك سرور بايد نام آن سرور را بدانيد. نام سرور مي*تواند به اشكال مختلف به شرح زير باشد:

    OrionComputer : كه در حقيقت نام كامپيوتر مي*باشد.

    OrionComputer\InstanceName: همانطور كه قبلاً گفتم، مي*توان در يك كامپيوتر، چند Instance از SQL Server داشت. InstanceName نام آن Instance در كامپيوتر OrionComputer ميباشد.

    172.150.12.54 : كه همان IP سرور مي*باشد.

    172.150.12.54\InstanceName : دقيقاً همانند مورد دوم است. فقط در اينجا به جاي نام كامپيوتر، IP آن را ذكر مي*كنيم.

    (Local) : براي دسترسي به كامپيوتر Local به كار مي*رود كه البته مي*توان به جاي (Local) از نقطه نيز استفاده كرد (مانند شكل فوق)

    (Local)\InstanceName : دقيقاً مانند مواردي كه در بالا ذكر شد.

    AAA : ميشه براي هر سرويس SQL Server به اصطلاح يك Alias تعريف كرد. و من در اين مثال فرض كردم Alias سرور من، AAA هست!


    پس از وارد كردن نام سرور، بايد تكليف قسمت Authentication را روشن كرد. اگر در هنگام نصب SQL Server نحوه Authentication Mode رو روي Windows Authentication گذاشته باشيد و به خودتون هم دسترسي داده باشيد، در اينجا هم Windows Authentication رو وارد كنيد و چون شناسايي شما توسط ويندوز انجام ميشه، در اينجا لازم به وارد كردن يوزرنيم و پسورد نيست. اما اگر حالت Mixed Mode رو انتخاب كرده باشيد، بايد نام كاربري و كلمه عبور را وارد كنيد. توجه داشته باشيد كه Authentication Mode رو بعد از نصب سرويس SQL Server هم ميشه بصورت دستي تغيير داد.

    حالا اگر همه چيز درست باشد، شما با كليك بر روي دكمه Connect به سرور وصل ميشيد و بسته به نوع دسترسي، مي*توانيد اطلاعات را مشاهده كرده و يا تغييراتي اعمال كنيد.

    پس از ورود به سرور از قسمت Object Browser مي*توانيد به ديتابيس*هاي موجود دسترسي پيدا كنيد. (شكل زير). البته موارد ديگري مانند Security,Server Objects,Replication و ... وجود دارند كه ما در اينجا به آن*ها اشاره نمي*كنيم.


    در شكل بالا، چهار Database وجود دارد: AdventureWorks و AdventureWorksDW و Northwind و Pubs. كه دو مورد اول از نمونه ديتابيس*هاي ورژن 2005 هستند و دو مورد دوم يعني Northwind و Pubs از نمونه ديتابيس*هاي ورژن 2000 هستند. ما در آينده و براي يادگيري، احتياج زيادي به ديتابيس Pubs داريم.

    براي ساخت يك Database جديد، روي عبارت Databases كليك راست كنيد و بر روي New Database… كليك كنيد. (شكل زير)




    سپس صفحه*اي مانند شكل زير باز مي*شود كه بايد خصوصيات ديتابيس را در آن ذكر كنيد. براي ساخت يك ديتابيس ساده تنها نياز به ذكر نام آن ديتابيس است.



    سپس بايد نوع فهرست*گذاري براي كلمات متن تعيين گردد. اگر عنوان Use Full Text Indexing فعال گردد، براي تمام كلمات ايندكس ساخته خواهد شد و در زمان جستجوي كلمات، به سرعت متني كه داراي آن كلمه باشد، پيدا شده و ارائه مي*گردد. بديهي است بايد در اين حالت برخي دستورات، متناسب با اين حالت تغيير يابد. مثلاً اگر در حالت عادي دستور جستجوي كلمه "Test" بدين شرح باشد:

    کد PHP:
       SELECT FROM authors WHERE address LIKE '%Test%' 

    در حالت فعال بودن Full Text Indexing، بايد دستور فوق بصورت زير نوشته شود:

    کد PHP:
       SELECT FROM authors WHERE CONTAINS(address,'*Test*'

    هر ديتابيس حداقل داراي دو نوع فايل به نام*هاي زير مي*باشد:
    - Master Data File يا همان فايل mdf كه در حقيقت فايل اطلاعات اصلي ديتابيس است.
    - Log Data File يا همان فايل ldf كه در حقيقت فايل History دستورات است.

    در زمان تعريف هر يك از فايل*ها مي*توان از طريق Initial Size مقدار اوليه حجم فايل را تخمين زد. معمولاً مي*گويند سايز اوليه Logfile برابر 35 درصد فايل mdf باشد كه البته با توجه به نوع ديتابيس ميتواند متفاوت باشد.
    در قسمت AutoGrowth مي*توان مقدار افزايش حجم فايل را پس از رسيدن به حداكثر حجم تعريف شده، تعيين كرد. ضمناً در همين قسمت مي*توان حداكثر حجم مجاز فايل را تعيين كرده و يا اينكه حداكثر حجم مجاز را نامحدود تعريف نمود.

    پس از آن مي*توان محل ذخيره كردن فايل را در قسمت Path تعيين كرد.

    براي انجام هر كاري در SQL Server يك دستور به نام T-SQL صادر و اجرا مي*شود. مثلاً در زمان ايجاد ديتابيس جديد كه از طريق منوي New Database انجام مي*شود، يك سري دستور TSQL اتوماتيك ايجاد شده و براي سرور ارسال مي*گردد. براي ديدن و يا احتمالاً اصلاح اين دستورات، ميتوانيد روي دكمه Script كه در بالاي اكثر پنجره*هاي SQL Server 2005 وجود دارد كليك كنيد. (شكل زير)



    SQL Server در هر لحظه فقط قادر به اجراي يك دستور است. پس از اجراي دستور، History آن دستور در LogFile ذخيره مي*شود. اين فايل داراي كاربردهاي زيادي است كه مختصراً به چند مورد اشاره مي*شود:
    فرض كنيد در پايان هر روز از اطلاعات Backupگيري مي*شود. ولي در وسط روز هارد ديسك با مشكل مواجه مي*شود. اگر فايلهاي Master و Log روي دو هاردديسك جداگانه نگهداري شده باشند، ميتوان ابتدا فايل اصلي را از Backup شب گذشته بازخواني كرد و سپس با كمك دستورات موجود در LogFile از زمان Backup تا كنون، نسبت به بازسازي فايل اصلي اقدام كرد.
    يكي ديگر از كاربردهاي LogFile در Replication است. مثلاً فرض كنيد بنا به دليلي لازم است دو نسخه از فايل اصلي بر روي دو سرور جداگانه در شهرهاي مختلف نگهداري شود. به روز رساني همزمان و Online فايلهاي اصلي دو سرور نياز به پهناي باند وسيعي دارد. در حالي كه ميتوان در پايان روز، تنها دستورات اجرا شده روزانه، از روي LogFile براي سرور مقابل ارسال شده و در آنجا دستورات اجرا شده و فايل اصلي بروزرساني شود. از اين روش مي*توان براي ساخت فايل Mirror در دو مكان مختلف استفاده كرد.
    بنابراين توصيه ميشه محل نگهداري فايلهاي mdf و ldf جداگانه و بر روي دو هارد ديسك جدا باشد، مگر اينكه از تكنيك Raid براي نگهداري اطلاعات استفاده شود كه توضيح آنها در سواد بنده نمي*گنجد!

    در قسمت صفحه New Database منويي به نام Option وجود دارد (شكل زير) كه بعضي از آنها را به اختصار توضيح ميدم.



    Recovery Model
    اگر حالت Simple انتخاب شود فايل Log بصورت مينيموم ثبت خواهد شد و اكثر دستورات Log نخواهند شد. در اين حالت سرعت عمليات افزايش يافته ولي در صورت خرابي اطلاعات، امكان بازيابي وجود ندارد. اگر Buck-Logged انتخاب گردد، در اين حالت از تمامي دستورات Log گرفته خواهد شد. اما در دستورات Bulk بصورت مينيموم Log گرفته مي*شود. در صورت انتخاب Full، از تمام دستورات حتي Bulkها بصورت كامل Log مي*گيرد.

    Compatibility Level
    خود SQL Server 2005 بصورت اتوماتيك فايلهاي SQL Server 2000 را به 2005 تبديل مي*كند. ولي تمام امكانات SQL Server 2005 بر روي فايلهاي تبديل شده قابل استفاده نمي*باشد. مگر اينكه در اين قسمت، حالت SQL Server 2005(90) انتخاب گردد.

    بقيه*ي موارد را مي*توانيد با زدن دكمه HELP در MSDN مطالعه كنيد.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  4. #4
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    [B]Tableها و DataTypeها[/B] [B]جدول [/B][B](Table)[/B]

    براي ساخت يك جدول بايد ابتدا Database مربوطه انتخاب شده و سپس بر روي قسمت Table كليك راست كرده و گزينه New Table انتخاب شود. (شكل زير)




    سپس در سمت راست صفحه پنجره ساخت Table ظاهر مي*شود. (شكل زير) كه من در آن سه فيلد با Datatypeهاي مختلف ساختم.





    براي ساخت جدول بايد ابتدا فيلدها يا همان ستون*هاي جدول تعريف شود. فيلد*هاي داراي DataTypeهاي مختلفي هستند كه به اختصار اونها رو توضيح ميدم:

    [B]Binary Data[/B]
    اين نوع فيلد*ها براي نگهداري اطلاعات بصورت بايناري مانند تصاوير مناسب هستند و شامل چهار نوع به شرح زير مي*باشد:

    [B]Binary[/B]
    اين نوع فيلد*ها، از 1 تا 8000 بايت را در خود جاي مي*دهند.

    [B]Var Binary[/B]
    اين نوع فيلد*ها هم از 1 تا 8000 بايت را در خود جاي مي*دهند. (متغير)

    [B]Image[/B]
    اين نوع فيلد*ها از 1 تا حداكثر 2 گيگابايت را مي*توانند ذخيره كنند. فرق اين نوع داده*ها با دو نوع قبلي اين است كه در دو نوع قبلي، اطلاعات در خود ركورد ثبت مي*شوند ولي در اين نوع داده*ها، اطلاعات در يك Page ذخيره مي*شود و به جايش در ركورد، يك پوينتر 16 بايتي ذخيره مي*شود. اين نوع فيلد*ها در SQL 10 حذف شده و به جايش بايد از VarBinary استفاده كرد.

    [B]VarBinary(Max)[/B]
    اين نوع Datatype در SQL 2005 معرفي شده و تقريباً همانند داده*هاي Image هستند.

    [B]Character Data[/B]
    اين نوع فيلد براي نگهداري عبارات و يا حروف ASCII مي*باشد. در اين نوع فيلد*ها، براي نگهداري هر حرف، يك بايت اشغال مي*شود و لذا نياز به Collation براي تعيين زبان اطلاعات مي*باشد. اين نوع فيلد*ها هم چهار نوع هستند:

    [B]Char[/B]
    اين نوع فيلد*ها، اطلاعات متني با طول ثابت از 1 تا حداكثر 8000 حرف را در خود ذخيره مي*كنند.

    [B]VarChar[/B]
    اين نوع فيلد*ها اطلاعات متني با طول متغير از 1 تا حداكثر 8000 حرف را در خود ذخيره مي*كنند. فرق بين Char و VarChar در اين است كه در Char، طول رشته ثابت است. يعني اگر يك فيلد را از نوعChar(20) معرفي كرده و در آن كلمه Orion را قرار دهيم، عين 20 حرف استفاده خواهد شد. يعني 5 كاراكتر اول را كلمه مربوطه اشغال كرده و 15 كاراكتر باقي*مانده، Blank خواهند بود. اما در VarChar اينگونه نيست.

    [B]Text[/B]
    در اين نوع داده*ها، اطلاعات از 1 تا 2 مگا حرف ذخيره مي*شود. اين نوع داده همانند Image و VarBinary(MAX)در خود ركورد ذخيره نمي*شوند. بلكه توسط يك پوينتر به جاي ديگري اشاره مي*كنند. اين نوع داده در SQL 10 حذف شده و بجاي آن*ها ازVarChar(MAX) استفاده مي*شود.

    [B]VarChar(Max)[/B]
    در اين نوع داده*ها، اطلاعات از 1 تا 2 مگا حرف ذخيره مي*شود و مكانيزم آن هم بصورت پوينتري مي*باشد.

    [B]Unicode Data[/B]

    اين نوع فيلد*ها براي نگهداري متون Unicode بوده و براي نگهداري هر حرف، از دو بايت استفاده مي*شود. پس مسلماً نسبت به نوع داده*هاي كاراكتري، حافظه بيشتري را به خود اختصاص مي*دهد و در ضمن كمي هم كندتر است. اين نوع فيلد*ها، احتياج به Collation ندارند.

    [B]nChar[/B]
    در اين نوع داده، اطلاعات از 1 تا حداكثر 4000 حرف با طول ثابت ذخيره مي*شود.

    [B]nVarChar[/B]
    در اين نوع داده، اطلاعات از 1 تا حداكثر 4000 بايت با طول متغير ذخيره مي*شود.

    [B]nText[/B]
    در اين نوع داده، از 1 تا 1 مگا حرف ذخيره مي*شود. مكانيزم آن هم بصورت Pointer مي*باشد.

    [B]nVarChar(MAX)[/B]
    در اين نوع داده از 1 تا 1 مگا حرف ذخيره مي*شود. مكانيزم آن هم بصورت Pointer مي*باشد.

    [B]Integer Data[/B]
    اين نوع فيلد براي نگهداري اعداد صحيح و بدون اعشار استفاده مي*گردد و داراي 4 نوع به شرح زير است. در ضمن اين نوع فيلد*ها رتبه يك سرعت در نوع فيلد*هاي عددي را دارد.

    [B]TinyInt[/B]
    يك بايت را اشغال مي*كند و مي*تواند از 0 تا 255 را در خود ذخيره كند.

    [B]SmallInt[/B]
    يك عدد دو بايتي است و مي*تواند از 32767 منفي تا 32767 مثبت را در خود ذخيره كند.

    Int
    يك عدد چهار بايتي است كه مي*تواند اعداد بين مثبت و منفي 2 ميليارد را در خود ذخيره كند.

    [B]BigInt[/B]
    يك عدد 8 بايتي است كه مي*تواند اعداد بين مثبت و منفي 4 ميليارد را در خود ذخيره كند.

    [B]Money Data[/B]
    اين نوع فيلد براي نگهداري اعداد غير صحيح با تعداد ارقام اعشار ثابت 4 رقمي استفاده مي*شود. اين نوع فيلد*ها، داراي رتبه دوم سرعت در بين انواع داده*ي عددي است.

    [B]SmallMoney[/B]
    يك عدد 4 بايتي است كه مي*تواند 6 رقم صحيح و 4 رقم اعشار را در خود ذخيره كند.

    [B]Money[/B]
    يك عدد 8 بايتي است كه مي*تواند 15 رقم صحيح و 4 رقم اعشار را در خود ذخيره كند.

    [B]Approximate Data[/B]
    اين نوع فيلد*ها براي نگهداري اعداد غير صحيح با تعداد ارقام اعشار متغير و يا تخمـينـي استفاده مي*شود. اين نوع داده*ها رتبه سوم سرعت در بين انواع داده*هاي عددي دارند و استفاده از آنها به دليل كندي، توصيه نمي*گردد. مگر در مواقع لزوم.

    [B]Real[/B]
    يك عدد 4 بايتي است كه اعداد بصورت تواني از 10 نگهداري مي*شوند. (تعداد اعشار مشخص نيست)

    [B]Float[/B]
    يك عدد 8 بايتي كه اعداد بصورت تواني از 10 نگهداري مي*شوند. (تعداد اعشار مشخص نيست)

    [B]Decimal[/B]
    اين نوع فيلد براي نگهداري اعداد اعشاري با تعداد اعشار مشخص استفاده مي*گردد. اين نوع فيلد*ها بسيار كند بوده و استفاده از آنها توصيه نمي*گردد. فرمت اينگونه داده*ها به شكل زير است:


    کد PHP:
    Decimal (Precision,Scale

    كه در آن Precision به معناي تعداد كل رقم*هاي عدد و Scale تعداد ارقام اعشار را مشخص مي*كند. مثلاً اگر فيلدري بصورتDeciaml(6,2) تعريف شود، حداكثر آن برابر 9999.99 مي*باشد.

    [B]Date/Time[/B]
    اين نوع فيلد*ها براي نگهداري تاريخ ميلادي و ساعت استفاده مي*شود و براي تاريخ شمسي كاربرد ندارد.

    [B]SmallDateTime[/B]
    اين نوع فيلد، 4 بايتي است و از سال 1900 تا 2079 را با دقت هزارم ثانيه ذخيره مي*كند.

    [B]DateTime[/B]
    اين نوع فيلد، 8 بايتي است و از سال 1700 تا 9999 را با دقت هزارم ثانيه ذخيره مي*كند.


    [B]Other DataTypes[/B]

    برخي از انواع فيلد*هاي خاص را در اين قسمت به اختصار توضيح ميدم:

    [B]Bit[/B]
    يك فيلد دو بيتي است و مي*تواند 0 و 1 و Null را ذخيره كند.كاربرد آن در زمان*هايي است كه دو حالت وجود داشته باشد. مانند جنسيت زن و مرد.

    [B]TimeStamp[/B]
    در اين فيلد 8 بايتي، تايم لحظه*اي اجراي دستور نگهداري مي*شود و كاربرد آن كنترل بروزرساني همزمان (Concurrency) اطلاعات توسط چند كاربر است. البته در تعداد ركوردهاي پايين به كار نمي*آيد و بيشتر زماني مورد نياز است كه تعداد ركوردها خيلي زياد باشد مثلاً 100 ميليون ركورد!

    [B]UniqueIdentifier[/B]
    اين فيلد 16 بايتي، به ما كدي Unique يا تك مي*دهد كه به اصطلاح GUID مي*گويند. يكي از كاربردهاي آن در Replication است.

    [B]SQL_Variant[/B]
    اين نوع فيلد براي نگهداري انواع داده استفاده مي*شود و نوع آن با توجه به اولين مقداري كه در آن قرار مي*گيرد تعيين خواهد شد. چون نوع و حجم فيلد مشخص نيست، لذا تنها يك اشاره*گر 16 بايتي در آن قرار گرفته و داده اصلي در فايل جداگانه نگهداري مي*شود. استفاده از اين نوع فيلد، توصيه نمي*گردد.

    *[B]Cursor[/B]
    اين فيلد مربوط به كنترل Cursor است كه در آينده توضيح ميدم.

    [B]Table[/B]
    اين نوع فيلد را هم در زمان آموزش Functionها خواهيد آموخت

    [B]XML[/B]
    اين فيلد بيشتر براي انتقال اطلاعات و دستورات تحت web استفاده مي*شود و شامل انواع MetaDataهاي مختلف است. اين فيلد در SQL 2005 معرفي گرديد.


    ادامه مبحث Tableها رو درپست بعد ياد مي*گيريد!
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  5. #5
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    در هنگام تعريف فيلد*هاي (ستون*هاي) يك جدول، صفحه*اي با عنوان Column Properties در قسمت پايين صفحه ظاهر مي*شود (شكل زير) كه از طريق اين فرم، ميشه مشخصات بيشتري از اون فيلد خاص رو تعريف كرد كه من در اينجا پر كاربرد*ترين*ها رو توضيح ميدم.


    گزينه Allow Nulls كه البته در كنار Data Type هم مي*توان آنرا تعيين كرد، مشخص مي*كند كه آيا آن فيلد خاص مي*تواند مقدار Null (يا همان هيچي!) را بپذيرد يا خير.

    يكي ديگر از اين موارد، مشخص كردن مقدار اوليه*ي فيلد مورد نظر هستش. براي اين كار در مقابل عبارت Default Value or Binding مقدار اوليه رو وارد مي*كنيد. مشخص كردن مقدار اوليه به اين درد مي*خورد كه مقدار فيلد ما مثلاً در هنگام Insert يك ركورد جديد به جدول، در صورت مشخص نبودن مقدار، Null نشود.

    اگر با بانك اطلاعاتي Access آشنا باشيد، يكي از انواع داده*ها، Auto Number بود كه در DataTypeهاي SQLServer وجود نداشت. براي پياده*سازي AutoNumber به اين صورت عمل مي*كنيم: اگر روي علامت مثبت كنار Identity Specification كليك كنيم، سه گزينه*ي ديگر نمايش داده خواهند شد. (شكل زير)


    اگر براي فيلد*هاي عددي غير اعشاري، Is Identity برابر Yes شود، در اينصورت اين فيلد بصورت اتوماتيك در هنگام درج ركورد*هاي جديد، اضافه خواهد شد. مقدار شروع در قسمت Identity Seed و ميزان افزايش در هر دفعه، در قسمت Identity Increment قرار خواهد گرفت. ضمناً براي استفاده از اين امكان، بايد در قسمت Default Value مقدار پيش*فرض تعيين نگردد و حتماً Allow Null هم نباشد.

    چنانچه فيلد از نوع Unicode مثل nchar استفاده مي*شود، بايد كد استاندارد زبان آن مشخص شود. براي اين كار كليد انتخاب Collation را زده و از دو حالت SQL Collation و Windows Collation بهتر است Windows Collation را انتخاب كرده و بعد زبان Arabic و حالت Dictionary Sort انتخاب شود (شكل زير).


    اگر ما 2 فيلد a و b از نوع int تعريف كنيم و فيلد سومي به نام c را هم تعريف كنيم و سپس بر روي دكمه مثبت Computed Column Specification كليك كنيم، ميتوانيم در قسمت Formula عبارت a+b را وارد كنيم (شكل زير). با اين كار مقدار C هميشه برابر با a+b خواهد بود. اگر گزينه Is Persisted برابر No باشد، اصلاً فضايي براي فيلد C در جدول در نظر گرفته نخواهد شد و همواره اين مقدار محاسبه مي*گردد. اما اگر Is Persisted براي Yes باشد، مقدار C در جدول ذخيره مي*شود.


    حالا براي ذخيره جدول، كافيه فرم فعلي رو ببنديد. سپس ازتون سئوال ميكنه كه آيا ميخواهيد جدول ذخيره بشه؟ و اگر شما Yes رو بزنيد، از شما اسم جدول پرسيده مي*شود. اسم جدول را وارد كرده و Ok را بزنيد.

    قبلاً هم به اين مورد اشاره كردم كه SQL براي انجام هر كاري يك دستور T-SQL را توليد و اجرا مي*كند. مثلاً براي ساخت يك جدول (يا هر چيز ديگر) مي*توان مستقيم از دستورات SQL استفاده كرد. براي اينكار در محيط Management Studio روي دكمه New Query كليك كرده (سمت چپ، بالا) و دستورات را وارد كنيد و سپس Execute را كليك كنيد.
    اما حالا كه شما جدول رو بصورت Visual ساختيد، باز هم مي*تونيد ببينيد كه خود SQLServer از چه دستوراتي براي ساخت جدول استفاده كرده. براي اين كار پس از اينكه جدول رو ذخيره كرديد، در قسمت Object Browser روي آن كليك راست كرده و مسير زير را انتخاب كنيد:

    Script Table as > CREATE to > New Query Editor Window

    پس از آن، كدي كه خود SQL Server براي ساخت جدول مورد نظر، توليد كرده را مي*توانيد ديده و يا ذخيره كنيد.

    در پست بعدي در مورد [B]Constraint[/B][B]ها[/B] صحبت خواهم كرد.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  6. #6
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    [B]محدود كننده*هاي فيلد [/B][B](Constraint)[/B]

    بايد براي بعضي از فيلد*ها، بر اساس نياز، تعاريف و محدود كننده*هاي خاصي در نظر گرفته شود كه در اين قسمت، به شرح آنها مي*پردازم.

    [B]Unique Constraint[/B]
    بعضي از فيلدها، كليد نيستند (كليدها را كمي پايين*تر توضيح ميدم)، اما بايد غير تكراري باشند. مثلاً فرض كنيد آدرس ايميل، جزو كليد نيست اما بايد Unique يا واحد باشد. براي اين كار از Unique Indexها استفاده مي*كنيم كه در درس*هاي بعدي به اونها مي*پردازم.

    [B]Default Constraint[/B]
    وقتي در هنگام ساخت جدول و تعيين نوع فيلدها، مقدار Default Value به يك فيلد بدهيم، در حقيقت داريم نوعي محدوديت اعمال مي*كنيم. محدوديت ما اين است كه اگر كاربر در هنگام درج يا به روزرساني مقدار آن فيلد را وارد نكرد، مقدار Default Value به جاي آن قرار بگيرد.

    [B]Null ability Constraint[/B]
    اگر در هنگام ساخت جدول و تعيين نوع فيلدها، مقدار Allow Null آن را غير فعال كنيم، در حقيقت به SQL Server مي*گوييم كه اين مقدار نمي*تواند مقدار Null بگيرد. پس در هنگام درج يا به روزرساني، اگر كاربر مقدار فلان فيلد خاص را وارد نكرد، جلوي انجام عمليات گرفته مي*شود.

    [B]Primary Key Constraint[/B]
    تعريف فيلد كليد اصلي، يكي از مهمترين محدوديت*ها مي*باشد. فيلد كليد، مقدار تكراري قبول نمي*كند و بيشتر براي تفكيك و جستجوي ركورد*ها مورد استفاده قرار مي*گيرد.
    براي تعريف يكي از فيلد*ها به عنوان كليد اصلي، بايد در زمان ايجاد جدول، بر روي نام فيلد كليك راست كرده و گزينه Set Primary Key زده شود. بعد از اين كار، علامت كليد در كنار فيلد مورد نظر ظاهر مي*شود. ضمناً اين امكان وجود دارد كه همزمان دو يا چند فيلد بعنوان كليد اصلي تعريف شوند. براي اينكار دقيقاً مثل وقتي كه مي*خواهيد در ويندوز دو يا چند فايل يا فولدر را انتخاب كنيد، كليد Ctrl را نگه داشته و روي فيلد*هاي مورد نظرتون كليك كنيد و سپس روي يكي از آن*ها كليك راست كرده و گزينه Set Primary Key را انتخاب كنيد.




    ضمناً توجه داشته باشيد كه فيلد كليد اصلي هيچ وقت Null نمي*پذيرد. پس ستون Allow Nulls را براي اين فيلد علامت نزنيد.

    [B]Foreign Key Constraint[/B]
    براي ارتباط بين جداول استفاده مي*شود و در اصل Relational Integrity را فراهم مي*كند. به عبارت ساده*تر، كليد خارجي همان مقدار كليد اصلي از جدول ديگر است. توجه داشته باشيد كه مقدار يك كليد خارجي ميتواند تكراري باشد. به عنوان مثال دو جدول Titles و Publishers كه يكي مشخصات كتاب*ها و ديگري مشخصات ناشران را ذخيره مي*كند را فرض كنيد. در جدول Titles (كتاب*ها) يك فيلد به نام pub_id وجود دارد كه در اصل كليد خارجي براي فيلد pub_id موجود در جدول Publishers مي*باشد. وجود اين كليد به اين خاطر است كه ما بتوانيم ناشر يك كتاب را پيدا كنيم.

    فيلد*هاي كليد خارجي، سه نوع محدوديت را ايجاد مي*كنند:
    -اجازه حذف ركوردي از جدول پدر نداريم كه فرزندي داشته باشد.
    -اجازه insert ركورد در جدول فرزند با كد پدري كه در جدول پدر موجود نيست را نداريم.
    -مقدار كليد پدري را كه داراي فرزند هست را نمي*توانيم تغيير دهيم

    براي ساختن كليد خارجي، پس از ساخت Tableها، بر روي Table فرزند و در قسمت Keys كليك راست كرده و گزينه New Foreign Key انتخاب گردد.


    سپس فرمي همانند زير ظاهر مي*شود:






    حالا قبل از اينكه مشخص كنيم، كليد خارجي ما از كدام فيلد و از كدام جدول به وجود مي*آيد، به بعضي از مواردي كه در اين فرم هست، مي*پردازم.
    اگر Enforce For Replication فعال باشد، تمام محدوديت*هايي كه بالاتر به آن*ها اشاره كردم، در زمان Replication هم رعايت خواهد شد.
    چنانچه گزينه Enforce Foreign Key Constraint فعال باشد، محدوديت جلوگيري از اضافه شدن ركورد به جدول فرزند در صورتي كه مقدار آن در جدول پدر نباشد، رعايت مي*گردد. در صورت غير فعال بودن هم، اين محدوديت به حساب نخواهد آمد.
    در قسمت INSERT and UPDATE Specification ميتوان قوانين و محدوديت*هاي حذف و اضافه و بروزرساني را تغيير داد. به عنوان مثال، Delete Rules داراي چهار حالت زير است:
    1-اگر No Action باشد، اجازه حذف ركورد پدر را در صورتي كه فرزندي از آن پدر موجود باشد، نمي*دهد.
    2-اگر Cascade باشد، در اين حالت، مي*توان ركورد پدري را حذف نمود. اما بصورت اتوماتيك تمام فرزندهاي آن هم حذف خواهند شد.
    3-اگر Set Null باشد، باز هم اجازه حذف ركورد پدر داده مي*شود، اما فيلد مرتبط در جدول فرزند، در صورتي كه داراي شرط Allow Null باشد، Null خواهد شد.
    4-اگر Set Default باشد، باز هم اجازه حذف ركورد پدر داده مي*شود. اما فيلد مرتبط در جدول فرزند، در صورتي كه مقدار Default داشته باشد، برابر مقدار پيش فرض خواهد شد.


    حالا بايد مشخص كنيم كه پدر از كدام جدول و از كدام فيلد خواهد آمد. براي اين كار بر روي دكمه كنار گزينه Tables and Columns Specification كليك كنيد. با اين كار فرمي همانند شكل زير ظاهر مي*شود:


    كه در اين مثال، بايد اطلاعات به صورت زير تكميل گردد:


    بعد از اينكه اطلاعات را تكميل گرديد، فرم*ها را ببنيد تا از شما در مورد ذخيره كردن تغييرات سئوال بپرسد. سپس روي گزينه Keys در قسمت Object Browser كليك راست كرده و گزينه Refresh را كليك كنيد تا آخرين تغييرات را براي شما نمايش دهد. اگر كارها درست پيش رفته باشد بايد كليد خارجي بصورت زير ساخته شده باشد:




    [B]Check Constraint[/B]

    كاربردش براي وقتي است كه بخواهيم براي يك فيلد، يك سري محدوديت خاص تعريف كنيم. مثلاً بگوييم فلان فيلد عددي، بايد حتماً از 10 بزرگ*تر باشد و در غير اينصورت در هنگام ورود اطلاعات، كاربر با خطا مواجه گردد.
    براي به وجود آوردن يك Check Constraint روي علامت Plus جدول مورد نظرتون كليك كنيد و روي گزينه Constraints كليك راست كرده و گزينه New Constraint را انتخاب كنيد. (شكل زير)


    سپس فرمي مانند زير باز مي*شود.





    در اينجا و در قسمت Expression، بايد عبارت محدود كننده رو وارد كنيد. مثلاً در اين مثال ميگيم كه فيلد Price بزرگتر از 10 باشه. پس بايد در قسمت Expression عبارت Price>10 رو وارد كرده و دكمه Close رو بزنيد و تمام فرم*هاي باز غير از Object Browser را ببنديد تا از ذخيره شدن تغييرات اطمينان حاصل بكنيد. حالا اگر در Object Browser، بر روي Constraints كليك راست كرده و گزينه Refresh را انتخاب كنيد، شكلي همانند زير را خواهيد ديد كه نشان دهنده*ي اين است كه Constraint ما ساخته شده است.


    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  7. #7
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    [B]ايندكس*ها - (Index) ها[/B]

    ما ميتونيم جدول*ها رو با توجه به فيلد يا فيلد*هاي كليد اصلي مرتب كنيم. ولي معمولاً براي جستجو و گزارش*گيري به جدول مرتب شده بر اساس فيلد*هاي مختلف كه ممكنه كليد هم نباشند احتياج داريم. براي اين كار از Indexها استفاده مي*كنند.

    در زمان ساخت Indexها بايد به تعريف*هاي زير توجه كرد:

    Clustered VS None Clustered Index
    چنانچه ايندكس در داخل فايل اصلي جدول ساخته بشه، بهش Clustered Index ميگن. براي هر جدول فقط ميتونيم يك عدد Clustered Index داشته باشيم. ايندكسهاي Non Clustered هم بصورت جداگانه ذخيره مي*شن. براي هر جدول ميتونيم 249 تا ايندكس از اين مدل داشته باشيم. اگر جدول ما كليد اصلي داشته باشه، بصورت اتوماتيك يك ايندكس از نوع Clustered براي فيلد(هاي) كليد ساخته مي*شود.

    Ascending/Descending
    ترتيب ايندكس*ها را ميتوان صعودي يا نزولي قرار داد. اگر نوع ترتيب مشخص نباشه، بصورت پيش فرض حالت صعودي يا Ascending در نظر گرفته مي*شود.

    Unique
    ميتوان مشخص كرد كه ايندكس Unique باشد يا خير. در صورت Unique بودن ايندكس، در حقيقت Unique Constraint هم در جدول اِعمال مي*شود.

    Single Column vs Multi Column Index
    مي*توانيم يك ايندكس رو بر اساس چند فيلد درست كنيم. اگر جدول بر اساس يك فيلد مرتب باشد، به آن Single Column ميگن و اگر بر اساس چند فيلد باشه، Multi Column ميگن.


    براي ساخت يك ايندكس، ابتدا در قسمت Object Browser و در جدول مورد نظر، به قسمت Indexes بريد. سپس روي گزينه Indexes كليك راست كرده و گزينه New Index را انتخاب كنيد.


    پنجره*اي مانند شكل زير نمايش داده خواهد شد.


    در اين صفحه حداقل بايد نام ايندكس، نوع آن و اينكه بر روي كدام فيلد يا فيلد*ها ساخته مي*شود، مشخص شود. نوع ايندكس مي*تواند Clustered يا Nonclustered و يا Primary XML باشد. پس از آن مي*توان غير تكراري بودن ايندكس را با تيك زدن گزينه Unique تعريف كرد. در ادامه با زدن دكمه Add فيلد يا فيلد*هاي ايندكس را مشخص مي*كنيم. در صورتي كه ايندكس ما از چند فيلد تشكيل شده باشد، مي*توانيم ترتيب آنها را با كليد*هاي Move Up و Move Down مشخص كنيم.

    [B]برخي موارد موجود در قسمت [/B][B]Option[/B][B]:[/B]

    Ignore Duplicate Values: تنها در صورتي اين آيتم قابل انتخاب شدن است كه ايندكس ما Unique باشد. فرض كنيد بخواهيد تعدادي ركورد را بصورت Bulk به ديتابيس اضافه كنيم. اگر اين گزينه غير فعال باشد، سيستم با مشاهده اولين ركورد تكراري، عمليات را متوقف كرده و پيغام خطا مي*دهد. اما اگر اين گزينه فعال باشد، از ثبت ركورد تكراري جلوگيري شده ولي عمليات متوقف نشده و مابقي ركوردها به ديتابيس اضافه مي*شوند.

    Automatically Recomputed Statistics: هر دستوري كه در براي SQL ارسال مي*شود، يك نرم*افزار به نام Optimizer روش اجراي دستور را با توجه به آمار و اطلاعات موجود، تحليل و بررسي كرده و سپس يك Execution Plan براي SQL Server ارسال مي*كند. چنانچه اين ويژگي فعال باشد، SQL Server در زمان ساخت ايندكس، آمار و اطلاعات مورد نياز Optimizer را خواهد ساخت و در غير اينصورت بايد بصورت دستي، آمار مورد نظر ساخته شود.

    Use row lock when accessing the index: در صورت انتخاب اين گزينه، در زمان ساخت ايندكس، تنها همان ركوردي كه در حال استفاده براي ايندكس سازي است، قفل مي*شود و كاربران اجازه كار با ساير ركوردها را دارند.

    User page lock when accessing the index: مانند قسمت قبل اگر اين ويژگي فعال باشد، تنها همان Page كه ايندكس در حال كار با آن است قفل شده و كاربران مي*توانند با ساير Pageها كار كنند.
    در صورتي كه هيچ كدام از دو گزينه فوق انتخاب نشوند، Table Lock انجام مي*شود.

    Set Fill Factor: يك مقدار درصدي مي*باشد. اگر 100 باشد، Pageهاي جدول كاملاً پر مي*شوند. بنابراين احتمال بروز Page Split در Table افزايش مي*يابد كه باعث كند شدن عمليات insert و update و افزايش سرعت select مي*شود. اما اگر مثلاً 1 باشد، بيشترين فضاي خالي كه توسط SQL محاسبه مي*شود به Pageهاي Table اختصاص داده مي*شود و احتمال بروز Page Split كاهش مي*يابد و سرعت insert و update افزايش يافته، اما چون داده*ها در Pageهاي بيشتري ذخيره مي*شوند، سرعت جستجو كم مي*شود. در دو زمان بهتر است كه اين مقدار برابر با 100 باشد: يكي زماني كه اطلاعات ما فقط خواندني باشند يعني فقط زماني كه از اطلاعات گزارش*گيري كنيم و ديگر زماني كه كليد اصلي ما AutoIncrement باشد.

    [B]Include Columns[/B]
    طول فيلد*هاي شركت كننده در ايندكس حداكثر مي*تواند 900 بايت باشد. پس اگر دو فيلد از نوع char به طول 500 داشته باشيم، نمي*توانيم ايندكسي رو روي اين دو فيلد بسازيم. پس مجبوريم فيلد*هاي مازاد رو با روش ديگري به ايندكس اضافه كنيم. با انتخاب اين گزينه، صفحه*اي براي تعريف كليد*هاي خارج از محدوده ايندكس ظاهر خواهد شد.



    [B]عمليات*هاي مربوط به [/B][B]Index[/B]
    اگر بر روي يك ايندكس كليك راست بكنيم، منويي مانند شكل زير ظاهر مي*شود:



    Rebuild: اين گزينه براي ساخت مجدد ايندكس و حذف فضاهاي خالي و سازماندهي مجدد ايندكس به كار مي*رود. در صورت بالا بودن آمار تغييرات جدول، استفاده از اين امكان هر چند روز توصيه مي*شود.

    Reorganize: اين آيتم، ايندكس را از نو نمي*سازد ولي تا حد امكان فضاهاي خالي را از بين برده و ايندكس را نسبتاً سازماندهي مي*كند. اين روش نسبت به روش قبل از سرعت بالاتري برخوردار است.

    Disable: براي غير فعال كردن ايندكس به كار مي*رود.


    [B]نكته:[/B]

    معمولاً دو نوع سيستم داريم:
    -سيستم*هاي OLTP: در اين نوع سيستم*ها، تراكنش*هاي زيادي انجام مي*شود. منظور از تراكنش، عمليات Update,Delete,Insert مي*باشد. در اين نوع سيستم*ها هرچه تعداد ايندكس*ها بيشتر باشد، كارايي و سرعت كاهش خواهد يافت. چون بايد به ازاي هر تراكنش، ايندكس*ها هم تغيير پيدا كنند.
    -سيستم*هاي OLAP: در اين سيستمها، عمليات گزارشگيري بيشتر است و تراكنش كم انجام مي*شود و يا اصلاً انجام نمي*شود. در اين سيستم*ها افزايش تعداد ايندكس*ها باعث افزايش سرعت و كارايي مي*شود.
    بعضي از سيستم*ها هم تركيبي هستند كه بايد در انتخاب نوع و تعداد ايندكسها تعادل برقرار شود.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  8. #8
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    [B]اين ديتابيس Pubs اصلاً چيه؟![/B] خب اول يه كمي با ديتابيس Pubs آشنا بشيم و ببينيم كه اصلاً چي هست. همونطور كه گفتم اين ديتابيس يكي از ديتابيس*هاي نمونه ارائه شده در SQL 2000 هستش و چون مثال خوبيه من از اين ديتابيس براي ادامه مباحث استفاده مي*كنم.
    اين ديتابيس يك ديتابيس ساده جهت نگهداري اطلاعات كتاب*ها، نويسندگان، ناشران و ... مي*باشد
    دياگرام زير، جدول*هاي اصلي اين ديتابيس و رابطه*هاي بين آن*ها را نمايش مي*دهد.








    [B]جدول Publishers[/B]
    در اين جدول مشخصات ناشرين كتاب*ها ذخيره مي*شود. كليد اصلي آن Pub_id مي*باشد و فيلدهاي Pub_name و City و State و Country به ترتيب نام ناشر، شهر ناشر، ايالت ناشر و كشور ناشر را نشان مي*دهد. اين جدول يك ارتباط يك به چند با جدول Titles دارد.

    [B]جدول Titles[/B]
    در اين جدول مشخصات كتاب*ها نگهداري مي*شود. كليد اصلي آن Title_id مي*باشد و فيلد*هايي كه ما با آنها سر و كار خواهيم داشت عبارتند از title و type و pub_id و price كه به ترتيب، نام كتاب، نوع كتاب، شماره ناشر و قيمت كتاب مي*باشد.

    [B]جدول Stores[/B]
    اين جدول مشخصات كتاب*فروشي*ها را دربر دارد. به دليل اينكه يك كتاب*فروشي ارتباطش با جدول Titles يك ارتباط چند به چند است، پس مي*بايست يك جدول واسط براي آنها در نظر گرفت كه اين جدول واسط همان جدول Sales است.

    [B]جدول Sales[/B]
    اين جدول، اطلاعات فروش كتاب*ها را در بر مي*گيرد. كليد اصلي آن متشكل شده از كليد اصلي جدول titles و جدول Stores و يك فيلد ديگر به نام ord_num است كه همان شماره سفارش مي*باشد. ديگر فيلد* مورد نظر ما qty است كه تعداد كتاب فروخته شده در هر فروش را نشان مي*دهد.

    [B]جدول Authors[/B]
    در اين جدول اطلاعات نويسندگان ذخيره مي*شود. كليد اصلي آن au_id مي*باشد و ديگر فيلدهاي آن هم از روي نامشان مشخص هستند.

    [B]جدول TitleAuthor[/B]
    به دليل اينكه جدول Author با جدول Titles يك ارتباط چند به چند دارد، (يعني يك نويسنده مي*تواند يك يا چند كتاب نوشته باشد و يك كتاب مي*تواند حاصل كار يك يا چند نويسنده باشد) مي**بايست يك جدول واسط براي آنها در نظر بگيريم كه جدول TitleAuthor همين جدول واسط است و كليد اصلي خود را از دو جدول Titles و Authors ميگيرد.


    خب از پست بعدي SELECT رو شروع ميكنم...
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  9. #9
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    [B]دستور [/B][B]SELECT[/B]

    فرم كلي دستور select بصورت زير هستش:

    کد:

    کد PHP:
    [SELECT field_1[,field_n]  FROM table_1   [INNER [or LEFT or RIGHT or FULL or CROSS]  JOIN ON table_2]  [WHERE condition]   [GROUP BY field_1 [,field_n]]   [HAVING condition]  [ORDER BY field_1 [, field_n]] 
    [

    اين دستور فقط خروجي برمي*گرداند كه مي*تواند صفر، يك و يا چند ركورد، را برگرداند.
    من براي نمونه*ها و مثال*ها از ديتابيس Pubs كه قبلاً در موردش صحبت كردم، استفاده مي*كنم.
    حالا به موارد زير توجه كنيد:

    SELECT * FROM titles


    اين دستور، تمامي فيلدها و ركوردهاي موجود در جدول titles را نمايش خواهد داد.

    =======================



    SELECT
    title,price FROM titles


    اين دستور، نام و قيمت تمام كتاب*هاي موجود در جدول titles را نمايش خواهد داد.

    =======================



    SELECT titles.title,titles.price FROM titles


    نتيجه اين دستور، نتيجه*ي همون دستور قبليه. اما گاهي وقت*ها پيش مياد كه نام فيلد*هايي از دو جدول متفاوت يكي باشند. اينجوري ما فيلد رو متمايز ميكنيم و وقتي ميگيم titles.price يعني فيلد price از جدول titles

    =======================



    SELECT title AS Field1 ,price AS Field2 FROM titles


    نتيجه*ي اجراي اين دستور هم مثل دستور بالاست. منتها ما اينجا براي هر فيلد، يك Alias تعريف كرديم. يعني در خروجي اين دستور ديگه خبري از title و price نيست. بلكه عناوين Field1 و Field2 جايگزين آنها شدند.

    =======================



    SELECT * FROM titles WHERE price>10


    اين دستور، تمامي كتاب*هايي كه قيمتشون از 10 بيشتر هست رو ليست ميكنه.

    =======================



    SELECT * FROM titles WHERE price>10 AND type='Psychology'


    اين دستور، تمامي كتاب*هاي روان*شناسي كه داراي قيمت بالاي 10 (دلار) هستند، را نمايش مي*دهد.

    =======================



    SELECT * FROM titles WHERE price BETWEEN 10 AND 20


    اين دستور تمامي كتاب*هايي كه قيمت آن*ها بين 10 و 20 دلار باشند را ليست مي*كند. البته مي*توان به جاي عملگر between از تركيب عملگرهاي بزرگتر و كوچكتر هم استفاده كرد.

    =======================


    SELECT * FROM titles ORDER BY price


    اين دستور، تمامي كتاب*ها رو بر اساس قيمت ليست مي*كند. البته بصورت پيش*فرض، بصورت صعودي (از كوچك به بزرگ) مرتب مي*كنه. اگر خودمون بخواهيم مشخص كنيم كه نحوه مرتب كردن صعودي باشد يا نزولي بايد از ASC يا DESC استفاده كرد.
    يعني اگر دستور بالا رو بصورت زير بنويسيم، ركوردها بصورت صعودي بر اساس فيلد قيمت مرتب ميشن:

    SELECT * FROM titles ORDER BY price ASC


    اما اگر بخوايم نزولي مرتب بشن، بايد دستور رو به شكل زير تغيير بديم:

    SELECT * FROM titles ORDER BY price DESC



    خب. يه چيز جالب اينه كه شما الان نميدونيد اين دستورها رو بايد كجا وارد كنيد! پس بذاريد قبل از ادامه*ي مبحث، يه توضيحي در اين مورد بدم.
    وقتي وارد محيط Management Studio ميشيد، بالا سمت چپ دكمه*اي به نام New Query وجود داره كه بايد اون رو كليك كنيد. (شكل زير)




    نكته*ي مهم بعدي اينه كه بايد ديتابيس مورد نظرمون رو مشخص كنيم. در همون ابتدا معمولاً ديتابيس master بصورت انتخاب شده هست و اگر به همين صورت دستورات بالا رو وارد كنيد با خطا مواجه ميشيد. پس شما بايد در اينجا ديتابيس Pubs رو انتخاب كنيد. (شكل زير)




    حالا ميتونيد از محيطي كه در اختيارتون گذاشته شده استفاده كرده و دستورات خودتون رو وارد كنيد. (شكل زير)




    براي اجراي دستورات بايد از دكمه Execute يا كليد F5 استفاده كنيد. وقتي دستور را اجرا مي*كنيد، نتيجه دستور در قسمت پايين دستور به نمايش در خواهند آمد. (شكل زير)







    فعلاً همين*ها رو تمرين كنيد تا آموزش هاي بعد!
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  10. #10
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,589
    759
    432
    [B]Join يا پيوند چيست؟![/B]

    در بسياري از مواقع مجبور هستيم که اطلاعات خود را از بيش از يک جدول استخراج کنيم . در اين حالت ما ابتدا بايد جدول هايی که می خواهيم اطلاعات را از آنها استخراج کنيم ، با هم پيوند دهيم . هدف از ايجاد اين ارتباط، تلفيق اطلاعات در جدول*ها است .
    برای پيوند دادن جدول ها ابتدا بايد چند مفهوم زير را بشناسيم كه البته قبلاً بصورت ضمني به اونها اشاره شده :

    1. کليد اصلی : فيلد کليد اصلی در يک جدول ، فيلدی است که شرايط زير را داشته باشد :
      1. مقدار آن برای هر نمونه رکورد ( سطر ) منحصر به فرد و غير تکراری باشد . به عبارت ديگرهيچ 2 رکوردی در يک جدول در اين فيلد مقدار يکسان نداشته باشد . کليد اصلی وجه تمايز دو نمونه رکورد مختلف در يک جدول است .
      2. طول مقادير آن حدامکان کوتاه باشد .


    مثال : فيلد Title_ID در جدول Titles کليد اصلیست . هيچ دو كتابي نمی توانند دارای Title_IDيکسان باشند .

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


    برای ارتباط بين جدول ها بايد شرط های زير برقرار باشد . بايد قبل از طراحی پايگاه داده و جدول های آن، موارد زير را جهت ارتباط جدول های مورد نظر رعايت کرد .

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


    براي مثال ، دو جدول زير رو در نظر بگيريد.


    [B]INNER JOIN[/B][B]:[/B]
    یک INNER JOIN رکوردهای مختلفی را از جداول متفاوت با یکدیگر ادغام میکند و این عمل را از طریق تست کردن مقادیر فیلدهایی انجام میدهد که در جداول مورد نظر عمومیت دارند. ساده ترین فرم INNER JOIN بشکل زیر است :

    SELECT fieldName1, fieldName2,
    FROM table1 INNER JOIN table2
    ON table1.fieldName = table2.fieldName

    که در آن قسمت بعد از عبارت ON، فیلدهایی را نشان میدهد از دو جدول با یکدیگر مقایسه میشوند تا معین شود چه رکوردهایی با یکدیگر ادغام میشوند. برای مثال، دستور زير، را در نظر بگيريد:

    SELECT * FROM
    tbl_user INNER JOIN tbl_info
    ON tbl_user.userid = tbl_info.userid

    اين دستور دو جدول tbl_user و tbl_info را در يكديگر ادغام كرده و نتيجه به شكل زير خواهد شد. در اين مثال ركوردهايي در خروجي مي*آيند كه مقدار فيلد userid در هر دو جدول سابقه داشته باشد. خروجي دستور فوق به شكل زير است:



    [B]Left Join[/B][B]:[/B]

    اين دستور نيز مشابه قبلي عمل مي*كند. با اين تفاوت كه اگر ركوردي در جدول tbl_user وجود داشته باشد ولي در جدول tbl_info سابقه نداشته باشد، اين ركورد نيز نشان داده مي*شود ولي فيلد*هاي مشابه از جدول tbl_info آن برابر Null خواهد بود.

    SELECT * FROM
    tbl_user LEFT JOIN tbl_info
    ON tbl_user.userid = tbl_info.userid

    كه نتيجه*ي اجراي آن به شكل زير خواهد بود:



    [B]Right Join[/B][B]:[/B]

    مانند Left Join است منتها بر عكس آن. يعني اگر ركوردي در جدول tbl_info وجود داشته باشد ولي در جدول tbl_user سابقه نداشته باشد، اين ركورد نيز نشان داده مي*شود ولي فيلد*هاي مشابه از جدول tbl_user آن برابر Null خواهد بود.
    SELECT * FROM
    tbl_user RIGHT JOIN tbl_info
    ON tbl_user.userid = tbl_info.userid

    كه نتيجه*ي آن به شكل زير است:


    [B]Full Join[/B][B]:[/B]

    اين دستور تمام ركوردهاي دو جدول tbl_user و tbl_info را در هم ادغام كرده و در صورتي كه هر كدام از جدول*ها در جدول ديگر سابقه نداشته باشد، فيلدهاي آن را Null نشان مي*دهد.
    SELECT * FROM
    tbl_user FULL JOIN tbl_info
    ON tbl_user.userid = tbl_info.userid

    نتيجه اجراي آن به شكل زير است:



    [B]Cross Join[/B][B]:[/B]

    نتیجه این Join تمام ترکیباتی است که از قرار گرفتن هر سطر از جدول اولیدر کنار تمام سطرهای جدول دومی بدست می آید(همانند حاصلضرب دکارتی).
    SELECT * FROM
    tbl_user CROSS JOIN tbl_info

    نتيجه*ي اجراي آن به شكل زير خواهد بود:



    حالا چند تا تمرين خودتون حل كنيد!
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ: 1
    آخرين نوشته: 2014-02-22, 07:58 PM
  2. آموزش آموزش تصويري ساخت Table در SQL Server
    توسط MspSoft در انجمن SQL Server
    پاسخ: 0
    آخرين نوشته: 2012-12-06, 10:27 AM
  3. پاسخ: 0
    آخرين نوشته: 2012-04-12, 07:45 PM
  4. پاسخ: 0
    آخرين نوشته: 2012-01-29, 11:39 PM
  5. پاسخ: 0
    آخرين نوشته: 2011-11-18, 10:59 AM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

Content Relevant URLs by vBSEO 3.6.0 RC 2