ارسال پاسخ 
 
امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
بررسی پایگاه داده SQL Server و دستورات آن
05-18-2016, 09:06 PM
ارسال: #1
بررسی پایگاه داده SQL Server و دستورات آن
مروري بر SQL
تاريخچه SQL از لابراتوار IBM در سان خوزه كاليفرنيا شروع مي‌شود. جايي كه SQL در اواخر دهه 1970 ميلادي شكل گرفت.
كلمه SQL برگرفته از حروف اول كلمات Structuted Query Language ساخته شده و اغلب اوقات اشاره به 'sequel' مي‌‍‌كند.
اين زبان ابتدا براي محصول DB2 شركت IBM (يك سيستم مديريت پايگاه داده‌اي رابطه‌اي يا RDBMS كه امروزه نيز براي بعضي محيط‌ها فروخته مي‌شود، طراحي شد.)
در واقع SQL امكان RDBMS را فراهم مي‌آورد. SQL يك زبان غير روالمند مي‌باشد، بر خلاف زبان‌هاي روانمند يا زبان‌هاي نسل سوم (3 GLs) مثل كوبول و C كه در آن زمانها ايجاد شده بودند.
تذكر ـ غير روانمند يعني چه به جاي چگونه، بطور مثــال SQL مي‌گويد كه داده‌ها بايد ذخيره، حذف، اضافه يا بازيابي شوند بدون آنكه به چگونگي انجام آنها كاري داشته باشد.
ويژگي مهمي كه باعث تفاوت بين DBMS و RDBMS مي‌گردد، آن است كه يك RDBMS از يك زبان مبتني بر مجموعه‌ها استفاده مي‌كند. در اكثر RDBMS ها اين زبان، زبان SQL است. در نتيجه SQL زبان مبتني بر مجموعه‌ها است.
SQL، يك زبان كامپيوتري مبتني بر استاندارد (American National Standards Institute) ANSI براي بازيابي و بروز رساني داده‌ها در يك پايگاه داده‌اي مي‌باشد و با برنامه‌هاي پايگاه داده‌هايي مانند MS Access ، DB2 ، MS SQL Server ، Oracle، Sybase و ... كار مي‌كند.
از طريق SQL، يك برنامه نويس يا گرداننده داده‌ها مي‌تواند كارهاي زير را انجام دهد:
 تغيير ساختار يك پايگاه داده‌اي
 تغيير مشخصات امنيتي سيستم
 امكان اعطاي اجازه دسترسي كاربران به پايگاه داده‌اي يا جداول
 پرس و جو از يك پايگاه داده‌اي
استفاده از SQL و پايگاه داده‌اي رابطه‌اي نيز از مهمترين اقدامات انجام شده در جهت توسعه كاربرد Client/Server مي‌باشد.
SQL بطور كلي شامل دو گروه از جملات مي‌باشد:
1- جملات پردازش داده‌ها (DML)
2- جملات تعريف داده‌ها (DDL)

جملات پردازش داده‌ها (DML) شامل عبارات زير مي‌باشند:
کد:
 INSERT
 DELETE
 UPDATE

مهمترين عبارات DDL در SQL نيز عبارتند از:
کد:
 CREATE TABLE
 ALTER TABLE
 DROP TABLE
 CREATE INDEX
 DROP INDEX
 CREATE VIEW
 DROP VIEW
در بخش‌هاي بعد بطور كامل‌تر اين دستورات توضيح داده خواهند شد.

دستور SELECT
قاعده نگارش را با دستور SELECT شروع مي‌كنيم زيرا اكثر جملات با SELECT شروع مي‌شوند. اين دستور كه دستوري مستقل نيست و حتما بايد با اجزايي بكار رود، جهت ساخت پرس و جو بر روي بانك اطلاعاتي بكار مي‌رود و ركوردهايي را كه با شرايط اين دستور همخوان باشد، به عنوان نتيجه پرس و جو برمي‌گرداند.
توجه ـ هرگاه SELECT استفاده مي‌‍شود حتما بايد از شبه جملات FROM نيز استفاده شود.

انتخاب تمام ستون‌ها:
کد:
SELECT * FROM  table_name

انتخاب ستون‌هاي خاص:
کد:
SELECT column_name(s)
FROM   table_name
تذكر ـ در بعضي از نرم‌افزارهاي SQL علامت سميكولن (Wink در انتهاي جمله به مفسر مي‌گويد كه پرس و جو تمام شده است. به عنوان مثــال SQL*plus اوراكل، پرس و جويي را اجرا نمي‌كند تا زمانيكه يك سميكلون (يا يك اسلش (/)) را پيدا نكند. در حالي كه بعضي ديگر از نرم افزارهاي SQL از سميكلون به عنوان انتهاي يك جمله SQL استفاده نمي‌كنند. به عنوان مثــال پرس و جو در مايكروسافت نيازي به تمام كننده ندارد زيرا پرس و جو در جعبه ويرايش تايپ مي‌شود و وقتي دكمه‌اي را فشار دهيم اجرا مي‌گردد.
پرس و جو با استفاده از DISTINCT
برخي اوقات در جداول بعضي از اقلام داده‌اي تكرار مي‌شون. اگر آنچه نياز داريم آن است كه بدانيم چه مقادير متفاوتي در يك ستون وجود دارند، از دستور زير استفاده مي‌كنيم:
کد:
SELECT DISTINCT column_name(s)
FROM table_name
اين جمله اقلام داده‌اي تكراري در ستون مورد نظر را حذف مي‌كند. به عبارت ديگر DISTINC باعث محدود شدن نتايج خروجي مي‌شود به شكلي كه داده‌هاي تكراري در جواب ظاهر نمي‌شوند.

عبارات
يك عبارت يك مقدار را برمي‌گرداند. از نقطه نظر نوع داده، عبارت انواع متفاوتي دارد مثل رشته، عدد و بولين. در واقع هر چيزي پس از شبه جمله (بطور مثــال SELECT يا FROM) بيانگر يك عبارت است. در مثــال زير amount يك عبارت است كه مقدار ستون omount را بر مي‌گرداند:
کد:
SELECT amount FROM  checks

شرايط
اگر بخشي از اقلام يا گروهي از اقلام را در پايگاه اطلاعاتي بخواهيم، به يك يا چند شرط احتياج دارد. شرايط در داخل شبه جمله WHERE مي‌آيند.
شرايط' امكان پرس و جوهاي انتخابي‌تر را مي‌دهند. در متداول‌ترين فرم آنها، شرايط از يك متغير، يك مقدار ثابت و يك عملگر مقايسه‌اي تشكيل مي‌‍شوند.
قاعده نگارش شبه جمله WHERE :
کد:
SELECT   column_name(s)
FROM    table_name
WHERE   condition

عملگرها
عملگرها عناصري هستند كه براي بيان چگونگي شرايط مورد نظر جهت استخراج داده‌ها در داخل يك عبارت استفاده مي‌شوند. عملگردها به 6 گروه تقسيم مي‌شوند: رياضي، مقايسه‌اي، كاراكتري، منطقي، مجموعه‌اي و متفرقه.
• عملگرهاي رياضي
عملگردهاي رياضي عبارتند از: جمع (+)، تفريق (-)، ضرب (*)، تقسيم (/) و باقيمانده صحيح (% يا MOD).
• عملگردهاي مقايسه‌اي
عملگرهاي مقايسه‌اي، عبارات را مقايسه نموده و يكي از اين سه مقدار را بر مي‌گردانند: صحيح (True)، غلط (False) يا ناشناخته (Unknown).
در فرهنگ اصطلاحات پايگاه داده‌ها، هيچ (NULL) به معناي عدم حضور داده در يك فيلد است. اما بدين مفهوم نيست كه فيلد داراي مقدار صفر يا بلانك (blank) است. صفر يا بلانك يك مقدار است در حاليكه هيچ يعني آن فيلد چيزي ندارد.
اگر مقايسه‌اي مثل field=9 را انجام دهيم و بدانيم تنها مقدار قابل قبول براي آن فيلد هيچ است، آنگاه نتيجه مقايسه ناشناخته است. چون ناشناخته يك شرط نامناسب است، نسخه‌هاي مختلف SQL ، مقدار ناشناخته را با مقدار غلط جايگزين مي‌نمايند و عملگر خاص IS NULL را براي آزمايش شرط NULL ارائه مي‌دهند.
عملگرهاي مقايسه‌اي عبارتند از: مساوي (=)، بزرگتر از (> ) ، بزرگتر يا مساوي با (=>)، كوچكتر از (<)، كوچكتر يا مساوي با (=<) و نامساوي (= ! يا < >).
توجه ـ براي پيدا كردن مقادير فيلدهاي كاراكتري بايد از علامت كوتيشن در طرفين مقدار مورد نظر استفاده شود. فيلدهاي عددي نيازي به استفاده از علامت كوتيشن ندارند.
تذكرـ گرچه قاعده نگارش SQL به حروف بزرگ و كوچك حساس نيست، اما داده‌ها آن حساس مي‌باشند. اكثر شركت‌ها ترجيح مي‌دهند كه اطلاعات را به شكل حروف كوچك ذخيره كنند تا بدين وسيله جامعيت داده‌ها را تأمين نمايند. پيشنهاد مي‌شود كه همه داده‌ها يا بصورت حروف بزرگ و يا بصورت حروف كوچك ذخيره شوند. تركيب حروف بزرگ و كوچك احتمالا موجب بروز مشكلاتي در بازاريابي دقيق داده‌ها خواهد شد.
توجه ـ حروف بزرگ معمولا قبل از حروف كوچك ذخيره مي‌شوند (ارزش كاراكتري حروف بزرگ كمتر از حروف كوچك است).
• عملگردهاي كاركتري
از عملگردهاي كاراكتري براي پردازش رشته‌هاي كاراكتري استفاده مي‌شود (هم در خروجي داده‌ها و هم به منظور گذاشتن شرطي روي داده‌هايي كه بايد بازيابي گردند.)
 عملگر LIKE
گاهي اوقات مي‌خواهيم بخشي از اطلاعات پايگاه داده‌ها را كه داراي الگوي خاصي است ولي كاملا يك داده خاص را نمي‌پوشاند، انتخاب و بازيابي نماييم. يك روش طولاني و خسته كننده آن است كه الگوي مورد نظر را در حالات مختلف ممكن در سرتاسر پايگاه داده‌ها به همراه علامت = استفاده كنيم. راه حل بعدي استفاده از LIKE است.
کد:
SELECT  coumn_name FROM  table_name
WHERE  column_name   LIKE  pattern
مثــال/
کد:
SELECT * FROM customers
WHERE LastName LIKE 'S%'
با استفاده از عبارت فوق، ركورد تمام مشترياني كه نام خانوادگي آنها با حرف S شروع مي‌شود به عنوان خروجي، برگردانده خواهد شد.
تذكر ـ از علامت % مي‌توان در ابتدا، انتها و يا در هر دو طرف الگو (pattern) استفاده كرد.
اگر بخواهيم داده‌هايي را پيدا كنيم كه يك يا چند كاراكتر از آن را در اختيار داريم، بايد از نوع ديگري از wildcard، يعني underscore (_ ) استفاده كنيم.
مثــال/
کد:
SELECT * FROM friends
Where phone LIKE '223_5_8_'
همچنين مي‌توان از تركيب اين دو Wildcard نيز استفاده كرد.

مثــال/

کد:
SELECT * FROM customers
WHERE LastName LIKE '_b% '
با استفاده از اين مثــال تمام ركوردهايي كه دومين كاراكتر نام خانوادگي آنها b است، پيدا مي‌شوند.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
05-19-2016, 12:09 AM (آخرین ویرایش در این ارسال: 05-19-2016 12:18 AM، توسط ali.)
ارسال: #2
بررسی پایگاه داده SQL Server و دستورات آن بخش دوم
 عملگر «: عملگر» (لوله مضاعف) دو رشته را به هم متصل مي‌كنند.
تذكر ـ بعضي از نسخه‌هاي SQL جهت اتصال از علامت جمع استفاده مي‌كنند.
• عملگرهاي منطقي
عملگرهاي منطقي، دو يا چند شرط را در شبه جمله WHERE از يك جمله SQL جدا مي‌كنند.
 عمگر AND : دو عبارت منطقي را تركيب مي‌كند. بايد هر دو شرط داده شده در طرفين AND صحيح باشند تا نتيجه AND صحيح گردد. اگر يكي از شروط در طرفين AND غلط باشد، نتيجه AND غلط مي‌گردد.
کد:
SELECT column_name(s)
FROM table_name
WHERE conditionl AND condition
 عملگر OR : از OR براي ارتباط شروط استفاده مي‌شود. كافي است كه يكي از شرط‌هاي دو سمت OR صحيح باشد تا نتيجه OR صحيح گردد و در صورتي نتيجه OR غلط است كه هر دو شرط دو سمت OR غلط باشند.
کد:
SELECT column_name(s)
FROM  table_name
WHERE conditionl OR condition2
 عملگر NOT : شرط داده شده را منفي مي‌كند. به عبارتديگر اگر شرط داده شده قبل از NOT غلط باشد، بعد از اعمال NOT صحيح مي‌شود و بالعكس.
NOT همچنين مي‌تواند با عملگر IS زمانيكه از NULL استفاده مي‌كنيم، همراه شود.
• عملگرهاي مجموعه‌اي
 عملگرهاي UNION و UNION ALL :
UNION، اجتماع دو مجموعه پرس و جو را بدون تكرار برمي‌گرداند.
UNION ALL نيز شبيه UNION مي‌باشد بجز آنكه تكراري‌ها را حذف نمي‌كند.
کد:
SQL STATEMENT 1
       UNION/UNION ALL
SQL STATEMENT 2
 عملگر INTERSECT : ركوردهايي را برمي‌گرداند كه در هر دو پرس و جو وجود داشته باشند (مشترك باشند).
کد:
SQL STATEMENT 1
    INTERSECT
SQL STATEMENT 2
 عملگر MINUS : كليه رديف‌هايي را ه در پرس و جوي اول هستند ولي در پرس و جوي دوم نيستند، برمي‌گرداند.
کد:
SQL STATEMENT 1
     MINUS
SQL STATEMENT 2
• عملگرهاي ديگر
 عملگر IN : از عملگر IN هنگامي استفاده مي‌شود كه مقدار دقيق آنچه را كه مي‌خواهيم برگردانده شود، را بدانيم.
کد:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value 1, value 2, …)

مثــال/
کد:
SELECTB  *  FROM customers
WHERE LastName IN (Hansen  /  Pettersen)
در مثــال فوق مشخصات مشترياني كه نام خانوادگي آنها Hansen و يا Pettersen مي‌باشد، برگردانده مي‌شود.
 عملگر BETWEEN … AND : عملگر BETWEEN … AND، بازده‌اي از داده‌ها را كه بين د و مقدار موردنظر قرار دارند را برمي‌گرداند. (مقادير موردنظر مي‌توانند عدد، متن و يا تاريخ باشند).
تذكر ـ نتيجه عملگر BETWEEN … AND در پايگاه داده‌هاي مختلف متفاوت است. در بعضي از پايگاه‌ داده‌ها، BETWEEN … AND تنها مقاديري را كه بين دو مقدار موردنظر قرار دارند، برمي‌گرداند. در بعضي از پايگاه داده‌ها مقاديري كه بين دو مقدار موردنظر قرار دارند و شامل آن مقادير نيز مي‌باشند، برگردانده مي‌شوند و در برخي ديگر مقادير بين دو مقدار موردنظر به همراه يكي از مقادير سمت چپ و يا سمت راست به عنوان نتيجه برگردانده مي‌شوند.

توابع
استفاده از توابع SQL اين امكان را مي‌دهد تا كارهاي خارق‌العاده‌اي مثل جمع يك ستون يا تغيير تمام كاراكترهاي يك رشته به حروف بزرگ را انجام دهيم.
توابع، بطور قابل ملاحظه‌اي توانايي‌ ما را در پردازش اطلاعاتي كه بازيابي مي‌كنيم، با استفاده از توابع اوليه SQL بالا مي‌برد.
کد:
SELECT function (column)
FROM table – name
WHERE condition
 توابع جمعي
اين توابع گاهي اوقات تحت عنوان توابع گروهي ناميده مي‌شوند. نتيجه اين توابع مقداري است كه از مقادير يك ستون حاصل مي‌شود.
توجه ـ نمي‌توان از توابع جمعي (گروهي) در شبه جمله WHERE استفاده كرد.
 COUNT : اين تابع تعداد رديف‌هايي را برمي‌گرداند كه شرايط موجود در جلوي شبه جمله WHERE را تامين مي‌كنند.
 SUN : اين تابع مجموع مقادير يك ستون عددي را برمي‌گرداند.
 AVG : تابع AVG ميانگين يك ستون را محاسبه مي‌كند.
AVG نيز مانند تابع SUN فقط براي فيلدهاي عددي بكار مي‌رود.
 MAX : اين تابع بزرگترين مقدار يك ستون را پيدا مي‌كند.
تابع MAX هم با اعداد كار مي‌كند و هم با رشته‌هاي كاراكتري.
 MIN : تابع MIN شبيه تابع MAX است با اين تفاوت كه كوچكترين مقدار يك ستون را برمي‌گرداند. اين تابع نيز هم با اعداد كار مي‌كند و هم با رشته‌هاي كاراكتري.
 VARIANCE : مربع انحراف استاندارد را نشان مي‌دهد كه عددي حياتي براي بيشتر محاسبات آماري است. اين تابع از توابعي است كه فقط با فيلدهاي عددي كار مي‌كند.
 STDDEV : اين تابع مقدار انحراف استاندارد يك ستون از اعداد را پيدا مي‌كند.
اين تابع نيز تنها با فيلدهاي عددي كار مي‌كند و وقتي با رشته كاركتري مواجه مي‌شود، يك پيغام اشتباه مي‌فرستد.

 توابع تاريخ و زمان
ما در تمدني زندگي مي‌كنيم كه توسط زمان و تاريخ اداره مي‌شود و بيشتر كاربردهاي SQL داراي توابعي براي فايق آمدن بر اين مفاهيم هستند.
تذكر ـ اين توابع از نوع داده Date استفاده مي‌كنند.
 ADD – MONTHS : اين تابع تعدادي ماه به تاريخ مشخصي اضافه مي‌كند. بطور مثــال ممكن است مطلب فوق‌العاده‌اي اتفاق افتاده باشد و پروژه‌اي براي مدت دو ماه متوقف شده باشد و حالا اگر بخواهيم برنامه‌ريزي جديدي ارائه دهيم، از اين تابع استفاده مي‌كنيم.
 LAST – DAY : اين تابع، آخرين روز يك ماه بخصوص را پيدا مي‌كند.
 MONTHS – BETWEEN : اگر بخواهيم بدانيم كه چند ماه بين ماههاي x و y قرار مي‌گيرد، از اين تابع استفاده مي‌كنيم. اين تابع به ترتيب قرار دادن ماهها حساس است بنابراين بطور مثــال مي‌توان از يك نتيجه منفي براي تعيين اينكه آيا تاريخي قبل از تاريخ ديگري اتفاق افتاده است يا نه، استفاده كرد.
 NEW – TIME : اگر بخواهيم زمان را براساس زمان منطقه‌اي تطبيق دهيم، بايد از اين تابع استفاده كنيم. در جدول صفحه بعد، زمان مناطق موردنظر كه با اين تابع قابل استفاده هستند، آورده شده است:
[تصویر:  6359925522684348140Capture.JPG]
 NEXT – DAY : اين تابع نام اولين روز هفته كه مساوي با تاريخ بخصوصي است و يا بعد از تاريخ معيني مي‌آيد را بدست مي‌آورد.
 SYSDATE : اين تابع تاريخ و زمان سيستم را برمي‌گرداند.

 توابع رياضي
بسياري از اطلاعات كه از پايگاه داده‌ها بازيابي مي‌كنيم نياز به محاسبات رياضي دارند. نمونه‌هايي از توابع رياضي عبارتند از: ABS, CEIL, DLOOR, SIN, COS, TAN, SINH, COSH, EXP, LN, LOG, MOD, POWER, SIGN, SQRT, و ...

 توابع كاراكتري
بسياري از نسخه‌هاي SQL امكان استفاده از توابع كاراكتري و رشته‌اي را فراهم مي‌آورند.
 CHR : اين تابع، كاراكتر معادل عدد داده شده در آرگومان را برمي‌گرداند. كاراكتري كه برگردانده مي‌شود بستگي به مجموعه كاراكترهاي پايگاه داده مورد استفاده (مثلاً ASCII و ...) دارد.
 CONCAT : اين تابع همان عمل عملگر || را انجام مي‌دهد. (دو رشته را به هم متصل مي‌كند).
 INITCAR : اين تابع اولين حرف يك كلمه را به حرف بزرگ و ساير حروف كلمه را به حروف كوچك تبديل مي‌كند.
 LOWER : اين تابع تمام كاراكترها را به حروف كوچك تبديل مي‌كند.
 UPPER : اين تابع عكس تابع LOWER عمل مي‌كند. (تمام كاراكترها را به حروف بزرگ تبديل مي‌كند).
 RPAD , LPAD : حداقل 2 و حداكثر 3 آرگومان رشته كاراكتري است كه عمليات روي آن انجام مي‌شود. آرگومان دوم، تعداد كاراكتري است كه بايد اضافه شود و آرگومان سوم كه اختياري نيز مي‌باشد، نشان دهنده كاراكتري است كه بايد اضافه شود. پيش فرض سومين آرگومان بلانك (blank) يا مي‌تواند يك كاراكتر تنها و يا رشته‌اي از كاراكترها باشد.
 RTRIM , LTRIM : حداقل يك و حداكثر دو آرگومان دارند. اولين آرگومان يك رشته كاراكتري است و دومين آرگومان كه اختياري نيز مي‌باشد يا يك كاراكتر است يا يك رشته كاراكتري و يا پيش فرض‌اش يك بلانك (blank) است. اگر از آرگومان دوم استفاده كنيم و بلانك نيز نباشد، توابع TRIM كاراكترها را مي‌اندازند. (حذف مي‌كنند)
 REPLACE : كاراكتري را به جاي كاركتر ديگري در يك رشته كاراكتري جايگزين مي‌كند. اين تابع سه آرگومان دارد. اولين آرگومان، رشته مورد جستجو را مشخص مي‌كند. دومين آرگومان كليد جستجو است و آخرين آرگومان، رشته جايگزين اختياري است. اگر سومين آرگومان نوشته نشود و يا بلانك (blank) درنظر گرفته شود، هر نمونه از كليد جستجو كه در داخل رشته جستجو مي‌شود، برداشته شده و به جاي آن چيزي جايگزين نمي‌گردد. اگر آرگومان سوم را داشته باشيم، اين آرگومان به جاي هر نمونه از كليد جستجو در رشته موردنظر جايگزين خواهد شد. اگر دومين آرگومان خالي باشد، رشته موردنظر بدون تغيير باقي خواهد ماند.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
05-19-2016, 12:28 AM
ارسال: #3
بررسی پایگاه داده SQL Server و دستورات آن بخش سوم
 SUBSTR : اين تابع سه آرگومان اين امكان را مي‌دهد كه قطعه‌اي از يك رشته را بتوان انتخاب نمود. اولين آرگومان، رشته موردنظر است. دومين آرگومان امكان اولين كاراكتر رشته را مشخص مي‌كند. سومين آرگومان تعداد كاراكتري را كه بايد انتخاب شود را نشان مي‌دهد. اگر در دومين آرگومان از عدد منفي استفاده كنيم، نقطه شروع با شمردن از انتها شروع مي‌شود. اگر آرگومان سوم را نداشته باشيم، باقيمانده رشته برگردانده مي‌شود.
 TRANSLATE : اين تابع سه آرگومان دارد: رشته موردنظر، رشته FROM و رشته TO. عناصر رشته موردنظر كه در رشته FROM رخ مي‌دهد، به عناصر وابسته در رشته TO تبديل مي‌شود.
 INSTR : با استفاده از اين تابع، محل وجود يك رشته كاراكتري در داخل رشته‌اي ديگر مشخص مي‌شود. اولين آرگومان، رشته موردنظر مي‌باشد. آرگومان دوم، الگوي موردنظر است. سومين و چهارمين آرگومان اعدادي هستند كه شروع جستجو و تعداد كاراكتر مورد جستجو را نشان مي‌دهد.
تذكر ـ پيش فرض سومين و چهارمين آرگومان يك است. اگر سومين آرگومان منفي باشد، شروع جستجو از انتهاي رشته انجام خواهد شد.
 LENGTH : اين تابع طول يك رشته كاراكتري را برمي‌گرداند.

 توابع تبديلي
اين توابع، راه‌هاي ساده‌اي براي تبديل يك نوع داده به نوع ديگري از داده را ارائه مي‌دهند.
 TO – CHAR : اين تابع، يك عدد را به كاراكتر تبديل مي‌كند.
توجه ـ ممكن است برخي از نسخه‌هاي SQL از اين تابع جهت تبديل ساير انواع داده به نوع كاراكتري استفاده كنند (مثل Date به كاراكتر) و يا از فرمت ديگري براي اين تابع و آرگومان‌هاي آن استفاده نمايند.
 TO – NUMBER : اين تابع يك رشته عددي را به يك عدد تبديل مي‌كند.

جملات پردازش داده‌ها
تا اين مرحله ياد گرفتيم كه چگونه داده‌ها را از پايگاه داده‌اي با استفاده از دستور SELECT بازيابي كنيم. بعد از اينكه داده‌ها بازيابي شد، آن را مي‌توانيم در يك برنامه كاربردي بكار برده و يا آن را تصحيح كنيم. جملات زير اين امكان را به ما مي‌دهند تا داده‌هاي داخل يك جدول پايگاه اطلاعاتي را پردازش كنيم:
 جمله INSERT (درج)
 جمله UPDATE (بهنگام سازي)
 جمله DELETE (حذف)
محصولاتي مثل اكسس، dBase IV يا فاكس پرو به شكل بسته نرم‌افزاري داراي ابزار مناسبي براي ورود، تصحيح و حذف ركوردهاي پايگاه داده‌اي مي‌باشند. يكي از دلايلي كه SQL جملات پردازش داده‌ها را تهيه كرده است اين است كه SQL در درجه اول به همراه برنامه‌هاي كاربردي استفاده مي‌شود و اين امكان را فراهم مي‌آورد تا با استفاده از ابزار كاربردي خود داده‌ها را تصحيح كنيد و برنامه نويس SQL نياز دارد كه داده‌ها را با استفاده از SQL به پايگاه داده‌اي برگرداند. به علاوه، بيشتر سيستم‌هاي بزرگ پايگاه داده‌ها براي اين طراحي نشده‌اند كه فقط ذهنيات طراح و برنامه‌نويس را دربرگيرند، بلكه اين سيستم‌ها براي اين طراحي شده‌اند كه در حجم بالا و در محيط‌هاي چند كاربره كار نمايند. طراحي اوليه در چنين سيستم‌هايي متكي به پرس و جوي بهينه و موتورهاي بازيابي داده‌هاست.
بيشتر سيستم‌هاي پايگاه داده‌اي رابطه‌اي ابزاري براي صدور و ورود داده‌ها تهيه كرده‌اند. اين داده‌ها معمولا به شكل يك فايل متن محدود شده‌اي ذخيره مي‌شوند. اغلب يك ساختار فايل ذخيره شده شامل اطلاعاتي درباره جدولي است كه وارد شده است. ابزاري مثل SQL * Loader در اوراكل BCP در SQL Seever، Import / Export در اكسس مايكروسافت.


درج داده‌ها با استفاده از جمله INSERT
جمله INSERT اين امكان را به ما مي‌دهد تا داده‌ها را وارد پايگاه داده‌اي كنيم. اين جمله مي‌تواند به دو جمله تقسيم شود:
کد:
INSERT … VALUES
INSERT … SELECT

در يك ركورد با استفاده از INSERT … VALUES
نحوه نگارش جمله INSERT … VALUES داده‌ها را به داخل يك جدول به شكل يك ركورد درج مي‌كند. اين جمله براي عمليات كوچكي كه درگير چند ركورد است، مناسب مي‌باشد. نحوه نگارش اين جمله به شكل زير است:
کد:
INSERT INTO table – name (column – namel, column – name2, …)
VALUES (nalue1 , value2, …)
فرمت اصلي جمله INSERT … VALUES با استفاده از ستون‌هايي كه مشخص نموده‌ايم يك ركورد به جدول اضافه مي‌كند و مقادير مربوطه را به داخل اين ستون‌ها اضافه مي‌نمايد.
در هنگام استفاده از اين جمله سه قاعده را بايد در موقع اضافه نمودن داده‌ها به جدول درنظر بگيريم:
1) بايد نوع داده مقادير بكار رفته با نوع داده فيلدهايي كه اضافه شده‌اند يكسان باشد.
2) اندازه داده‌ها بايد در قالب ستون گنجانده شوند. مثلا يك رشته 80 كاراكتري نمي‌تواند در داخل يك ستون 40 كاراكتري اضافه شود.
3) مكان داده در VALUES بايد مطابق مكان ستوني باشد كه بايد داده به آن ستون اضافه شود. (يعني اولين مقدار بايد به داخل اولين ستون و دومين مقدار به دومين ستون و ... اضافه شود).
توجه ـ در جمله INSERT، نام ستون الزامي نيست و اگر نام ستون قيد نشده باشد SQL مقادير را بر طبق شماره ستون‌هاي آنها قرار مي‌دهد. به عبارت ديگر، SQL اولين مقدار را در اولين ستون و دومين ستون را در دومين ستون و الي آخر درج مي‌كند.

کد:
INSERT INTO table – name
VALUES (value1, value2, …)
درج چندين ركورد با استفاده از جمله INSERT … SELECT :
جمله INSERT … SELECT هنگامي كاربرد دارد كه بخواهيم ركوردهاي زيادي را به يك جدول اضافه كنيم. در چنين حالتي جمله INSERT … SELECT خيلي مفيد است و اين امكان را به برنامه نويس مي‌دهد تا اطلاعاتي را از جدولي يا گروهي از جدول‌ها به داخل جدول ديگر منتقل كند.
نحوه نگارش جمله INSERT … SELECT بصورت زير است:
کد:
INSERT INTO table – name (column – namel, column – name2, …)
SELECT column – namel column – name2, …
FROM table – name
WHERE seaech – condition
در جمله INSERT … SELECT قواعد زير وجود دارد:
1) جمله SELECT نمي‌تواند رديف‌هايي از جدول را انتخاب كند كه در حال درج در آن هستيم.
2) تعداد ستون‌هاي جمله INSERT INTO بايد مساوي با تعداد ستون‌هاي برگشتي از جمله SELECT باشد.
3) نوعت داده‌ها در جمله INSERT INTO بايد مساوي با نوع داده‌هاي ستون‌هاي برگشتي از جمله SELECT باشد.
استفاده ديگر جمله INSERT … SELECT بازگرداندن جدولي است كه شما آن را حذف و يا ايجاد كرده‌ايد. (تهيه Back Up)
کد:
SELECT *
INTO new – table – name
FROM original – table – name
و يا:
کد:
INSERT INTO new – table – name
SELECT *
FROM original – table – name
حال مي‌توانيم تغييرات موردنظر را در جدول اصلي با خيالي راحت اعمال نماييم.

تغيير نوع داده‌هاي موجود با استفاده از جمله UPDATE
هدف از جمله UPDATE تغيير مقادير موجود ركوردهاست. نحوه نگارش اين جمله به شكل زير است:
کد:
UPDATE table – name
SET column – namel = new – valuel [ , column – name2 = new – value2, …]
WHERE search – condition
اين جمله شبه جمله WHERE را كنترل مي‌كند. براي تمام ركوردهاي جدول داده شده شبه جمله WHERE به مقدار TRUE ارزيابي مي‌شود و بهنگام مي‌گردد.
توجه ـ اگر شبه جمله WHERE را از جمله UPDATE حذف كنيم، تمام ركوردهاي داده شده با مقدار داده شده بهنگام مي‌شوند.

حذف اطلاعات به كمك جمله DELETE
علاوه بر اضافه كردن اطلاعات به پايگاه داده‌اي، مي‌توانيم آنها را از پايگاه اطلاعاتي حذف كنيم. نحوه نگارش حذف به شكل زير است:
کد:
DELETE FROM table – name
WHERE condition
حذف تمام سطرها:
کد:
DELETE FROM table – name
و يا:
کد:
DELETE * FROM table – name
بسته به استفاده از جمله WHERE در جمله DELETE، SQL مي‌تواند كارهاي زير را انجام دهد:
ـ يك رديف را حذف كند.
ـ چندين رديف را حذف كند.
ـ تمام رديف‌ها را حذف كند.
ـ هيچ رديفي را حذف نكند.
در اينجا به چند نكته اشاره مي‌شود. وقتي از جمله DELETE استفاده مي‌كنيم:
 جمله DELETE نمي‌تواند يك فيلد را حذف كند. (به جاي آن از UPDATE استفاده مي‌كنيم)
 جمله DELETE تمام ركورد را از يك جدول حذف مي‌كند.
توجه ـ شبه UPDATE, INSERT، حذف ركوردها از يك جدول ممكن است باعث بروز مشكلات جامعيت در داخل جداول ديگر گردد. اين مطلب مهم را وقتي در داخل يك پايگاه داده‌اي مشغول تغيير هستيم، بايد درنظر داشته باشيم.
 با استفاده از جمله DELETE فقط ركوردها حذف مي‌شوند نه جدول. (از جمله DROP TABLE براي حذف كامل جدول استفاده مي‌كنيم)
توجه ـ شبيه جمله UPDATE، اگر از شبه جمله WHERE در جمله DELETE استفاده نكنيم، تمام رديف‌هاي جدول خاص حذف خواهد شد.
ورود و صدور داده‌ها از منابع خارجي
جمله DELETE , UPDATE, INSE RT در داخل يك برنامه پايگاه اطلاعاتي بسيار مفيد هستند. اين جملات به همراه جمله SELECT به عنوان پايه‌اي براي ساير عمليات پايگاه داده‌اي به كار مي‌روند. گرچه SQL يك زبان مي‌باشد ولي راهي براي ورود و صدور داده‌ها به منابع داده‌هاي خارجي ندارد.
بطور مثــال فرض كنيد كه شركت شما ساليان سال است كه از نرم‌افزار dBase براي كاربردهاي خود استفاده مي‌كند. حال مديريت مي‌خواهد اين برنامه‌هاي كاربردي را به كلاينت/ سرور تحت اوراكل تبديل كند. متاسفانه فايل‌هاي dBase موجود شامل هزاران ركورد است كه بايد به فرمت داده‌هاي پايگاه داده‌اي اوراكل تبديل شود. قطعاً دستورات UPDATE, INSERT و DELETE بعد از اينكه پايگاه داده‌اي اوراكل شما پر شد، به شما كمك خواهند كرد، اما شما بايد 300000 ركورد را دوباره تايپ كنيد. خوشبختانه اوراكل و ساير سازندگان نرم‌افزارها ابزاري تهيه كرده‌اند كه مي‌تواند در اين امر به شما كمك كند.
تقريباً تمام سيستم‌هاي پايگاه‌هاي داده‌اي اين امكان را مي‌دهند تا با استفاده از فرمت فايل متن ASCII داده‌ها را وارد و صادر كنيم. اما زبان SQL شامل اين امر نمي‌شود و هنگامي كه يك پايگاه داده‌اي خالي داريم خوب كار نمي‌كند.
سيستم‌هاي پايگاه داده‌اي مدرن ابزار مختلفي براي پردازش داده‌ها بكار گرفته‌اند. بعضي از اين ابزار طراحان را قادر مي‌سازند تا داده‌ها را به منابع خارجي صادر يا وارد نمايند. اين امكان بخصوص وقتي اندازه پايگاه داده‌اي بزرگ يا كوچك شود، مفيد است. به عنوان مثــال Personal Oracle 8, SQL Server, MS ACCESS شامل امكانات ت زيادي هستند كه از انتقال داده‌ها بين سيستم‌هاي مختلف حمايت مي‌كنند.

شبه جملات در پرس و جوهاي SQL
در اين بخش، شبه جملات و كاربرد آنها در جمله SELECT مورد بررسي قرار مي‌گيرد.

تعيين معياري با شبه جمله WHERE
همانطور كه گفته شد WHERE باعث مي‌شود تا پرس و جوهاي ما با محدود نمودن تعداد رديف‌هاي برگردانده شده در خروجي انتخابي‌تر شوند.
استفاده تنها از FROM, SELECT، باعث مي‌شود تا ما كنترلي روي رديف‌هاي بازگشتي جدول نداشته باشيم.
AS يك عملگر انتساب اختياري است كه يك نام مستعار را به نام يك ستون و يا نام يك جدول منتسب مي‌كند.
کد:
SELECT column – name AS column – alias FROM table – name
SELECT column – name FROM table – name AS table – alias

شبه جمله STARTING WITH
اين شبه عبارت شبه LIKE عمل مي‌كند. (جستجو در داخل يك رشته)
با استفاده از اين شبه جمله، ركوردهايي كه با pattern (الگوي) موردنظر شروع شده باشند برگردانده مي‌شوند.

مثــال/
کد:
SELECT payee, amount, remarks
FROM checks
WHERE payee STARTING WITH (Ca)
با استفاده از پرس و جوي فوق كليه ركوردهايي كه با Ca شروع مي‌شوند، برگرداند خواهند شد.
شبه جمله ORDER BY
گاهي اوقات ما نياز داريم كه نتيجه پرس و جوي ما بطور مرتب شده بدست آيد. SELECT FROM نيز به ما فهرستي مي دهد كه اين فهرست مرتب شده نيست مگر اينكه كليد اوليه معرفي كرده‌ باشيم.
كلمه كليدي ORDER BY به منظور مرتب كردن نتيجه بكار برده مي‌شود. DESC در انتهاي شبه عبارت ORDER BY سطرها را براساس ترتيب نزولي مرتب مي‌كند. پيش فرض اين ترتيب، صعودي (ASC) است. به عبارت ديگر ترتيب صعودي (ASC) اختياري مي‌باشد (نتيجه قرار دادن و قرار ندادن آن يكي است)
کد:
SELECT column – name(S)
FROM table – name
ORDER BY column – name [ASC  |  DESC]

شبه جمله GROUP BY
SQL از تركيب ستون طبيعي و تابع جمعي ايراد مي‌گيرد. اين وضعيت نياز به شبه جمله GROUP BY دارد. GROUP BY تابع جمع آورده شده در جمله SELECT را براي هر گروه از ستوني كه در جلوي GROUP BY آمده است، اجرا مي‌كند. (سطرهاي هر ستون را برحسب نتيجه تابع جمعي بكار رفته شده مرتب مي‌كند) اين عمل، SQL را بطور فزاينده‌اي مفيد مي‌كند.
GROUP BY همچنين مانند ORDER BY عمل مي‌كند و در ضمن با استفاده از اين شبه جمله مي‌توان بيشتر از يك ستون را نيز گروه‌بندي كرد.
کد:
SELECT column – name l, SUM (column – name 2)
FROM table – name
GROUP BY column – name l
تذكر ـ به جاي SUM در syntax فوق مي‌توان از ديگر توابع جمعي نظير COUNT, AVG, MAX, MIN و ... نيز استفاده كرد.

شبه جمله HAVING
با استفاده از اين شبه جمله مي‌توان داده‌هاي مورد استفاده در شبه جمله FROUP BY را محدود كرد.
HAVING اين امكان را مي‌دهد كه ما از توابع جمعي در يك جمله مقايسه‌اي استفاده كنيم و در ضمن HAVING بر روي گروه اثر مي‌كند؛ در حاليكه WHERE روي رديف‌ها اثر مي‌گذارد. HAVING با توابع غير جمعي نيز كار مي‌كند.
مي‌توان بيش از يك شرط در شبه جمله HAVING بكار برد.
همچنين مي‌توان از يك تابع جمعي در شبه جمله HAVING استفاده كرد كه در جمله SELECT وجود نداشته باشد.
کد:
SELECT column – name l, SUM (column – name 2)
FROM table – name
GROUP BY column – name l
HAVING SUM (column – name 2) condition value

ايجاد و نگهداري جداول
شروع كار با جمله ايجاد پايگاه داده‌اي (CREATE DATABASE)
اولين قدم مديريت داده‌ها در هر پروژه پايگاه داده‌اي، ايجاد پايگاه داده‌ها است. اين كار يك پايگاه داده‌اي، بسته به احتياج ما و سيستم مديريت پايگاه داده‌اي كه انتخاب كرده‌ايم مي‌تواند محدوده‌اي از ساده تا پيچيده را دربرگيرد. بيشتر سيستم‌هاي مدرن امروزي اين امكان را به ما مي‌دهند تا كاملاً با استفاده از موس يك پايگاه داده‌اي بسازيم. با استفاده از اين امكان در وقت صرفه‌جويي مي‌شود.
نحوه نگارش CREATE DATABASE شبيه زير است:
کد:
CREATE DATABASE  database – name
اين نحوه نگارش از سيستمي به سيستم ديگر به طور قابل ملاحظه‌اي فرق مي‌كند. به هرحال تمام سيستم‌هاي مديريت پايگاه داده‌اي رابطه‌اي (ROBMS) خيلي قوي و مشهور از اين دستور استفاده مي‌كنند.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
05-19-2016, 12:33 AM (آخرین ویرایش در این ارسال: 05-19-2016 12:33 AM، توسط ali.)
ارسال: #4
بررسی پایگاه داده SQL Server و دستورات آن بخش چهارم
راه‌هاي ايجاد پايگاه داده‌اي
نحوه نگارش جمله CREATE DATABASE در نسخه‌هاي مختلف SQL تفاوت زيادي دارد. بسياري از SQLها از جمله CREATE DATABASE صرف‌نظر مي‌كنند و مستقيماً به سراغ جمله CREATE TABLE مي‌روند. چون قبل از اينكه جدولي ايجاد شود، ما بايد پايگاه داده‌اي ايجاد كنيم، اين بخش روي بعضي از مفاهيمي كه يك طراح هنگام ساخت يك پايگاه اطلاعاتي تكيه مي‌كند، متمركز شده است. اولين مطلبي كه بايد درنظر گرفته شود، سطح دسترسي مجاز مي‌باشد. اگر از سيستم مديريت پايگاه داده‌اي رابطه‌اي (RDBMS) استفاده كنيم كه از سطح دسترسي مجاز حمايت مي‌كند، بايد مطمئن باشيم كه امكان تنظيم سطح دسترسي مجاز را داريم و يا اينكه اداره كننده سيستم به ما اجازه CREATE DATABASE را اعطا كرده است. براي اطلاعات بيشتر راجع به اين موضوع بايد به مستندات RDBMS خود مراجعه كنيم. بيشتر RDBMDها همچنين اين امكان را به ما مي‌دهند تا يك اندازه پيش فرض براي پايگاه اطلاعاتي مشخص كنيم (معمولاً برحسب فضاي ديسك سخت (مثلاً مگابايت)). بنابراين ما نياز به دانستن اين مطلب داريم كه چگونه سيستم پايگاه داده‌اي، داده‌ها را بر روي ديسك به اندازه موردنظر ذخيره مي‌كند. مسئوليت درنظر گرفتن اين فضا نيز به عهده اداره كنندگان سيستم مي‌باشد.

طراحي پايگاه داده‌اي
طراحي يك پايگاه داده‌اي مناسب براي موفقيت سيستم كاربردي اهميت فراواني دارد. بسياري از عوامل ممكن است در طراحي پايگاه داده‌اي ما تأثير بگذارند، مثل:
 امنيت
 ميزان فضاي موجود روي ديسك
 ميزان سرعت جستجو و بازيابي پايگاه داده‌ها
 ميزان سرعت بهنگام سازي پايگاه داده‌ها
 ميزان سرعت اتصال چند جدول براي بازيابي داده‌ها
 حمايت RDBMS از جداول موقت
ميزان فضاي روي ديسك از عوامل مهم است. گرچه ممكن است فكر كنيد كه با وجود چندين گيگابايت فضا ديگر جاي نگراني براي فضاي ديسك وجود ندارد، بزرگ شدن حجم پايگاه داده‌اي عمل بازيابي را طولاني مي‌كند. اگر در طراحي ساختار جداول دقت به خرج نداده باشيم احتمال تكرار داده‌ها افزايش مي‌يابد.
اغلب ممكن است مشكل متفاوت و عكسي نيز اتفاق بيفتد. به اين ترتيب كه ممكن است ما عمل نرمال سازي را روي پايگاه داده‌اي خودمان انجام داده و جداول جديدي ايجاد كرده باشيم، اگرچه در تئوري در طراحي پايگاه داده‌اي موفق بوده‌ايم ولي در واقع براي پاسخ‌گويي از طريق پرس و جو ممكن است با مشكل زمان طولاني جهت اجرا مواجه شويم.
نگهداري پايگاه اطلاعاتي طراحي شده در اين حالت گاهي اوقات مشكل است زيرا ساختار جدول ممكن است هدف طراح را نامفهوم و گنگ نمايد. اين مطلب علت اصلي مستندسازي است، زيرا چنانچه عمل مستندسازي روي طراحي و برنامه نويسي انجام گيرد، افراد بعدي و يا كساني كه با ما كار مي‌كنند، مي‌توانند به آنچه ما در هنگام طراحي و كد كردن برنامه فكر مي‌كرديم، پي‌ببرند. در فرهنگ طراحي پايگاه داده‌ها، مستندسازي تحت عنوان فرهنگ داده‌ها يا كاتالوگ سيستم شناخته مي‌شود.

ايجاد يك فرهنگ داده‌اي (كاتالوگ سيستم)
فرهنگ داده‌اي مهمترين فرم مستندسازي طراح پايگاه داده‌اي است. اين فرهنگ وظايف زير را دارا مي‌باشد:
 شرح هدف پايگاه داده‌ها و كسي كه از آن استفاده مي‌كند.
 توضيح مشخصات پايگاه داده‌اي: روي چه دستگاهي ايجاد شده است، اندازه پيش فرض پايگاه داده‌اي يا اندازه فايل رخداد (كه براي ذخيره‌سازي اطلاعات عمليات پايگاه داده‌اي در بعضي از RDBMS استفاده مي‌شود).
 اصل برنامه‌هاي SQL براي نصب كردن و يا برداشتن نسخه SQL موردنظر: شامل مستندات استفاده شده براي ابزار واردات/ صادرات (import / export) است.
 تهيه شرح جزئيات هر جدول در داخل پايگاه داده‌ها و توضيح هدف هر جدول.
 توضيح ساختار داخلي هر جدول: شامل تمام فيلدها و نوع داده‌هاي آنها و توضيحات تمام شاخص‌ها و تمام ديدها مي‌باشد.
 اصل برنامه‌هاي SQ L براي تمام روال‌هاي ذخيره شده و تريگرها.
توضيح محدوديت‌هاي پايگاه داده‌ها شامل مقادير منحصر بفرد يا مقادير غير هيچ. مستندات همچنين بايد توضيح دهد كه آيا اين محدوديت‌هاي RDBMS اعمال مي‌شوند و يا اينكه برنامه نويس پايگاه داده‌اي بايد آنها را در داخل برنامه خود كنترل كند.
بسياري از ابزار مهندسي نرم‌افزار به كمك كامپيوتر (CASE)، نيز به طراح پايگاه داده‌اي در ايجاد اين فرهنگ داده‌ها كمك مي‌كنند. بطور مثــال اكسس داراي يك پيش بسته نرم‌افزاري به همراه ابزار شرح پايگاه داده‌اي است كه هر شيء موجود در پايگاه داده‌اي را به تفصيل شرح مي‌دهد.

ايجاد فيلدهاي كليد
پس از مستندسازي طراحي پايگاه داده‌ها، مهمترين هدف طراحي اين است كه ساختار جدول را طوري ايجاد كنيم كه هر جدول داراي يك كليد اصلي و يك كليد خارجي باشد. كليد اصلي يا اوليه بايد دو شرط زير را دربرداشته باشد:
هر ركورد در داخل جدول يكتا باشد (هيچ ركوردي در داخل جدول ستونهايش معادل ستونهاي ركورد ديگر در جدول نباشد).
براي آنكه ركوردي يكتا باشد، مقدار كليد نبايد در ركوردهاي ديگر جدول تكرار شد ه باشد. شرط دوم را درنظر بگيريد، ستوني كه داراي داده يكتا در سرتاسر جدول باشد به عنوان فيلد كليد اصلي شناخته مي‌شود. كليد اصلي مي‌تواند شامل يك يا تركيبي از چند ستون باشد. يك فيلد كليد خارجي، فيلدي است كه يك جدول را به جدولي ديگر از طريق كليد اصلي يا كليد خارجي متصل مي‌كند.

جمله CREATE TABLE
قبل از آنكه جداول را با داده‌هاي واقعي پر كنيم، بايد نحوه ايجاد يك جدول را بدانيم. روند ايجاد يك جدول خيلي طولاني‌تر از ايجاد يك جمله CREATE TABLE مي‌باشد. جداول به سطرها و ستون‌ها تقسيم مي‌شوند. هر سطر يك بخش از داده‌ها را نمايش مي‌دهد و هر ستون را مي‌توان نماينده يك جز از آن بخش از داده‌ها درنظر گرفت.
معمولاً داده‌ها قالب‌ها (formها)ي متنوعي دارند. به عنوان مثــال مي‌توانند يك عدد صحيح، يك عدد حقيقي، يك رشته، يك عبارت تاريخ/ زمان (مانند 2002 – JAN – 25 03:22:50) و يا حتي در قالب باينري باشند.
وقتي كه ما يك جدول را تعريف مي‌كنيم، احتياج به تعيين نوع داده مربوط به هر سطر داريم. پايگاه داده‌اي‌هاي مختلف اجازه استفاده از نوع داده‌هاي مختلف را مي‌دهند. بنابراين بهتر است قبل از استفاده از اين جمله مستندات مربوطه را كنترل كنيم.
توجه ـ مي‌توانيم نام‌هاي تكراري براي جداول در شماها يا كاربران مختلف داشته باشيم ولي نام جداول در يك شما بايد منحصر بفرد باشند. نام يك فيلد نيز مي‌تواند در داخل پايگاه داده‌ها تكراري باشد ولي محدوديتي كه در اينجا وجود دارد آن است كه نام فيلد در داخل يك جدول يكتا است.

نحوه نگارش پايه‌اي براي جمله CREATE TABLE:
کد:
CREATE TABLE table - name
(
column – name l datatype,
column – name 2 datatype,
……..
)
مثــال/
کد:
Create table bills (
Name char (30) ,
Amount NUMBER)
اين جمله يك جدول به نام Bills ايجاد كرده و در داخل يك جدول فيلدهاي Amount, Name و Account – ID قرار مي‌گيرند. نوع فيلد Name كاراكتري است و تا 30 رشته كاراكتري را مي‌پذيرد. فيلدهاي Account – ID , Amount نيز فقط مقادير عددي قبول مي‌كنند.
جمله ALTER TABLE
گاهي اوقات در طراحي پايگاه داده‌ها همه چيز را درنظر نمي‌گيريم. همچنين نيازهاي كاربردي و پايگاه داده‌اي همواره در حال تغيير است. جمله ALTER TABLE اداره كننده پايگاه داده‌ها يا طراح را قادر مي‌سازد تا ساختار يك جدول را پس از ايجاد، تغيير دهد.
جمله ALTER TABLE يك مشخصه قوي در SQL است كه ما را قادر مي‌سازد تا بتوانيم ساختار يك جدول را پس از آنكه ايجاد شد، تغيير دهيم. بدون دستور ALTER TABLE هرگاه بخواهيم ساختار آن را تغيير دهيم، مجبور به حذف جدول و دوباره ساختن آن مي‌باشيم. در اين بخش به دو مشخصه اصلي دستور ALTER TABLE پرداخته مي‌شود:
1ـ اضافه كردن ستوني به يك جدول موجود
2ـ تغيير يك ستون كه هم اكنون وجود دارد
نحوه نگارش ALTER TABLE به شكل زير است:
کد:
ALTER TABLE table – name
ADD column – name data – type  |  MODIFY column – name data – type
توجه ـ مي‌توانيم طول ستون را افزايش يا كاهش دهيم ولي اگر اندازه يكي از مقادير اين ستون بزرگ‌تر از مقداري باشد كه مي‌خواهيم براي اين ستون معين كنيم، نمي‌توانيم طول يك ستون را كاهش دهيم.
در هنگام استفاده از دستور ALTER محدوديت‌هاي زير وجود دارند:
ـ ما از اين جمله نمي‌توانيم جهت اضافه نمودن يا حذف فيلدهايي به پايگاه داده‌اي استفاده كنيم.
ـ اين دستور مي‌تواند ستوني را از NOT NULL به NULL تغيير دهيد.
ـ مشخصات يك ستون مي‌تواند از NULL بهNOT NULL تغيير كند. فقط اگر ستون مربوطه شامل مقادير NULL نباشد.
براي تغيير يك ستون NOT NULL به NULL از نحوه نگارش زير استفاده مي‌شود:
کد:
ALTER TABLE table – name MODIFY (column – name data – type NULL)
براي تغيير ستوني از NULL به NOT NULL، بايد مراحل زير را انجام داد:
1ـ تعيين اينكه آيا ستوني داراي مقادير NULL است.
2ـ مقادير NULL موجود را با حذف ركورد يا وارد كردن مقدار مناسب در آن از بين ببريم.
3ـ دستور ALTER TABLE را اجرا كنيم.
توجه ـ بعضي از سيستم‌هاي مديريت پايگاه داده‌ها امكان استفاده از شبه جمله MODIFY را مي‌دهند. بعضي ديگر شبه جملات ديگري را به جمله ALTER TABLE اضافه نموده‌اند. در Oracle 8، ما مي‌توانيم حتي پارامترهاي ذخيره‌سازي جدول را تغيير دهيم. بنابراين در هنگام استفاده از اين جمله بايد مستندات مربوطه را كنترل كنيم.

جمله DROP TABLE
SQL داراي دستوري براي حذف كامل جدول از يك پايگاه داده‌اي است. دستور DROP TABLE يك جدول را به همراه تمام محدوديت‌ها و شاخص‌هايش حذف مي‌كند. وقتي اين دستور صادر شد، راه بازگشتي وجود ندارد. متداول‌ترين نحوه استفاده از جمله DROP TABLE هنگامي است كه ما مي‌خواهيم يك جدول موقتي ايجاد شده را حذف كنيم. نحوه نگارش جمله DROP TABLE به شكل زير است:
DROP TABLE table – name

جمله DROP DATABASE
بعضي سيستم‌هاي مديريت پايگاه داده‌اي همچنين از جمله DROP DATABASE استفاده مي‌كنند كه همان كاربرد جمله DROP TABLE را دارد. نحوه نگارش اين جمله به شكل زير است:
کد:
DROP DATABASE database – name
ايجاد شاخص‌ها بر روي جداول جهت بهبود اجرا
شاخص‌ها امكان دسترسي‌ ما را به داده‌ها از مسير كوتاه‌تر فراهم مي‌سازند. يك شاخص راهي است جهت ارائه داده‌ها به شكلي متفاوت از آنچه آنها روي ديسك ظاهر مي‌شوند. نوع خاصي از شاخص‌ها مكان فيزيكي ركورد را در داخل يك جدول دوباره مرتب مي‌كند. شاخص‌ها مي‌توانند روي يك ستون جدول يا تركيبي از ستونها ساخته شوند. وقتي يك شاخص به كار گرفته مي‌شود، داده‌ها به شكل مرتب شده ارائه مي‌شوند. اين كار را مي‌توان با استفاده از جمله CREATE INDEX انجام داد. معمولاً مي‌توانيم با استفاده از شاخص بندي روي فيلدها، در ذخيره‌ها و بازيابي اطلاعات سرعت بالايي داشته باشيم.

استفاده از شاخص‌ها
علاوه بر ديدها، راه ديگري براي نمايش داده‌ها به فرمتي كه داده‌ها به شكل فيزيكي روي ديسك ذخيره شوند، استفاده از يك شاخص است. اضافه بر آن، شاخص‌ها همچنين مي‌توانند داده‌هاي ذخيره شده را روي ديسك (بعضي اوقات ديدها نمي‌توانند اين كار را انجام دهند) مرتب كنند. شاخص‌ها در يك پايگاه داده‌اي SQL به سه دليل اصلي زير استفاده مي‌شوند:
 براي اعمال محدوديت‌هاي جامعيت ارجاعي توسط استفاده از كلمات كليدي UNIQU يا PRIMARY KEY
 براي ساده‌سازي عمل مرتب نمودن داده‌ها بسته به محتويات فيلد يا فيلدهاي شاخص
 براي بهينه‌سازي سرعت اجراي پرس و جوها
شاخص‌ها چه هستند؟
داده‌ها مي‌توانند با استفاده از دو روش از داخل پايگاه داده‌اي استخراج شوند. اولين روش غالباً به نام روش دسترسي ترتيبي ناميده مي‌شود. در اين روش SQL هر ركورد را براي تطبيق بررسي مي‌كند. (جستجوي ركوردها به شكل پي‌درپي) اين روش جستجو كارا نمي‌باشد ولي تنها راهي است كه SQL ركورد صحيح را پيدا مي‌كند.
اضافه كردن شاخص‌ها به پايگاه داده‌اي اين امكان را به SQL مي‌دهد تا از روش دسترسي مستقيم استفاده كند. SQL از ساختاري درخت براي ذخيره و بازيابي داده‌هاي شاخص استفاده مي‌كند. اشاره‌گرهايي كه به گروهي از داده‌ها اشاره مي‌كنند در راس درخت ذخيره مي‌شوند. اين گروه گره‌ها ناميده مي‌شوند. هر گره به گره‌هاي ديگر اشاره مي‌كند. گره‌هايي كه به گره‌هاي سمت چپ اشاره مي‌كنند شامل مقاديري كمتر از گره پدرشان است. گره‌هايي كه به گره‌هاي سمت راست اشاره مي‌كنند مقاديرشان از مقدار گره پدر بيشتر است. اوراكل اين نوع شاخص را يك شاخص B-Tree مي‌نامد.
سيستم پايگاه داده‌اي جستجوي خودش را از بالاترين گره شروع مي‌كند و اشاره‌گرها را دنبال مي‌كند تا موفق به پيدا كردن گره موردنظر شود.
توجه ـ نتيجه يك پرس و جو براي يك جدول غير شاخص شده معمولاً به جستجوي كامل جدول اشاره مي‌كند. جستجوي كامل جدول جرياني است كه توسط سرور پايگاه داده‌اي براي جستجوي هر رديف جدول استفاده مي‌شود تا وقتي تمام رديف‌هاي جدول تحت شرايط داده شده برگشت داده شدند. در صورتيكه يك شاخص اين امكان را مي‌دهد تا سرور پايگاه داده‌اي به رديف خاصي از داده‌ها در داخل يك جدول سريعاً اشاره كند.
نحوه نگارش اصلي SQL براي ايجاد شاخص شبيه زير است:
کد:
CEATE INDEX index – name
   ON table – name (column – name l, [column – name 2], …)
همانگونه كه بارها ديديم، نحوه نگارش CEATE INDEX مي‌تواند در سيستم‌هاي مختلف پايگاه داده‌اي فرق داشته باشد.
جمله CEATE INDEX يك شاخص را از پايگاه داده‌اي برمي‌دارد. مثل هميشه، جمله CEATE INDEX در نسخه‌هاي مختلف تفاوت دارد.
تذكر ـ وقتي جدولي حذف مي‌شود، تمام شاخص‌هاي وابسته به آن نيز حذف مي‌گردند.

نكات شاخص‌بندي
فهرست زير چندين نكات را در هنگام استفاده از شاخص‌ها متذكر مي‌شود:
 براي جداول كوچك، شاخص‌ها هيچ اثري در بهبود اجراي پايگاه داده‌اي ندارند.
 شاخص‌ها بهترين اثر را خواهند داشت اگر ستون‌هايي كه شاخص مي‌شوند داراي يك طيف وسيعي از داده باشند.
 شاخص‌ها مي‌توانند پرس و جوي‌ ما را بهينه نمايند وقتي جواب پرس و جوها يك مقدار كمي داده باشد (مثلاً كمتر از 25% داده‌ها). اگر حجم زيادي از داده‌ها در يك زمان برگردانده مي‌شود، شاخص‌هاي نوع داده سربار محسوب مي‌شوند و عملاً كارايي ندارند.
 شاخص‌ها مي‌توانند نرخ بازيابي داده‌ها را بهبود بخشند. به هرحال آنها بهنگام سازي داده‌ها را كند مي‌كنند.
 هميشه روي فيلدهايي شاخص‌بندي را انجام دهيم كه در عمل اتصال بين جداول استفاده مي‌شوند. اين روش به طرز قابل ملاحظه‌اي سرعت اتصال را بالا مي‌برد.
 اكثر سيستم‌هاي پايگاه داده‌اي امكان ايجاد شاخصي روي يك ديد را به ما نمي‌دهند. اگر سيستم پايگاه داده‌اي اين اجازه را مي‌دهد، از شبه جمله GROUP BY به همراه جمله SELECT استفاده كنيم تا ديدي براي مرتب‌سازي داده‌هاي آن ديد ايجاد كند (متأسفانه بسياري از سيستم‌ها قادر نيستند از شبه جمله ORDER BY به همراه جمله CREATE VIEW استفاده كنند.
 روي فيلدهايي كه مرتباً در حال بهنگام شدن يا تغييرند شاخص ايجاد نكنيم.
 شاخص‌ها و جداول را روي يك درايو فيزيكي ذخيره نكنيم. جداسازي اين اشيا رقابت بين درايو را حذف كرده و در نتيجه پرس و جوها سريعتر خواهد شد.
 شاخص‌ها نبايد روي فيلدهايي بنا شوند كه شامل تعداد زيادي مقدار NULL هستند.
شاخص‌بندي روي بيشتر از يك فيلد
SQL همچنين اين امكان را مي‌دهد كه روي بيشتر از يك فيلد شاخص ايجاد نماييم. اين نوع شاخص يك شاخص مركب ناميده مي‌شود.

استفاده از كلمه‌ كليدي UNIQUE به همراه CEATE INDEX
شاخص‌هاي مركب اغلب به همراه كلمه كليدي UNIQUE براي جلوگيري از تكرار ركوردها استفاده مي‌شوند.
توجه ـ چنانچه كليد اصلي براي يك جدول مشخص شده باشد، شاخص‌ها تلويحاً توسط پايگاه داده‌اي ايجاد مي‌گردند. زيرا مي‌دانيم كه هر مقدار از داخل كليد اصلي بايد يكتا باشد. محدوديت كليد اصلي و يكتايي هر دو باعث مي‌شوند كه سيستم، شاخص ايجاد نمايد.

شاخص‌ها و اتصال‌ها
هنگام استفاده از اتصالهاي پيچيده در پرس و جوها، جمله SELECT مي‌تواند وقت زيادي مصرف كند. اگر جداول بزرگ باشند اين مقدار وقت ممكن است به چندين ثانيه برسد. اين نوع اجرا در يك محيط كلاينت سرور كه تعداد زيادي كاربر در آن واحد در حال كار كردن مي‌باشند ممكن است مدت‌هاي زيادي كاربران را در حالت انتظار بگذارد. ايجاد يك شاخص روي فيلدهايي كه اغلب اوقات در اتصال‌ها استفاده مي‌شوند مي‌تواند اجراي پرس و جوي شما را به طرز قابل ملاحظه‌اي بهبود بخشد، به هر حال اگر تعداد زيادي شاخص ايجاد شوند، به جاي بالا بردن سرعت مي‌توانند اجراي سيستم را پايين آورند.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
05-19-2016, 01:14 AM
ارسال: #5
بررسی پایگاه داده SQL Server و دستورات آن بخش پنجم
ايجاد ديدها یا View د SQL Server
معرفي ديد

يك ديد اغلب به يك جدول مجازي اشاره مي‌كند و اين به آن معني است كه يك ديد شبيه جدول است و شبيه به يك جدول به آن مراجعه مي‌شود. به هرحال، ديدها شامل داده‌هايي مثل جداول نيستند. تنها رسانه موردنياز براي يك ديد، رسانه‌اي براي نگهداري تعريف ديد است. يك ديد به وسيله يك پرس و جو روي يك يا چند جدول پايگاه داده‌اي تعريف مي‌شود. يك ديد چيزي جز يك پرس و جوي از قبل تعريف شده نيست. ديدها به وسيله جمله CREATE VIEN ايجاد مي‌شوند.
بعد از اينكه ديد ايجاد شد، مي‌توانيم از دستورات SQL زير براي مراجعه به آن ديد استفاده كنيم:
 SELECT
 INSERT
 UPDATE
 DELETE

كاربرد ديدها
ما مي‌توانيم از ديدها يا جداول مجازي براي پرس و جوهاي پيچيده استفاده كنيم. بعد از آنكه يك ديد يا مجموعه‌اي از داده‌ها ايجاد شدند، مي‌توانيم از آن ديد همانند يك جدول استفاده نماييم. به هرحال محدوديت‌هاي خاصي براي تغيير داده‌ها در داخل ديدها ممكن است بوجود آيد. وقتي داده‌اي در يك جدول تغيير مي‌كند، ديدهاي ايجاد شده نيز تغيير مي‌نمايند البته بايد توجه داشته باشيم كه ديدها در پايگاه داده‌اي همانند جدول فضاي فيزيكي اشغال نمي‌كنند.
نحوه نگارش جمله CREATE VIEW به شكل زير است:
کد:
CREATE VIEW view – name [(column l, column 2, …)] AS
SELECT column – name(s)
FROM taqble – name
WHERE vondition
تذكر ـ اگر بلافاصله پس از جمله CREATE VIEW (قبل از كلمه كليدي AS) مستقيماً فهرستي از ستون‌ها را مشخص نكنيم، نام ستون‌ها در ديد همان نام ستون‌هاي انتخاب شده جدول پايه خواهد بود.

تغيير نام ستون‌ها
ديدها نحوه ارائه داده‌ها را آسان مي‌كنند. به علاوه با معرفي يك ديد با استفاده از جمله create view اين امكان به ما داده مي‌شود تا ستونهاي انتخابي را تغيير نام دهيم.
پردازش ديد در SQL ديدها مي‌توانند داده‌هاي جداول را به شكلي خيلي راحت‌تر از آنچه در ساختار جدول پايگاه داده‌اي وجود دارد، ارائه دهند. وقتي چندين پرس و جوي پيچيده را پشت‌سر هم اجرا مي‌كنيم، ديدها مي‌توانند بي‌نهايت كار را ساده نمايند.

محدوديت‌هاي استفاده از SELECT
SQL محدوديت‌هاي مشخصي را در هنگام استفاده از جمله SELECT براي ساختن يك ديد قرار مي‌دهد. قوائد زير هنگام استفاده از جمله SELECT بكار گرفته مي‌شوند:
 از عملگر UNION نمي‌توانيم استفاده كنيم.
 از شبه جمله ORDER نمي‌توانيم استفاده كنيم اما مي‌توانيم از شبه جمله GROUP BY در يك ديد استفاده نماييم تا وظايف مشابه شبه جمله ORDER BY را اجرا كنيم.

تغيير داده‌ها در يك ديد
همانگونه كه گفته شد، با ايجاد يك ديد با استفاده از يك يا چند جدول فيزيكي در يك پايگاه داده‌اي، مي‌توانيم يك جدول مجازي بسازيم، تا از دستورات SQL يا يك برنامه كاربردي پايگاه داده‌اي استفاده كنيم. بعد از اينكه يك ديد توسط جمله CREATE VIEW … SELECT ايجاد شد، مي‌توانيم با استفاده از دستورات پردازش داده‌ها مثل DELETE, INSERT, UPDATE اعمال بهنگام سازي، درج و حذف داده‌ها را روي ديد انجام دهيم.

مشكلات تغيير داده‌ها با استفاده از ديدها
در زير فهرستي از محدوديت‌هاي متداول كه در هنگام كار با ديدها با آن مواجه هستيم آورده شده است:
ـ نمي‌توانيم از جملات DELETE در ديدهاي چندين جدول استفاده كنيم.
ـ نمي‌توانيم از جمله INSERT استفاده كنيم مگر آنكه تمام ستون‌هاي NOT NULL استفاده شده در جدول اصلي در ديد نيز باشند. اين محدوديت مورد اجرا گذاشته مي‌شود زيرا پردازنده SQL نمي‌داند كه چه مقاديري را به داخل ستونهاي NOT NULL درج كند.
ـ اگر ركوردهايي را از طريق يك ديد اتصالي درج يا بهنگام كنيم، تمام ركوردهايي كه بهنگام شده‌اند بايد متعلق به جدول فيزيكي يكساني باشند.
ـ اگر از شبه جمله DISTINCT براي ايجاد يك ديد استفاده كنيم، نمي‌توانيم ركوردها را در داخل يك ديد درج يا حذف نماييم.
ـ نمي‌توانيم يك ستون مجازي (ستوني كه نتيجه يك عبارت يا تابع است) را بهنگام كنيم.

كاربردهاي مشترك ديدها
در اينجا وظايفي كه ديدها مي‌توانند اجرا كنند، آمده است:
 تهيه امكانات امنيتي براي كاربر
 تبديل بين واحدها
 ساده كردن و ساخت پرس و جوهاي پيچيده
 خلاصه نمودن داده‌ها از چندين جدول

ايجاد امنيت با استفاده از ديدها
امروزه تمام سيستم‌هاي پايگاه‌هاي داده‌اي داراي مجموعه كاملي از امكانات امنيتي هستند. كاربران سيستم پايگاه داده‌اي معمولاً بسته به راهي كه آنها از پايگاه داده‌اي استفاده مي‌كنند به گروه‌هايي تقسيم مي‌شوند.
معمولي‌ترين نوع اين گروهها اداره كنندگان پايگاه داده‌اي، طراحان پايگاه داده‌اي، اشخاص وارد كننده اطلاعات و كاربران معمولي مي‌باشند. اين گروههاي كاربران داراي درجات مختلفي از حق دسترسي به پايگاه داده‌اي مي‌باشند. اداره كننده پايگاه داده‌اي احتمالا داراي بيشترين و كامل‌ترين كنترل روي سيستم پايگاه داده‌اي است. مثل حق DELETE, INSERT, UPDATE و ALTER در پايگاه داده‌اي. كاربران عمومي ممكن است فقط امكان و حق اجراي دستور SELECT را داشته باشند و شايد بتوانند داده‌ها را از جدول خاصي انتخاب كنند. ديدها در اين حالت براي كنترل اطلاعاتي كه كاربران مي‌خواهند به آن دسترسي داشته باشند، استفاده مي‌شوند.

استفاده از ديدها براي تبديل واحدها
ديدها همچنين براي مواقعي سودمند هستند كه ما نياز داريم برخي از داده‌هاي پايگاه داده‌اي را به شكلي متفاوت از داده‌هاي جدول‌هاي اصلي نمايش دهيم. مثلاً اگر فيلد amount واقعاً براي ذخيره سازي دلار آمريكا بكار مي‌رود و نخواهيم كه كاربران كانادايي هر بار مجبور به تبديل پول‌شان از طريق محاسبه جمعم amount به پول كانادايي باشند، مي‌توانيم ديد جديدي بدين منظور ايجاد نماييم.

ساده‌سازي پرس و جوهاي پيچيده با استفاده از ديدها
ديدها همچنين در مواقعي كه نياز به اجراي چندين پرس‌وجو داريم، مفيد مي‌باشند. در اين حالت بعد از اينكه پرس‌وجوها به ديدهايي تقسيم مي‌شوند، پرس و جوي نهايي نسبتاً ساده مي‌باشد؛ همچنين مي‌توانيم از ديدهاي جداگانه در مواقعي كه لازم است دوباره استفاده كنيم.

توجه ـ هر وقت در تعريف يك ديد از توابع استفاده مي‌كنيم، بايد يك نام مستعار براي ستون انتخاب كنيم زيرا هر قلم انتخاب شده يك ستون مجازي در يك جدول مجازي خواهد شد. يك ستون در يك جدول يا يك ديد نمي‌تواند از نحوه نگارش يك تابع استفاده كند.

حذف ديدها با استفاده از جمله DROP VIEW
دستور DROP VIEW يك ديد را از پايگاه داده‌اي حذف مي‌كند. حذف ديد تأثيري در جدول يا جداولي كه اين ديد از روي آنها ساخته شده است، نمي‌گذارد. نحوه نگارش به شكل زير است:
DROP VIEW view – name
تنها چيزي را كه هنگام حذف يك ديد با استفاده از دستور DROP VIEW بايد درنظر داشته باشيم آن است كه تمام ديدهاي ديگري كه به اين ديد مراجعه مي‌كنند نامعتبر مي‌گردند.
توجه ـ يك ديد مي‌تواند حذف شود بدون آنكه جدول اصلي تغيير كند و اين مطلب به اين موضوع اشاره مي‌كند كه چرا ما به ديدها جداول مجازي مي‌گوييم.

اتصال جداول
يكي از مهم‌ترين و قوي‌ترين مشخصه‌هاي SQL، توانايي جمع كردن و پردازش داده‌ها از طريق جداول مختلف است.
جمله JOIN در SQL اين امكان را به ما مي‌دهد تا به جاي جداول بزرگ، جداول كوچك‌تر اختصاصي‌تري كه نگهداري آنها آسان‌تر از جداول بزرگ مي‌باشد، طراحي كنيم.

اتصال جدول‌ها به شرط تساوي
اين اتصال با استفاده از دستور SELECT ايجاد مي‌شود. هدف از اين اتصال، جور كردن مقادير يك ستون با مقادير ستوني قرينه از جدول ديگر مي‌باشد. همچنين مي‌توانيم خروجي را نيز از طريق گذاشتن شروط بيشتر در شبه جمله WHERE مشروط‌تر نماييم.
مثــال/
کد:
SELECT Employees. Name
FROM Employees, Orders
WHERE Employees. Employee – ID = Orders. Employee – ID
AND Orders. Product = ‘Printer’
با استفاده از مثــال فوق، كساني كه سفارش پرينتر داده‌اند، مشخص مي‌شوند.
تذكر ـ اگر دو يا چند جدول را بدون استفاده از شبه جمله WHERE انتخاب كنيم در واقع اتصال كارتزين را اجرا نموده‌ايم. اين اتصال تمام رديف‌هاي تمام جداول جلوي شبه جمله FROM را با يكديگر تركيب مي‌كند. اگر هر جدول 200 رديف داشته باشد، در جدول جواب 40000 رديف (200 * 200) خواهيم داشت. بنابراين هميشه جداول را در شبه جمله WHERE اتصال مي‌دهيم مگر اينكه واقعاً نياز به اتصال تمام رديف‌هاي انتخابي داشته باشيم.

اتصال جدول‌ها به شرط عدم تساوي
SQL امكان اتصال جدول‌ها را به شرط عدم تساوي نيز دارد. در اين حالت به جاي علامت مساوي (=) از علامت نامساوي استفاده مي‌كند.
در دنياي واقعي نيز اتصال به شرط تساوي از اتصال به شرط غير تساوي متدوال‌تر و مرسوم‌تر است ولي به هرحال ممكن است با شرايطي مواجه شويم كه كاربرد موردنظر ما نتايج بهتري را با اتصال به شرط غير تساوي ايجاد كند.

اتصال جدول‌ها با استفاده از كلمه كليدي JOIN
اتصال دروني INNER JOIN)) : يك اتصال دروني هنگامي است كه رديف‌هاي جدول‌ها با يكديگر تركيب مي‌گردند و تعدادي رديف جديد توليد مي‌كنند كه مساوي حاصل ضريب رديف‌هاي آنها مي‌باشد. همچنين اتصال دروني از اين رديف‌ها براي تعيين نتيجه شبه عبارت WHERE استفاده مي‌كند.
کد:
SELECT field l , field 2 , field 3
FROM first – table  
INNER JOIN second – table
ON first – table. Keyfield = second – table. Foreing – keyfield
اتصال بيروني (OUTER JOIN): يك اتصال بيروني، دو جدول را به طريقي ديگر گروه‌بندي مي‌كند. اين اتصال تمام رديف‌هاي داده‌اي را از يك جدول نمايش مي‌دهد حتي اگر داده‌هاي جور شده در جدول اتصالي (جدول جواب) قرار نگيرند. به عبارت ديگر در اين اتصال همه سطرهاي يك جدول با سطرهاي خاصي از جدول ديگر ادغام مي‌شوند.
در اتصال بيروني سمت راست (RIGHT OUTER JOIN)، SQL يك مجموعه كامل از داده‌هاي جدول سمت راست و در اتصال بيروني سمت چپ (LEFT OUTER JOIN)، يك مجموعه كامل از داده‌هاي جدول سمت چپ را برمي‌گرداند.

اتصال يك جدول با خودش
يك خود اتصالي، يك جدول را به خودش متصل مي‌كند كه زياد متداول نيست ولي دانستن آن مهم است. نحوه نگارش اين عمل نيز شبيه به اتصال دو جدول مي‌باشد.


كنترل جامعيت داده‌ها
معرفي محدوديت‌ها

محدوديت در يك پايگاه داده‌اي رابطه‌اي عاملي است كه توسط آن قوانيني به مجموعه داده‌هاي در حال اضافه شدن به يك ستون از يك جدول اعمال مي‌كند. در SQL انواع مختلفي از محدوديت‌ها وجود دارد.
جامعيت داده‌ها
محدوديت‌ها براي اطمينان از صحت و سازگاري داده‌ها در يك پايگاه اطلاعاتي رابطه‌اي بكار مي‌روند. جامعيت داده‌ها اطمينان از صحت و سازگاري داده‌ها در پايگاه داده‌اي است. جامعيت داده‌ها يك پايگاه اطلاعاتي رابطه‌اي را از طريق اعمال محدوديت روي جداول كنترل مي‌كند. هر وقت افراد داده‌هايي را به داخل پايگاه داده‌اي وارد مي‌كنند (داده‌ها مجبور هستند كه به نحوي وارد شوند) اشتباهات در هنگام ورود ممكن است منجر به عدم صحت اطلاعات شوند.
جامعيت داده‌ها درگير صحت ورود اطلاعات و سازگاري ذخيره سازي آنها در داخل پايگاه داده‌ها مي‌باشد. بطور مثــال شما نمي‌خواهيد كه شماره تلفن شخصي را يك اپراتور به صورت 3189222 وارد كند و اپراتور ديگري به صورت (317) 888-92.
داده‌ها بايد دقيق و صحيح باشند و به شكل سازگاري در پايگاه داده‌اي ذخيره شوند و امكان بازيابي دقيق داده از پايگاه داده‌اي فراهم آيد و نيز امكان مقايسه دقيق بين داده‌ها انجام شود.

چرا از محدوديت‌ها استفاده مي‌كنيم؟
براي پاسخ به اين سئوال، نگاهي به محتويات اصلي جامعيت داده مي‌اندازيم (صحت و سازگاري داده‌ها) و اينكه چگونه جامعيت داده‌ها را در يك پايگاه داده‌اي از طريق كاربرد محدوديت‌ها اعمال مي‌كنيم.
صحت داده‌ها درگير وضع قوانيني (محدوديت‌هايي) روي ستون‌هاي جدول هستند، طوريكه سيستم پايگاه داده‌اي فقط امكان درج داده‌هاي خاصي را در پايگاه ميسر سازد. مثلاً شما مي‌خواهيد كه فقط داده‌هاي عددي به داخل يك ستون كه حاوي نرخ ساعتي كارمندي است وارد شود و نيز مي‌خواهيد مطمئن شويد كه ستون Name مقادير الفباي عددي را قبول مي‌كند. در ضمن مطمئن شويد كه ستون State – Code شامل مقاديري باشد كه فقط دو كاراكتر را مي‌پذيرد.
دو را متفاوت براي اطمينان از صحت داده‌هاي وارده وجود دارد. اولين كاري كه انجام مي‌دهيد قرار دادن محدوديت‌هايي روي ستون‌هاي جدول خودتان است كه به اين وسيله مي‌توان نوع داده خاصي با طول معيني وارد شوند. در ستونهايي مثل Phone – Number, SSN، فقط مقادير خودشان بايد ذخيره شوند و نه علامت (ـ).
داده‌ها مي‌توانند به طريقي استخراج شوند كه شامل علامت (ـ) و ساير كاراكترهات باشند. بنابراين خروجي يك سيستم را خواناتر خواهد كرد. يك برنامه بايد داراي امكانات تصحيح باشد به شكلي كه انواع مقاديري را كه به داخل يك جدول اضافه مي‌شوند كنترل كند و يا امكان انتخاب يك مقدار از يك فهرست را براي كاربر مهيا سازد. مجموعه محدوديت‌هاي يك پايگاه داده‌اي و نيز تصحيح آن بايد اين امكان را فراهم آورد تا با تلفيق آنها با يكديگر بهترين جامعيت داده‌ها فراهم آيد.
نرمال‌سازي پايگاه داده‌اي نيز همچنين كمك موثري در سازگاري داده‌ها مي‌كند طوريكه تكرار داده‌ها در داخل پايگاه داده‌اي و در نتيجه امكان عدم صحت و سازگاري آنها كاهش مي‌يابد.
توجه ـ بدون استفاده از محدوديت‌ها، مديريت داده‌ها خيلي مشكل و گاهي غيرممكن است. مخصوصاً كار با چندين هزار يا چندين ميليون رديف پايگاه داده‌ها صرف وقت بيشتر جهت طراحي يك پايگاه داده‌اي و ايجاد محدوديت‌ها و صرف وقت كمتر در مديريت داده‌ها مي‌شود.

مروري بر انواع محدوديت‌ها
انواع محدوديت‌هايي كه مي‌توانند روي جداول پايگاه داده‌ها ايجاد شوند:
 محدوديت‌هاي NOT NULL
 محدوديت‌هاي كليد اصلي
 محدوديت‌هاي يكتايي
 محدوديت‌هاي كليد خارجي
 محدوديت‌هاي كنترل
هر كدام از اين محدوديت‌ها وظايف خود را دارند.

محدوديت‌هاي NOT NULL
وقتي جدولي را ايجاد مي‌كنيم، بايد نوع داده را براي هر ستون مشخص نماييم. وقتي نوعت داده‌اي را براي يك ستون معين كرديم، اين ستون به پايگاه داده‌اي مي‌گويد كه چه نوع داده‌اي مي‌تواند به داخل ستون يك جدول اضافه شود. انواع مختلف داده‌هاي اصلي شامل داده‌هاي كاراكتري، عددي، تاريخ و زمان مي‌باشند.
وقتي يك ستون ايجاد شد، محدوديت NOT NULL مي‌تواند براي آن ستون درنظر گرفته شود. NULL معادل يك مقدار ناشناخته يا غيرقابل اعمال است. هنگامي كه رديفي را داخل جدول درج مي‌كنيم، اگر در داخل ستوني از اين رديف مقدار قرار ندهيم، مقدار آن ستون NULL مي‌شود. اگر مقدار ستوني را با NOT NULL مشخص كرديم، بدان معني است كه مقادير NULL اجازه وارد شدن در اين ستون را ندارند. NOT NULL به اين معني است كه به آن ستون نياز داريم.
توجه ـ اگر يك ستون NOT NULL معرفي نشود، مقادير NULL اجازه وارد شدن به آن ستون را دارند.

محدوديت‌هاي كليد اصلي
كليد اصلي اصطلاحاً به كليدي گفته مي‌شود كه براي شناسايي يك يا چند ستون از يك جدول بكار مي‌رود بطوريكه آن رديف از داده‌ها را يكتا مي‌كند. گرچه كليد اصلي عموماً فقط يك ستون از جدول را شامل مي‌شود ولي ممكن است بيشتر از يك ستون به عنوان كليد اصلي درنظر گرفته شود. مثلاً كليد اصلي منطقي براي جدول Employee شماره پرسنلي آن شخص است.
هدف، داشتن يك كليد اصلي يكتا براي هر ركورد است. در اين روش تعريف كليد در اثناي ايجاد جدول شكل مي‌گيرد. كليد اصلي در اين حالت يك محدوديت ضمني ناميده مي‌شود.

محدوديت‌هاي يكتايي
محدوديت يكتايي شبيه به يك كليد اصلي است به شكلي كه مقدار هر ستون بايد منحصر بفرد باشد. هنگاميكه يك محدوديت كليد اصلي در روي ستوني قرار مي‌گيرد، مي‌توانيم محدوديت يكتايي روي ستوني ديگر قرار دهيم حتي اگر اين ستون به عنوان كليد اصلي بكار نرود.

محدوديت كليد خارجي
يك كليد خارجي ستوني در جدول فرزند است بطوريكه به يك جدول پدر اشاره مي‌كند. محدوديت كليد خارجي مكانيزم اصلي استفاده شده براي اعمال جامعيت ارجاعي بين جداول يك پايگاه داده‌اي رابطه‌اي است. ستوني كه به عنوان كليد خارجي معرفي مي‌شود، به يك ستون تعريف شده به عنوان كليد خارجي در جدولي ديگر اشاره مي‌كند.
ارتباط جدول پدر/ فرزند
اين يك ارتباط پدر/ فرزند ناميده مي‌شود. جدول پدر، جدول Emplotee-TBL است و جدول Emplotee-PAY-TBL يك جدول فرزند است.
ارتباط جدول پدر/ جدول فرزند

[تصویر:  6359925863870857800Capture.JPG]

(هر حقوق بايد با نام يك كارمند منطبق شود)
در شكل فوق ستون EMP-ID از جدول فرزند اشاره به ستون EMP-ID از جدول پدر دارد. براي آنكه يك مقدار به EMP-ID در جدول فرزند اضافه شود، حتماً بايد يك EMP-ID در جدول پدر وجود داشته باشد. به همين ترتيب، اگر يك مقدار براي EMP-ID بايد از جدول پدر حذف شود، تمام مقادير EMP-ID مربوطه نيز بايد از جدول فرزند حذف شوند. اين موضوع چگونگي كاركرد جامعيت ارجاعي را نشان مي‌دهد. همانند كليدهاي اصلي، كليد خارجي مي‌تواند از طريق دستور ALTER TABLE به جدول اضافه شود.
محدوديت‌هاي كنترل
محدوديت‌هاي كنترل ممكن است براي كنترل صحت داده‌هاي وارد شده به داخل يك ستون جدول مورد استفاده قرار گيرند. محدوديت‌هاي كنترل جهت تهيه ويرايش‌هاي انتهايي پايگاه داده‌اي بكار مي‌روند. گرچه ويرايش‌ها معمولاً در ابتداي كاربردها انجام مي‌شوند. ويرايش‌هاي عمومي مقاديري را كه مي‌توانند به داخل ستونها، اشيا و يا در داخل پايگاه داده‌اي و نيز روي كاربردهاي ويندوز وارد شوند، محدود مي‌كنند. محدوديت كنترل راهي جهت تهيه لايه محافظ ديگري براي ورود داده‌ها است.

محدوديت‌هاي مديريتي
براي اعمال محدوديت‌هاي مديريتي در يك پايگاه داده‌اي اول بايد ارتباطات بين جداول را در پايگاه داده‌اي خود بشناسيم چه وابستگي‌هايي وجود دارند؟ چه ستونهايي به ستونهاي ديگر وابسته است؟ آيا ستوني يك مقدار NULL داشته باشد يا بايد شامل داده باشد؟ آيا فهرستي از اين مقادير براي هر ستون وجود دارد؟ چگونه جداول بوسيله يك برنامه در دسترس قرار مي‌گيرند؟
بايد دقت زيادي را در مرحله طراحي پايگاه داده خود بگذاريم تا از اين ساختار خوب و بي‌عيب و درست و منطقي مطمئن باشيم. وقتيكه پايگاه داده‌اي را ايجاد كرديم مجبور هستيم كه چگونگي ارتباط بين جداول را شناسايي كنيم و مشخص نماييم چه محدوديت‌هايي در داخل پايگاه داده‌اي وجود دارند. اگر نمي‌دانيم كه چه محدوديت‌هايي در داخل پايگاه داده‌اي وجود دارند (يا احتمالاً به دليل بزرگي پايگاه داده‌اي نمي‌خواهيم)، مي‌توانيم هميشه اين اطلاعات را از داخل كاتالوگ سيستم پايگاه داده‌اي پيدا كنيم.

استفاده از ترتيب صحيح
وقتي جداولي با محدوديت‌هايي با استفاده از دستور CREATE TABLE ايجاد مي‌كنيم و يا محدوديت‌هايي با استفاده از دستور ALTER TABLE به جدولي اضافه مي‌نماييم، محدوديت‌هايي جامعيت ارجاعي بايد به طرز صحيحي مشخص شوند. مثلاً بايد قبل از آنكه كليد خارجي را تعريف كنيم، ابتدا كليد اصلي را معين كرده باشيم زيرا مي‌دانيم كليد خارجي به كليد اصلي مراجعه و اشاره مي‌كند.
علاوه‌بر اين، وقتي جدولي را با استفاده از دستور DROP TABLE حذف مي‌كنيم و يا محدوديتي را از طريق دستور ALTER TABLE DROP برمي‌داريم، بايد تمام محدوديت‌ها را به ترتيب مناسبي برداريم. بعضي از كاربردهاي SQL مثل اوراكل اين امكان را به ما مي‌دهند تا يك جدول به همراه محدوديت‌هاي وابسته را با استفاده از دستور DROP TABLE table – name CASCADE CONTRAINTS حذف كنيم ما نمي‌توانيم محدوديت كليد اصلي را از جدولي حذف كنيم وقتيكه هنوز يك كليد خارجي به اين كليد اصلي در حال اشاره كردن مي‌باشد. در واقع بايد تمام محدوديت‌هاي كليد خارجي مربوطه را قبل از حذف كليد اصلي يك جدول حذف كرده باشيم نمي‌توانيم جدولي را كه داراي كليد اصلي است، حذف كنيم. در حاليكه كليد خارجي جدول ديگري به اين كليد اصلي اشاره مي‌كند.
مفهوم مشابهي روي داده‌ها اعمال مي‌شود. نمي‌توانيم ركورد فرزندي را ايجاد كنيم مگر آنكه قبل از آن ركورد پدر را ايجاد كرده باشيم، همچنين ممكن نيست بتوانيم ركورد پدري را قبل از حذف ركوردهاي فرزند، حذف كنيم.

روش‌هاي مختلف در ايجاد محدوديت‌ها
اصولاً دو روش براي ايجاد و حذف محدوديت‌ها در جداول وجود دارد. يك راه با استفاده از تعريف محدوديت‌ها در جمله DROP TABLE مشخص مي‌شود، راه ديگر با مشخص كردن تعريف محدوديت روي يك جدول با استفاده از دستور ALTER TABLE تعيين مي‌شود. هر دو روش عالي هستند يعني از كاربران يكي را بر ديگري ترجيح مي‌دهند.
ما معمولاً تمام تعاريف محدوديت‌ها را در جمله CREATE TABLE قرار مي‌دهيم، خصوصاً براي پايگاه‌هاي داده‌اي كوچك، بعضي اوقات براي پايگاه‌هاي داده‌اي بزرگ، اول جدول را ايجاد مي‌كنيم و سپس محدوديت‌ها را روي جداول با استفاده از دستور ALTER TABLE اضافه مي‌نماييم.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
05-19-2016, 01:22 AM
ارسال: #6
بررسی پایگاه داده SQL Server و دستورات آن بخش ششم
نرمال‌سازي پايگاه داده‌ها
پايگاه داده‌اي خام

هنگامي كه شروع به طراحي يك پايگاه داده مي‌كنيم، يا اينكه آن را از يك نسخه SQL به نسخه ديگر منتقل مي‌كنيم، با حجم زيادي از داده‌ها مواجه مي‌شويم. همه داده‌ها موجود مي‌باشند ولي قابل كنترل نيستند. يك پايگاه داده‌اي كه نرمال نشده است ممكن است شامل داده‌هايي باشد كه در يك يا چند جدول مختلف به دلايلي قرار گرفته باشند. اين مطلب از نقطه‌نظر امنيت، فضاي مورد استفاده ديسك، سرعت پرس و جوها، كارايي بهنگام سازي پايگاه داده‌ها و مهم‌تر از همه جامعيت و يكپارچگي داده‌ها خوب نيست.
يك پايگاه داده‌اي قبل از عمل نرمال‌سازي، به جداول منطقي كوچك‌تر و قابل كنترل‌تر شكسته نشده است. براساس تجربيات، پايگاه‌هاي داده‌اي مي‌تواند فقط شامل يك زوج جدول باشند، هر جدول صدها ستون (يا فيلد) داده‌اي را در خود جا داده است.

طراحي پايگاه داده‌اي منطقي
هر پايگاه داده‌اي بايد با توجه به نياز كاربر طراحي شود. طراحي پايگاه داده‌اي منطقي، همچنين به مدل منطقي اشاره مي‌كند يعني پردازش داده‌ها مرتب شده به صورت منطقي و سازماندهي آنها به گروه‌هايي كه مي‌توانند به سادگي نگهداري شوند و توسط كاربران نهايي مورد استفاده قرار گيرند. طراحي منطقي يك پايگاه داده‌اي بايد تكرار داده‌ها را كاهش دهد يا حتي كاملاً از بين ببرد. به هر حال، چرا يك داده را دوباره ذخيره مي‌كنيم؟
طراحي پايگاه داده‌اي منطقي اولين مرحله و قدم در بكارگيري و پياده‌سازي يك پايگاه داده‌اي فيزيكي نيست، بلكه اولين قدم تهيه محيط يك پايگاه داده‌اي است بطوري كه ساختار و محدوديت‌هاي فيزيكي براي كاربران روشن باشد.

[تصویر:  6359925908804779500Capture.JPG]

نيازهاي كاربر نهايي چيست؟
نيازهاي كاربران نهايي بايد در صدر فهرست ملاحظات در هنگام طراحي يك پايگاه داده‌اي باشد. بايد توجه شود كه كاربران نهايي مردمي هستند كه سرانجام از پايگاه داده‌اي استفاده مي‌كنند و ورود اطلاعات از طريق همين كاربران انجام مي‌شود، در نتيجه در طراحي پايگاه داده‌اي اين موضوع بايد درنظر گرفته شود.
برنامه‌اي كه آنها بتوانند از طريق آن به پايگاه داده‌اي دستيابي پيدا كنند، بايد ساده باشد ضمن آن كه اجراي مناسب نيز درنظر گرفته شود در غير اينصورت نياز كاربران ناديده گرفته خواهد شد. ساختار فيزيكي پايگاه داده‌اي مي‌تواند شفاف باشد، اگر يك طراحي منطقي مناسب به كار گرفته شود.
در اينجا سئوالاتي كه بايد از كاربران نهايي پرسيده شوند، آورده شده است:
 چه داده‌هايي بايد در پايگاه داده‌اي نگهداري و ذخيره شود؟
 داده‌ها چطور بايد در داخل پايگاه داده‌اي دسته‌بندي شوند؟
 چطور كاربران به پايگاه داده‌اي دسترسي داشته باشند؟
 چطور تمام داده‌ها مربوط به پايگاه داده‌اي مي‌شود؟
 چه معياري براي صحت داده‌ها بايد درنظر گرفته مي‌شود؟

افزونگي داده‌ها
داده‌ها نبايد افزونگي داشته باشند، بدين معني كه تكرار داده‌ها به چند دليل بايد در حداقل نگهداري شود. مثلا، لازم نيست كه آدرس منزل كارمندي را در بيشتر از يك جدول نگهداري كنيم. يك آدرس براي يك كارمند در داخل يك جدول ممكن است با آدرس همان كارمند در جدولي ديگر يكسان نباشد. كدام جدول صحيح است؟ آيا مستنداتي براي كنترل آدرس جاري كارمند وجود دارد؟ ممكن است اين طور باشد و ممكن است نباشد. در اينجا افزونگي داده‌ها ممكن است تبديل به يك مشكل بزرگ گردد.

فرم‌هاي نرمال
فرم‌هاي نرمال راهي براي اندازه‌گيري سطح يك پايگاه داده‌اي كه نرمال شده است، مي‌باشند، سه فرم نرمال متداول عبارتند از:
 فرم اول نرمال
 فرم دوم نرمال
 فرم سوم نرمال
هر فرم نرمال بستگي دارد به گامهاي نرمال سازي كه در فرم نرمال قبلي برداشته شده است. به طور مثــال، براي نرمال‌سازي يك پايگاه داده‌اي با استفاده از فرم دوم نرمال، پايگاه داده‌اي بايد در فرم اول نرمال قرار گرفته باشد. براي نرمال سازي پايگاه داده‌اي توسط فرم سوم نرمال اين پايگاه بايد در فرم دوم نرمال قرار داشته باشد. (اين بدان معني است كه پايگاه داده‌اي در فرم اول نرمال مي‌باشد)
فرم‌هاي نرمال بايد به شكل ترتيبي به كار گرفته شود.

[تصویر:  6359925908804779501Capture0.JPG]

فرم اول نرمال
هدف از فرم اول نرمال آن است كه داده‌هاي منطقي كه جداول ناميده مي‌شوند، تقسيم كنيم. وقتي كه جدولي طراحي شد، يك كليد اوليه يا اصلي به آن جدول اختصاص مي‌يابد. كليد اصلي در يك جدول يك يا چند ستوني است كه هر رديف از آن جدول را منحصر بفرد مي‌كند. در اين حالت به جاي داشتن يك جدول بزرگ، چندين جدول كوچكتر با قابليت كنترل بهتر خواهيم داشت.

فرم دوم نرمال
هدف از فرم دوم نرمال داشتن داده‌هايي است كه فقط تا حدي به كلي اوليه وابسته است و آن داده‌ها را در جدول ديگري ذخيره مي‌كند.
فرم دوم نرمال را از فرم اول نرمال بوسيله تقسيم جدول اصلي به دو جدول بيرون مي‌كشيم؛ طوريكه هر كدام از جداول داراي يك موضوع خاص خود مي‌باشند.
فرم سوم نرمال
هدف از فرم سوم نرمال برداشتن داده‌ها از جدولي است كه به كليد اوليه وابسته نمي‌باشد. در تبديل جدول‌ها به فرم سوم نرمال، جداول جديدتري ايجاد مي‌كنيم تا داده‌هاي بيشتري را در آنها جاي دهيم.
مزاياي نرمال‌سازي
نرمال سازي مزاياي بي‌شماري براي يك پايگاه داده‌اي ايجاد مي‌كند. بعضي از مزاياي اصلي شامل موارد زير است:
 سازمان‌دهي كلي‌تر پايگاه داده‌ها
 كاهش افزونگي داده‌ها
 سازگاري داده‌ها در داخل پايگاه داده‌ها
 طراحي بسيار انعطاف‌پذيرتر پايگاه داده‌ها
 امكمان امنيت بهتر پايگاه داده‌ها
سازمان‌دهي از جريان نرمال‌سازي بدست مي‌آيد و كار هر شخص را ساده‌تر مي‌كند، از كاربري كه به جداول پايگاه داده‌ها دسترسي دارد تا طراح و اداره كننده بانك (DBA) كه مسئوليت اداره بانك اطلاعات به عهده او مي‌باشد. افزونگي داده‌ها كاهش مي‌يابد، به اين ترتيب ساختار داده‌ها ساده‌تر مي‌گردد و در مصرف ديسك صرفه‌جوي خواهد شد. چون تكرار داده‌ها كم مي‌گردد، امكان ناسازگاري داده‌ها بطور چشمگيري كاهش مي‌يابد.
چون پايگاه داده‌اي نرمال، به جداول كوچكتري شكسته شده است، وقتي ساختار موجود را تغيير مي‌دهيم، انعطاف بيشتري داريم. خيلي آسان‌تر است هرگاه جدول كوچكي را با تعداد كم داده تغيير دهيم، تا اينكه بخواهيم جدول بزرگي را با تمام داده‌هاي حياتي پايگاه داده‌ها تغيير دهيم. وقتي عمل نرمال‌سازي انجام شده باشد امكان اعمال امنيت بهتر خواهد شد. بنابراين كار هر شخص ساده‌تر مي‌گردد و كاربر نهايي راضي خواهد شد.

معايب نرمال‌سازي
گرچه اكثر پايگاه‌هاي داده‌اي موفق در درجاتي از نرمال مي‌باشند ولي يك عيب اساسي در يك بانك اطلاعاتي نرمال شده وجود دارد؛ و آن كاهش سرعت پردازش داده‌ها است. قبول كاهش سرعت پردازش پايگاه داده‌ها، مستلزم آگاهي است چون هر پرس و جو يا درخواست تغيير به پايگاه داده‌ها فرستاده مي‌شود، در نتيجه عواملي در اجرا و سرعت پردازش آن دخالت دارند از جمله نحوه كاركرد CPU، نحوه كار حافظه و امكانات ورودي/ خروجي (I/O).
يك پايگاه اطلاعاتي نرمال شده به دليل پردازش تغييرات و پرس و جوهاي پايگاه داده‌اي به CPU، حافظه و I/O بيشتري نياز دارد تا يك پايگاه داده‌اي نرمال نشده. اين به‌خاطر آن است كه ابتدا بايد جداول به هم متصل شوند و سپس داده‌هاي موردنياز كاربر از داخل اين جداول اتصالي بازيابي گردند.

از نرمال درآوردن يك پايگاه اطلاعاتي
از نرمال در آوردن، روند تغيير ساختار جدول يك پايگاه نرمال شده به شكلي است كه اجازه افزونگي كنترل شده به جهت اجراي بهتر و سريع‌تر را به پايگاه داده‌اي مي‌دهد. تنها دليل از نرمال در آوردن يك پايگاه داده‌اي بهبود اجراي پايگاه داده‌ها مي‌باشد. يك پايگاه داده‌اي از حالت پايگاه داده‌اي روند كاهش در حالت نرمال يك پايگاه داده‌اي، به اندازه يك يا دو درجه است. البته بايد به خاطر داشته باشيم كه نرمال‌سازي واقعاً ممكن است اجراي پايگاه داده‌اي را كند‌كند چون نياز به اتصال جدول‌ها مي‌باشد. خارج كردن پايگاه داده‌اي از حالت نرمال نيازمند تركيب جداول جدا شده است و احتمال ايجاد داده‌هاي تكراري در داخل جداول وجود دارد.
انجام اين كار نتيجه‌اي كاهش تعداد I / O و زمان صرف شده كمتري توسط CPU است؛ بنابراين سرعت اجرا افزايش خواهد يافت. به هرحال، عمل خارج كردن پايگاه داده‌ها از حالت نرمال هزينه بر مي‌باشد. در يك پايگاه اطلاعاتي نرمال شده، ستونهايي كه براي تقسيم جداول انتخاب شده بودند در هنگام تركيب جداول باعث اتصال آنها خواهند شد و در نتيجه افزونگي داده‌ها افزايش مي‌يابد. وقتي يك پايگاه داده‌اي نرمال شده، از حالت نرمال بيرون مي‌آيد. ما با داده‌هاي مربوط به هم در جدولي بزرگتر (برخلاف چندين جدول كوچك) روبرو هستيم در نتيجه يك پرس و جود در يك جدول بزرگتر، سريع‌تر اجرا خواهد شد زيرا داده‌ها در كنار هم در يك جا ذخيره شده‌اند.
به هرحال هم نرمال سازي و هم از حالت نرمال درآوردن پايگاه داده‌ها نياز به دانستن اطلاعاتي درباره داده‌هاي واقعي و طبيعت حرفه‌اي دارد كه مي‌خواهيم پايگاه داده‌ها را در آن محل اعمال نماييم.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
06-14-2016, 04:43 PM
ارسال: #7
RE: بررسی پایگاه داده SQL Server و دستورات آن
واژه ی SQL به صورت سی کو ال باید تلفظ کنیم و اس کیو ال نا صحیح می باشد. منشا اصلی SQL به مقاله Edgar F. Codd تحت عنوان « مدل رابطه‌ای داده‌ها برای بانک‌های داده‌ای اشتراکی » که در سال ۱۹۷۰ منتشر شد،باز می‌گردد. در دهه ۷۰ گروهی از شرکت IBM در شهر San Jose بر روی سیستم پایگاه داده ای (System R) بدون توجه به این مقاله کار می‌کردند و زبان (SEQUEL(Structured English Query Language را به منظور عملیات و بازیابی اطلاعات ذخیره شده در System R ایجاد کردند. اگر چه SQL ناشی از تلاشهای کاد بود اما Donald D. Chamberlin و Raymond F. Boyce را به عنوان طراحان زبان SEQUEL می‌دانند.
سمینارهایی در زمینه فناوری بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطه‌ای جدید برگزار گردید. تا ۱۹۷۶ مشخص بود که IBM طرفدار جدی فناوری بانک اطلاعاتی رابطه‌ای بوده، توجه زیادی نسبت به زبانSQL دارد. تبلیغات در زمینه System/R باعث جذب گروهی از مهندسین در Menlo Park در کالیفرنیا گردید، و این گروه به این نتیجه رسیدند که تحقیقات IBM منجر به یک بازار تجاری برای بانک‌های اطلاعاتی رابطه‌ای خواهد گردید.
در ۱۹۷۷ این گروه شرکتی بنام Inc وRelational Software تأسیس نمودند تا یک DBMS رابطه‌ای بر اساس SQL بسازند. محصولی بنام Oracle در۱۹۷۹ عرضه گردید، و اولین DBMS رابطه‌ای بوجود آمد. به این ترتیب محصول Oracle باعث گردید اولین محصول IBM برای مدت ۲ سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای VAx Digital’s اجرا می‌شد که خیلی از کامپیوترهای بزرگ IBM ارزان تر بودند.
امروزه این شرکت با نام Oracle Corporation اولین فروشنده سیستم‌های مدیریت بانک اطلاعاتی رابطه‌ای است. استادان آزمایشگاههای کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه ۱۹۷۰ مشغول تحقیق در زمینه بانک‌های اطلاعاتی رابطه‌ای بودن (مانند تیم تحقیق IBM)، گروه فوق نیز یک نمونه از DBMS رابطه‌ای ایجاد نمودند و سیستم خود را Ingres نام نهادند.
پروژه Ingres شامل یک زبان پرسش یا Query language بود بنام QUEL، اگر چه از SQL خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.
در حالیکه Oracle و Ingres برای ارائه محصولات تجاری در رقابت بودند، پروژه System/R شرکت IBM در تلاش بوده‌است که یک محصو ل تجاری با نام SQL/Data system (یاSQL/DS) عرضه نماید. IBM موجودیت SQL/DS را در ۱۹۸۱ اعلام، و در ۱۹۸۲ شروع به عرضه محصول خود نمود. در سال ۱۹۸۳ IBM یک نسخه SQL/DS را برای VM/CMS (سیستم عاملی که در کامپیوتر بزرگ IBM غالبا استفاده شده بود)، اعلام نمود.
همچنین در سال ۱۹۸۳ شرکتIBM، محصول Database۲ یا DB۲ را معرفی نمود که یک DBMS رابطه‌ای بود برای سیستم‌های بزرگ آن شرکت. DB۲ تحت سیستم عامل IBM’s VMS(سیستم عامل مراکز کامپیوتری بزرگ) اجرا می‌شد. اولین نسخه DB۲در ۱۹۸۵ عرضه گردید، و مسئولین IBM اعلام نمو دند که این محصول یک برنامه استراتژیک برای تکنولوژی نرم افزاری IBM می‌باش DB۲ .از آن تاریخ تاکنون DBMS رابطه‌ای شاخص بوده و IBM از آن حمایت نموده و زبان DB۲’s SQL استاندارد عملی زبان بانک اطلاعاتی بوده‌است.
SQL استاندارد (ANSI (American National Standards Institute را در سال ۱۹۸۶ و ISO (International Organization for Standardization) را در سال ۱۹۸۷ اتخاذ نمود. استانداردهای مختلفی از SQL تاکنون عرضه شده که در جدول زیر بیان می‌کنیم:
SQL-۸۷
SQL-۸۹
SQL-۹۲
SQL:۱۹۹۹
SQL:۲۰۰۳
این نرم افزار مجهز به ابزارهای جدیدی برای نظارت و مدیریت بوده و همچنین مناسب استفاده برای بانک های اطلاعاتی بسیار بزرگ می باشد و علاوه بر آن در نسخه جدید سرعت کار و سهولت استفاده افزایش چشم گیری یافته است.
2008 Microsoft SQL Server دارای نسخه های مختلفی می باشد که هرکدام کارایی ، مخاطبین و قیمت های متفاوتی دارد :
SQL Server 2008 Enterprise -

این نسخه در حقیقت پیشرفته ترین ، کاملترین ، و گران ترین نسخه از این نرم افزار است .
توانایی کار با بانک های اطلاعاتی بسیار بزرگ ، توانایی انجام پردازش های بسیار زیاد و انجام تحلیل های پیچیده اطلاعات باعث شده تا شرکت های نرم افزاری برای بانک های اطلاعاتی که با حجم داده بسیار زیاد سرو کار دارند از این نسخه استفاده کنند .
SQL Server 2008 Standard -
شرکت های متوسط بیشتر از این نسخه استفاده می کنند یکی به این دلیل که بانک های اطلاعاتی برزگ را پشتیبانی می کند و دیگری قیمت پایین تر نسبت به نسخه Enterprise است .
عدم توانایی این نسخه در تحلیل های پیچیده دلیل قیمت پایین تر این نسخه نسبت به نسخه Enterprise است .
SQL Server 2008 Workgroup -
یکی از ارزان ترین نسخه ها می باشد و بیشتر برای شرکت های کوچک و سرویس دهنده های وب مورد استفاده قرار می گیرد .
این نسخه هم به راحتی می تواند به نسخه های Standard و Enterprise ارتقا پیدا کند .
SQL Server 2008 Web -
این نسخه برای اولین باری است که عرضه می شود و مخاطبین اصلی این نسخه را شرکت های خدمات میزبانی وب تشکیل می دهند . این نسخه مجهز به ابزارهای بسیار کاربردی برای پشتیبانی از برنامه های کاربردی گران قیمت و بسیار پیچیده تحت وب است که در سرویس های میزبانی وب به کار می روند .
SQL Server 2008 Developer -
از نام این نسخه می توان دریافت که این نسخه مخصوص برنامه نویسان و توسعه دهندگان می باشد و به همین دلیل دارای قیمت پایینی است . این نسخه هیچ تفاوتی با نسخه Enterprise ندارد و تمامی امکانات آن را دارا می باشد.
قیمت پایین این نسخه باعث شده تا بیشتر شرکت های نرم افزاری که با بانک های اطلاعاتی سرو کار دارند از این نسخه استفاده کنند .
با این کار دیگر لازم نیست که شرکت ها برای انجام عملیات تست و یا پیش نمایش ملزم به خرید نسخه Enterprise باشد.
در صورتی هم که شرکت تصمیم به عرضه تجاری محصول خود کرد به راحتی می تواند این نسخه را به نسخه Enterprise ارتقا دهد .
SQL Server 2008 Express -
این نسخه به صورت رایگان عرضه می شود.
و به اصطلاح یک نسخه کوچک شده از این نرم افزار می باشد و بطبع این نسخه دارای امکانات بسیار کمتری نسبت به نسخه های دیگر می باشد .
از این نسخه بیشتر برای آموزش و ساخت برنامه های کوچک تحت دسکتاپ و سرور مورد استفاده قرار می گیرد که این امر به برنامه نویسان این اجازه رو می دهد که اگر مشغول نوشتن یک پروژه با یک بانک اطلاعاتی کوچک هستند بتوانند از این نسخه استفاده کنند .
در ضمن این نسخه به صورت پیش فرض روی نسخه های Visual Studio 2005 , 2008 قرار داده شده است و برنامه نویسان این Platform می توانند به راحتی از این نسخه استفاده کنند.
قابلیت های جدید اضافه شده در Microsoft SQL Server 2008 عبارتند از :
- اضافه شدن Persian Collection ( خبری خوش برای جامعه پارسی )
- اضافه شدن نوع داده datetime2 و همچنین بهبود و افزایش دقت برای نگهداری نوع داده DateTime
- اضافه شدن نوع های داده geography و geometry برای شرکت های نرم افزاری که با نقشه های زمینی و هوایی سرو کار دارند
- بهبود کارایی و افزایش سرعت بازیابی اطلاعات نسبت به نسخه های قبل
- قابلیت Auto Complete کردن خودکار
- قابلیت Syntax Checking یا غلط یابی خودکار
- مقدار دهی متغیر های به صورت خطی
- ارتقا و بهبود چشم گیر Transact-SQL
- فابلیت trace کردن پرسش ها
- قابلیت ایجاد User Defined Types و Defined Aggregates User با ظرفیتی بالاتر از 8
KB
-- قابلیت ارسال داده های بزرگ به توابع و پروسجر ها به وسیله قابلیت جدید Table-Value Parameters
- توانایی انجام چندین پردازش توسط دستوری جدید به نام MERGE
- Model hierarchical data برای ایجاد نمودارهای درختی و چارت ها توسط یکی از نوع های داده جدید به نام HierarchyID
- سیستم یکپارچه و ارتقا یافته Full-Text Indexes که با سرعتی بالا متن ها را مورد جست و جو قرار می دهد
- اضافه شدن Linq برای توسعه دهندگانی که با Linq آشنایی دارند
- مدیریت بر روی فایل ها توسط قابلیت FILESTREAM Data Type
- و ...

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

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


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
03-30-2017, 01:15 AM
ارسال: #8
پروژه SQL و مدیریت آن
يکي از نکات مهم مديريت يک پايگاه داده حصول اطمينان از امنيت اطلاعات است شما بايد مطمئن باشيد هر شخص که لازم است به طور قانوني به اطلاعات دسترسي داشته باشد مي تواند به آنها را بدست آورد ولي هيچ کس نمي تواند بدون اجازه به آنها دسترسي داشته باشد.
نياز به امنيت
قبل ازاينکه به بحث در مورد امنيت در SQL بپردازيم لازم است نياز به امنيت را به درستي درک کنيم خطرات امنيتي از سه ناحيه مورد بحث قرار مي گيرند .
1- فراميني که از خارج به سيستم وارد مي شوند : مزاحمين خارجي افرادي هستند که کوشش مي کنند از خارج از شرکت به سيستم هايتان دستيابي پيدا کنند . که اين کاردلايلي مثل اذيت کردن شوخي ، فروش اطلاعات به شرکت ديگر باشد از آنجا که بيشتر شرکت ها اقدامات اصولي وساده اي را براي پيشگيري از اين نوع مزاحمت انجام مي دهد اين نوع مزاحمت به ندرت پيش مي آيد.
2- افراد شرکت تان اين نوع مزاحمت متداولترين نوع آن است اين افراد معمولا انگيزه نهائي براي دستيابي به داده هايي دارند که نمي بايست آنها را ببيند . که اين انگيزه ممکن است کنجکاوي محض ويا سوء نيت باشد .
3- مزاحمت تصادفي : که نسبتا متداول است در اينجا کاربري دارد سيستم مي شود وانتظار مي رود که نتيجه خاص بدست آورد ولي آن نتيجه را بدست نمي آورد بلکه اطلاعات بسيار بيشتري نسبت به آنچه انتظار داشتند بدست مي آورد .
اشخاصي که در شرکتتان کار مي کنند ، احتمالا متداولترين نوع مزاحمت براي سيستم تا ن به شمار مي آيند . اين افراد معمولا انگيزه نهائي براي دستيباي به داده هايي دارند که نمي بايست آنها را ببينند . قدري از اين انگيزه ممکن است کنجکاوي محض باشد ، و قدري از آن نيز ممکن است سوء نيت صرف باشد . براي متوقف کردن در اين نوع مزاحمت ، واقعا بايد با سوء ظن به تمام سيستم هاي خود بنگريد و آنها را تا حد ممکن قفل کنيد . وقتي چنين کاري مي کنيد ، برخي از کاربران شکايت مي کنند لازم است به تمامي اين گونه مسائل پاسخ دهيد وبه آنها توضيح دهيد که چرا سيستم ها را قفل مي کنيد .
مزاحمت تصادفي نيز نسبتا متداول است چيزي که در اين حالت رخ مي دهد آن است که کاربري وارد سيستم مي شود و انتظار دارد که نتيجه خاصي به دست آورد ، وليکن آن نتيجه را به دست نمي آورد بلکه ، کاربران اطلاعات بسيار بيشتري نسبت به آنچه که انتظار داشتند به دست مي آورند .

[تصویر:  6362647464555576750SQL.JPG]

اصول امنيت SQL سرور
SQL سرور واژه ها و مفاهيم زيادي که بايد با آنها آشنا شويد اين مفاهيم شامل مراحلي مي شوند که SQL سرور با انجام آنها به يک کاربر امکان مي دهد تا تحت مدهاي امنيتي مختلف ، که به زودي بررسي خواهند شد ،بايک بانک اطلاعاتي ارتباط برقرار کند ابتدا بايد واژه هاي بيشتري را فرا بگيريد اين واژه ها عبارتند از :
• ID برقراري ارتباط ID برقراري ارتباط بخشي از اطلاعات اعتبار کاربر است که کاربر براي دستيابي به SQL سرور ارائه مي دهد بسته به مد امنيتي مورد استفاده در سرويس دهنده ، کاربر ممکن است مجبور به ارائه ID نباشد .
• کلمه عبور اين امر ممکن است بارز باشد ، اما هر کلمه عبور صرفا رشته اي از کاراکترها است که براي اعلام اعتبار کاربري که با يک ID خاص با سرويس دهنده ارتباط برقرارمي کند ، به سرويس دهنده ارسال مي شود . بيشتر شما بايد با قوانين يک کلمه عبور مناسب آشنا باشيد اما لازم است از اين امر مطمئن شويم ، کلمات عبور خوب بايد حرفي – عددي باشند وطول آنها نيز حداقل شش کاراکتر باشد .
• ID کاربر – اين هم يک مرحله ديگر براي دستيابي به يک بانک اطلاعاتي خاص است . ID برقراري ارتباط و کلمات عبور که در بالا بررسي شدند ، شما را تنها به سرويس دهنده مي رسانند . اگر تنها تا به آن حد پيش رويد ، به هيچ يک از بانک هاي اطلاعاتي آ”ن سرويس دهنده دستيابي نخواهيد داشت . هر کاربري که به يک بانک اطلاعاتي دستيابي داشته باشد يک ID کاربري در آن خواهد داشت . در بيشتر موارد ID برقراري ارتباطID و کاربري يک چيز هستند . پس از بررسي درستي ID برقراري ارتباط توسط SQL سرور وتعيين اينکه کاربر مجاز به دستيابي سرويس دهنده است .وي مي بايست يک بانک اطلاعاتي را براي کار انتخاب کند SQL سرور سپس ID برقراري ارتباط با را تمام ID هاي کاربري آن بانک اطلاعاتي مقايسه مي کند تا اطمينان حاصل شود که کاربر به بانک اطلاعاتي دستيابي دارد اگر هيچ ID کاربريي مطابق با ID برقراري ارتباط وجود نداشته باشد SQL سرور اجازه پيشروي بيشتر را به کاربر نمي دهد .
• انواع نقش هاي مختلفي که مي توانيد به کاربربدهيد عبارتند از :
• نقشهاي از پيش تعريف شده سرويس دهنده
• نقش هاي از پيش تعريف شده کاربر
• نقش عمومي
• نقش هاي شخص بانک اطلاعاتي
• نقش – هر نقش روشي براي گروه بندي کاربران داراي کارهاي مشابه به منظور آسان شدن مديريت است نقش ها در نگارش هاي قديمي تر SQL سرور تحت عنوان گروه مطرح بودند نقش ها درعمل هنوز همان کار را انجام مي دهند .
به جاي تخصيص مجوز به هر يک از کاربران بانک اطلاعاتي ، به راحتي مي‌توانيد يک نقش ايجاد کنيد و پس از قرار دادن کاربران در آن نقش مجوزها را به آن نقش تخصيص دهيد انجام اين کار سبب صرفه جويي در وقت مديريت مي شود تنها کاري که بايد انجام دهيد آن است که وي را دراين نقش قرار دهيد چو ن بسياري از مديران قديمي SQL سرور هنوز مشغول کار هستند ، بازهم خواهيد ديد که از واژه گروه به جاي نقش استفاده مي شود .
• نقش برنامه کاربردي – اين نقش يک نقش ويژه است که امکان دستيابي به داده هاي موجود در بانک اطلاعاتي را تنها به برنامه هاي کاربردي خاص مي دهد . بيشتر مديران SQL سرور سالها اين نوع ويژگي را درخواست کرده اند کار يکه اين نقش انجام مي دهد آن است که کاربران را مجاب مي کند تا از طريق برنامه کاربردي به داده هاي بانک اطلاعاتي دستيابي پيدا کنند اين ويژگي از اهميت خاصي برخوردار است . چرا که بيشتر کاربران قادر به استفاده از برنامه هاي کاربردي خاصي چون ميکروسافت اکسس خواهند بود که مي تواند با بانک اطلاعاتي ارتباط برقرار کند و دستيابي مستقيم به جداول موجود در آن را براي کاربران فراهم کند . اين کار کاربران را مجاب به استفاده از برنامه کاربردي مي کند که خصوصا براي دستيابي به داده ها نوشته شده و از دستيابي برنامه هاي کاربردي ديگر جلوگيري مي شود .
• گروههاي ويندوز NT امنيت SQL سرور شديدا بر امنيت ويندوز NT بنا شده است گروههاي ويندوز NT مستقيما به نقش هاي SQL سرور قابل نگاشت هستند ، از اين رو هر کاربري که جزئي از آن گروه باشد ، به طور خودکار به SQL دستيابي خواهد داشت .

فرايند بررسي اعتبار
وقتي کاربري اقدام به دستيابي به سرويس دهنده مي کند چهار چيز کنترل مي‌شود در هر مقطع کنترل مي شود که کاربران مجاز به دستيابي هستند يا خير . اگر چنين باشد امکان پيشروي به آنها داده مي شود در غير اين صورت کاربر ،
پيام خطايي دريافت خواهد کرد وکار وي متوقف مي شود .
نخستين سطح اين امنيت ، در سطح شبکه است کاربران در بيشتر مواقع با يک شبکه ويندوز NT ارتباط برقرار خواهند کرد ،اما با هر شبکه ديگري که در کنار شبکه مذکور وجود داشته باشد نيز مي توانند ارتباط برقرار کنند . کاربر بايد يک IDبرقراري ارتباط ويک کلمه عبور معتبر شبکه وارد کند ، در غيراين صورت پيشرفت کار وي در همين سطح متوقف خواهد شد به نظر مي رسد که چند روش براي گذشتن از اين سطح امنيتي وجوددارد ، اماواقعا اين طور نيست يک حالت در مواقعي است که يک کاربر بخواهد با استفاده از يک بانک اطلاعاتي واکشي کند اگر چه کاربر براي دستيابي به شبکه ممکن است نياز به وارد کردن اطلاعات برقراري ارتباط نداشته باشد اما account که برنامه کاربردي در سرويس دهنده تحت آن درحال اجرا است حتما بايد با شبکه ارتباط برقرار کند.
دومين سطح امنيت در خود سرويس دهنده است وقتي کاربر به اين سطح مي‌رسد ، مي بايست يکID برقراري ارتباط و يک کلمه عبور معتبر براي پيشروي ارائه کنيد بسته به مد امنيتي که در سرويس دهنده به کار مي بريد ، SQL سرور ممکن است بتواندIDبرقراري ارتباط با ويندوزNT را تعيين نمايد .
سومين‌سطح امنيت يک سطح جالب است وقتي کاربر از سطح دوم عبور مي‌کند
معمولا فرض براين است که مجوزهاي لازم براي دستيابي به بانک اطلاعاتي در آن سرويس دهنده را دارد ، اما اين امر حقيقت ندارد در عوض آ‎نچه که رخ مي دهد آن است که کاربر بايد يک کاربريID در بانک اطلاعاتي که مي خواهد به آن دستيابي داشته باشد نيز داشته باشد هيچ کلمه عبوري در اين سطح مطرح نيست در عوضID برقراري ارتباط توسط مدير سيستم باID کاربري نگاشت مي شود چنانچه کاربري ID در بانک اطلاعاتي نداشته باشد ، کار زيادي نمي تواند انجام دهد مگر در اين حالت ممکن است يک IDکاربري مهمان در يک بانک اطلاعاتي وجود داشته باشد در اين حالت آ‎نچه که رخ مي دهد آن است که کاربر از طريق IDبرقراري ارتباط به سرويس دهنده دستيابي پيدا کرده است اما به بانک اطلاعاتي دستيابي ندارد و بانک اطلاعاتي حاوي يکID کاربري مهمان است مجوزها را مي‌توان به کاربريID مهمان تخصيص داد درست به همان گونه اي که به کاربران ديگر قابل تخصيص هستند بانک هاي اطلاعاتي جديد طبق پيش فرض فاقد IDکاربري مهمان هستند .
آخرين سطح امنيت SQL سرور با مجوزهاي سرو کار دارد آنچه که در اين سطح رخ مي دهد آن است که SQLسرور کنترل مي کند کهID کاربريي که کاربر از طريق آن به سرويس دهنده دستيابي پيدا کرده است مجوزهاي دستيابي به شي ء هاي مورد نظر را داشته باشد اين امکان وجود دارد که دستيابي تنها براي برخي از شي ء هاي آن بانک اطلاعاتي باشد ونه تمام شي ء ها که معمولا نيز اينگونه است .
همان گونه که ملاحظه مي کنيد ، سطوح امنيت مي توانند دستيابي به سرويس دهنده را براي کاربران غير مسئوول بسيار دشوار کنند .
SQL سرور دو روش مختلف براي بررسي اعتبار کاربران و معرفي آنها به سرويس دهنده دارد بررسي اعتبار ويندوز NT که براي انجام تمام کارها به ويندوز NT متکي است روش دوم بررسي اعتباراتي SQLسرور که به ويندوز NT امکان مي دهد تا علاوه بر کارهاي بررسي اعتبار خاص خود ، بررسي اعتبار را اساسي اطلاعاتي که وارد مي کند براي SQL سرور انجام مي دهد .

سيستم شناسايي ويندوز
در اين روش مدير سيستم براي کاربران يا گروههاي کاربري ويندوز حق دسترسي تعيين مي کندکامپيوترهاي مشتري که ازسرويس هاي کامپيوتر مرکزي استفاده مي کنند به اين کامپيوتر متصل شده اند کاربر توسط سيستم عامل Windows يا NT که بر روي کامپيوتر مرکزي نصب شده است شناسايي مي شود واگر اجازه دسترسي داشته باشد به آن متصل مي گردد در اين حالتServer SQL تنها کافي است بررسي کند که آيا کاربر متصل شده حق دسترسي به سرويس دهنده وپايگاه داده را دارد يا خير ؟

سيستم شناساييServer SQL
در اين روش هنگامي که يک درخواست براي اتصال فرستاده مي شود Server SQL يکLogin ID او يک کلمه عبور دريافت مي کند وسپس Login مزبور را با ليست Login هاي تعريف شده توسط مدير سيستم مقايسه مي کند .

برقراري ارتباط با سرويس دهنده و کاربران بانک اطلاعاتي
همچون تمام کارهاي ديگري که در SQL سرور انجام مي دهيد روشهاي مختلف زيادي براي ايجادID هاي برقراري ارتباط وID هاي کاربري وجود دارد نخستين روش براي انجام اين کار از طريق يک ويزارد درEnterprise Manager SQL است .
اين ويزارد شما راگام به گام در ايجاد يکID برقراري ارتباط ويک IDکاربري ياري مي کند دليل يکي کردن آنها آن است که درواقع در ارتباط بايکديگر ايجاد مي شوند روش دوم براي ايجاد ID ها استفاده از رويه هاي ذخيره شده است اگر از اين روش استفاده کنيد ،درصورت نياز مي توانيد همان ID ها را در تمام سرويس دهند ها ايجاد کنيد آخرين روش ،ايجاد مجزاي آنها درEnterprise Manager SQL است .

ساختن Login
براي ساختن يک Login با مدل شناسايي SQL Server
1- سرويس دهنده مورد نظر خود را درکنسول درختي انتخاب کنيد سيستمي از اشياء آن سرويس دهنده در منطقه جزييات ظاهر مي شود .
2- دکمه Wizard موجود بر روي نوار ابزار Enterprise Manager را کليک کنيد .Server SQL کاردرمحاوره اي Slect Wizard را نشان مي دهد
3- آيتم Creat Login Wizard موجود در قسمت Data bases را انتخاب نمود سپس دکمه ok را کليک کنيد اولين صفحه اين ويزارد توسطServer SQL به نمايش در مي آيد
4- دکمه Next را کليک کنيد ويزارد صفحه اي رانشان مي دهد که مدل شناسايي را از شما درخواست مي کند
5- ايتم دوم را انتخاب نماييد .
6- دکمه Next را کليک کنيد در صفحه بعدي شناسه کاربر و کلمه عبور را از شما درخواست مي شود
7- کلمه Test ID رابه عنوان نام وارد کرده و دکمه عبور دلخواه خود را نيز تايپ کنيد
8- دکمهNext را کليک کنيد ويزارد از شما سوال مي کند که اين Login را به کداميک از رل هاي امنيتي نسبت دهد .
9- اين Login را به رل System Adminstrator نسبت دهيد
10- دکمه Next را کليک کنيد درصفحه بعدي بايد پايگاه هايي را که اين Login به آنها دسترسي دارد مشخص نماييد
11- اين Login را به پايگاه داده Aromatherapy نسبت دهيد
12- دکمه Next را کليک کنيد در صفحه نهايي ويزارد انتخاب هاي شما نشان داده مي شوند
توجه : Login هايي که به رل هاي مخصوص سرويس دهنده مثل رل System Adminstators نسبت داده مي شوند به تمام پايگاه داده دسترسي خواهند داشت حتي اگر درمرحله 11 آنها را انتخاب نکنيد .
13 دکمه Finish راکليک کنيد اين ويزارد پيغامي مبني بر اتمام کار و ساخته شدن Login جديد نمايش مي دهد

مديريت Login ها
همانطور که بقيه اشياء پايگاه داده به مديريت و نگهداري نياز دارند شناسه هاي کاربران نيز ممکن است در طول زمان تغيير کنند مثلا ممکن است لازم باشد که رل امنيتي نسبت داده شده به يک Login ويا پايگاه داده قابل دسترس آن راتغيير دهيدويا در بعضي شرايط ممکن است بخواهيد يک Login رابه طور کامل حذف کنيد تمام اين کار ها با استفاده از Enterprise Manager بسيار ساده هستند .

امنيت در سطح پايگاه داده
در سطح پايگاه داده هر يک از Login ها به يک کاربر پايگاه داده مربوط مي شوند اگر چه Login به يک شخص امکان ميدهد که به يک نمونه ازServer SQL دسترس مجاز داشته باشند ولي بايد بدانيم که به يک پايگاه داده خاص دسترسي نخواهد داشت مگر آنکه به عنوان يک کاربر آن پايگاه داده تعريف شود .
همانطور که Login ها به رل هاي سرويس دهنده نسبت داده مي شوند به اين
ترتيب حق دسترسي آنها در سطح سرويس دهنده مشخص مي گردد کاربران يک پايگاه داده نيز رل هاي آن پايگاه نسبت داده مي شوند واز اين طريق سطح دسترسي به پايگاه داده تعيين مي گردد .

کاربران پايگاه داده

هنگامي که با استفاده از ويزارد Login Creatيک Login مي سازيد ودسترسي به يک يا چند پايگاه داده را براي وي ميسر مي سازيد اين Login به طور اتوماتيک به ليست کاربران آن پايگاه ها اضافه مي شود ولي وقتي يک پايگاه داده جديدي مي سازيد Login هاي موجود به عنوان کاربران آن منظور نمي شوند بلکه خود شما بايد Login هاي مورد نظر تان را به ليست کاربران آن پايگاه داده اضافه کنيد .
خلاصه : در اين مقاله اطلاعات مربوط به مدهاي امنيتي SQL سرور و امنيت SQL سرور را بررسي نموديم نکته اي که مي بايست به هنگام تعيين امنيت در نظر داشته باشيد آن است که بايد شکاک باشيد پس از آن با ID هاي برقراري ارتباط ID هاي کاربري ونقش ها آشنا شويد دانستن آنها براي چگونگي مديريت مهم است چرا که چگونگي کنترل دستيابي به سرويس دهنده را تعيين مي کند .

معرفي و مقدمه
1- برنامه هاي کاربردي Web SQL njection,

1.1 مرور کلي SQL njection شيوه اي است که برنامه هاي کاربردي Web به کار مي رو د و مشتريان مي توانند اطلاعات را از طريق query هاي SQL مرون اينکه ابتدا کاراکترهاي مضرر را به صورت بالقوه اي stripping potentially جدا کنند فراهم مي کند موضوع اين مقاله در مورد آموزش تکنيکهاي استفاده از برنامه هاي کاربردي Web که درمقابل SQLinjection آسيب پذير هستند و مکانيسم محافظت در مقابل SQLinjection وبه طور کلي مشکلات معتبر سازي ورودي باشد .

1.2 سابقه
قبل از خواندن اين مقاله بايد درک اوليه از چگونگي کار پايگاههاي داده اي و استفاده ازSQL براي دستيابي به آنها داشته باشيم .

1.3 به رمز در آوردن کاراکترها
در بيشترbrowser Web ها کاراکترهاي نشانه گذاري وبسياري سمبل هاي
ديگر بايد قبل از اينکه دريک درخواست استفاده شوند به صورت URL به رمز در آورده شوند در اين مقاله از کاراکترهاي عادي ASCII در مثالها و عکسها استفاده شده است .

2- آزمون آسيب پذيري
2.1 آزمون جامع

چک کردن برنامه هاي کاربردي Web براي آسيب پذيري نسبت به SQLInjection به نظر ساده مي رسد آنچه که ما مي بينيم فرستادن يک quote اولين ارگومان script و برگرداندن يک صفحه سفيد با يک خط که اشتباه ODBC را نشان مي دهد به وسيله سرور مي باشد ولي بررسي جزئيات آسيب پذير بسيار مشکل است .
همه پارامترهاي موجود در هرSCRIPT بايد هميشه چک شوند برنامه نويسي کهScript A را طراحي مي کند هيچ کاري با گسترش Script B ندارد و ممکن است در جايي SQL injection A که نسبت به مصون است B آسيب پذير باشد حتي وقتي برنامه نويسي روي تابع A از Script کار مي کند هيچ کاري به تابع Bدر همان Script ندارد ومثلا ممکن است تابع A به آسيب پذير باشد ولي B نباشد وقتي کل يک برنامه کاربردي Web به وسيله يک نفر برنامه نويس طراحي کد گذاري و تست مي شود ممکن است فقط و فقط يک پارامتر در يک Script در بين هزارانScript پارامتر در هزاران آسيب پذير باشد که مي تواند به خاطر اين باشد که توسعه دهنده به هر دليلي در مورد آن داده در آن محل مطابق اصول رفتار نکرده است پس هيچ گاه نمي توان مطمئن بود و بايد چک کرد .

2.2 فرايند آ‎زمون
آرگومان هر پارامتر را به وسيله يک Quoteتنها و کلمات کليدي SQL مثل WHERE جايگزين کنيد هر پارامتر بايد به صورت منفرد تست شود البته در هنگام تست هر پارامتر بقيه پارامترها بايد بدون تغيير باشد ممکن است تصور شود که بهتر است براي ساده تر شدن داده هاي اصامي را پاک کرد و به خصوص باکار بردهايي که صفي از پارامترها دارند و مربوط به هزاران کاراکتر است ولي اين کار باعث کارابنون کاربرد در زمينه هاي ديگر مي شود که باعث مي شود که نتوانيم مطمئن شويم که SQLinjecttion در آ‎ن محل ممکن است يا خير براي مثال فرض مي کنيم خط پارامتر زيرکاملا قابل دسترس و
تغيير ناپذير است .
کد:
Contact Name= Maria% 20 Qanders & company Name = Alfreds % 20 futter kiste
وخط پارامتري زير به شما اشتباه ODBC را مي دهد .
کد:
Contact Name= Maria% 20 Qanders & company Name= 20 OR
که با چک کردن اين خط :
کد:
Company Name =
به شما اشتپاهي را مي دهد که مي گويند بايد مقدار Contact Name مشخص شود اين خط :
کد:
Contact Name= Bad Contact Name& company Name=
همان صفحه اي را مي دهد که درخواستي که اصلا Contact Name را مشخص نمي کند مي دهد .
يا ممکن است home page پيش فرض سايت رابدهد ويا وقتي مي نتواند Contact Name مشخص را پيدا کند Company Name نگاه مي کند بنابراين ممکن است حتي آرگوماني از پارامتر دستور العمل SQLراهم بر نگرداند يا ممکن است چيزي کاملا متفاوت به شما بدهد بنابراين در چک کردنinjection SQL بايد خط پارامتر ها کاملا نوشته شود وهمه آرگومانها بجز آن پارامتري که شما درستي ارزش آن را چک مي کنيد داده شود .

2.3 ارزيابي نتايج
اگر يک پيغام خطاي سرور پايگاه داده از انواعي که گفته شد دريافت کرديد injection مطمئنا موفقيت آميز بوده است هر چند پيغامهاي خطاي پايگاه داده هميشه واضح نيستند در اينجا هم توسعه دهنده ها کارهاي عجيبي انجام داده اند بنابراين شما بايد در هر جاي ممکن دنياي شاهدي براي injectionموفقيت آ”ميز باشيد اولين کاري که بايد انجام دهيد اين است که در کل منبع صفحه بر گردانده شده کلماتي مانند SQL Server ODBC وغيره را جستجو کنيد جزئيات بيشتر در مورد ماهيت خطا مي تواند در ورودي دستور العمل وغيره مخفي باشد بايد قسمت header چک شود برنامه هاي کاربردي Web ي وجود دارند که هيچ اطلاعاتي درمورد پيغام خطا در بدنه پاسخ HTTP آنها وجود ندارد ولي پيغام خطاي پايگاه داده در قسمت header آنها وجود دارد .
شما نه تنها بايد فورا صفحه برگردانده شده را چک کنيد بلکه بايد صفحات Link شده هم چک شوند درطول چک کردن ممکن است با پيغامهاي خطاي عمودي در پاسخ به حمله SQLinjection مواجه شويد که با click کردن در شمايل بعد از پيغام مي توانيد به صفحات link شده بعدي رفته وپيغام خطاي SQL سرور را به طور کامل ببينيد .
موردي ديگري که بايد بررسي شود direct محور 302 صفحه است که در آن پيام خطا بررسي شده و مي توانيد آن را ملاحظه کنيد .
البته بايد به اين نکته توجه کرد که ممکن است SQLinjection دريافت پيغام خطاي ODBC هم موفقيت آميز باشد بيشتر اوقات يک صفحه پيغام خطاي عمومي با فرمت مناسب ديده مي شود که به شما مي گويند که يک خطاي داخلي سرور يا يک مشکل پردازش درخواست شما وجود دارد
برخي از برنامه هاي کاربردي Web طوري ساخته شده اند که در صورت ايجاد يک خطا از هر نوع ،مشتري به سايتهاي صفحه اصلي برگردانده مي شود .

3- حمله ها
3.1 اجازه عبور

ساده ترين روش SQLinjection عبور دادن ( By passing) لوگين هاي داراي شکل ( form – based logins) است بياييد فرض کنيم که برنامه کاربردي Web به
صورت زير باشد .
کد:
SQL Query = SELECT Username FROM Users WHERE Username = &
Str Username & AND Password = & str password &
Str Authchck = CetQuery Resul LSQL Query )
IF Strauttcheck = Then
Bool Authentia ted = false
ELSE
Bool Authenticated = Trae
End IF

اين اتفاقاتي است که وقتي کاربردPassword , username ارائه مي دهد مي افتد .
queryبه جدول کاربر مي رود و چک مي کند که آيا سطري وجود دارد که Password , username آن سطراست با آنچه کار بر وارد کرده مطابقت داشته باشد اگر چنين سطري يافت شد username ، د رمتغير Str Athcheck ذخيره مي شود که نشان مي دهد که کاربر بامتغير شود واگر سطري که با داده هاي کاربر مطابقت داشته باشد يافت نشود Str Athcheck حاکي مي باشد وکاربر نبايد معتبر شود .
اگر Password , username شامل کاراکترهايي که شما مي خواهيد باشند مي توانيد ساختار Qvery اصلي SQL را طوري اصلاح کنيد که اگر Password , username يا معتبر نمي شناسيد نام معتبري به وسيله Qvery به شما برگردانده شود فرض کنيم کاربر فرم Login را به صورت زير پر کند .
کد:
Login= OR =
Password : OR =
در اينحالت به SQL Qveryمقادير زير را مي دهد .
کد:
SELECT Username from user WHERE User name = OR = AND
Password : OR =
به جاي اينکه Query داده دريافت شده از کاربر با جدول کاربر موجود مقايسه کندnothing را با nothingمقايسه مي کند که مطمئنا هميشه درست است ( توجه داشته باشيد که nothing باnull فرق مي کند ) از آنجايي که تمام شرايط در WHERE در نظر گرفته مي شوندUser name از رديف اول در جدول انتخاب مي‌شود اينuser name به Str Authcheck فرستاده مي شود تا اعتبار آن مشخص شود .
3.2 انتخاب کردن
در حالتهاي ديگر بايد قسمتهاي مختلف qvery هاي SQLمربوط برنامه هاي کاربردي Web را از پيامهاي خطاي برگردانده شده مرور کنيد براي انجام چنين کاري بايد بدانيد که پيام خطاي ارائه داده شده چه معني مي دهد و چگونه بايد رشته Injection براي مقابله با اين خطاها دنبال شود .

3.2.1 دستور دادن در مقابل Quoted
اولين خطايي که معمولا با آن مواجه مي شويد خطاهاي لغوي هستند خطاي لغوي نشان مي دهد که query با ساختار مناسب query درSQL مطابقت ندارد اولين چيزي که بايد بفهميم اين است که آيا Injection بدون qvotation امکان پذير است يا خير .
در Injection direct هر آرگوماني که شما استفاده مي کنيد بدون هيچ متغيري در SQL query استفاده مي شود اگر با قرار دادن ارزش درست پارامتر و اضافه کردن يک فاصله و کلمه OR به آن خطايي ايجاد شود ، Injection direct ممکن است مقدارهاي مستقيم مي توانند به صورت مقدارهاي عددي در دستور العمل WHERE استفاده شوند .
کد:
SQL String SELECT First name , last Name , Titte FROM Empolyees
WHERE Employee= & int Employee ID
يا آرگوماني از کلمات کليدي SQL مثل نام جدول يا نام ستون همانند .
کد:
SQL String SELECT First name , last Name , Titte FROM Empolyees
ORDER BY & Strcolumn
در يک injection quotedهر آرگوماني که شما بنويسيد داراي يک quote است که به وسيله کاربرد به آن اضافه شده است مانند .
کد:
SQL String SELECT First name , last Name , Titte FROM Empolyees
WHERE Employee ID = & Strcty&
همه انواع ديگر نسبت به injection quoted آسيب پذير هستند در injection quoted هر آرگوماني که ارائه مي دهيد همراه با يک quote است و به وسيله يک درخواست به آن پيوسته شده است .
مانند :
کد:
SQL String SELECT First name , last Name , Titte FROM Empolyees
WHERE Employee ID = & Strcty&
براي بيرون آمدن از quotes ودرست انجام شدن query در حالي که query از لحاظ لغوي معتبر بماند بايد ريشه injection قبل از استفاده از کلمات کليدي SQL داراي يک quote باشد مانند ودر دستور العمل حال براي نشان دادن شکل Cheating ( تقلب ) SQL سرور هر چيزي که را بعد از باشد .
ناديده مي گيرد ولي اين تنها سروري است که اين کار را انجام مي دهد وبهتر است ياد بگيريم که چگونه به اين کار را در شرايط سخت انجام دهيم تا اگر با MYSQL DB/2 , Oracleيا هر نوع سرور پايگاه داده ديگري کار مي کنيم بتوانيم از آن استفاده کنيم .

3.2.2 اتصال اساسي
query هاي SELECT براي بازيابي اطلاعات از پايگاه داده استفاده مي شوند بيشتر برنامه هاي کاربردي Web که ازمحتويات پويا از هر نوعي استفاده مي کنند ، صفحاتي را مي سازند که از اطلاعات بدست آمده از query هاي SELECT استفاده مي کنند .
در بيشتر اوقات قسمتي از QUERY که مي توانيد اداره کنيد قسمت WHERE است براي تغبير دادن قسمتWHERE يکquery براي اينکه بتواند رکوردي بجز آنهايي که بايد برگرداند اضافه کردن UNION SELECT است يک UNION SELECT اجازه ايجاد چند query SELECT در يک دستور العمل را مي دهد به مثال زير توجه کنيد .
کد:
SELECT Company name FROM Shippers WHERE 1= 1 UNION ALL SELECT
Company name FROM  Costomers  WHERE 1= 1
که اين مجموعه رکوردهاي query اول و query دوم را باهم نشان مي دهد کلمه ALL براي فرار از برخي دستور العمل هاي SELECT Dis TINCT ضروري است بايد مطمئن شد که اولين Query يعني query ي که توسعه دهنده هاي برنامه هاي کاربردي Web براي اجرا تغيير داده اند هيچ رکوردي بر نگردانده است اين کار مشکل نيست فرض کنيم روي Script با کدهاي زير کار مي کنيم .
کد:
SQL String SELECT First name , last Name , Titte FROM Empolyees
WHERE City = & strcity &
واز رشته زير استفاده مي کنيم .
کد:
UNION ALL SELECT Other Field FROM Other Table WHERE =
اين کار منجر به فرستادن زير به سرور پايگاه داده مي شود .
کد:
SQL String SELECT First name , last Name , Titte FROM Empolyees WHERE City
UNION ALL SELECT Other Field FROM Other Table WHERE =
اين اتفاقاتي است که مي افتد : موتور پايگاه داده در جدول Empolyees دنبال سطري که City در آن برابر Nothing است مي گردد از آنجايي که چنين سطري را پيدا نمي کنيد هيچ سطري بر گردانده نمي شود تنها رکوردي که ممکن است برگشت داده شود .
از query اضافه شده است دربعضي حالتها استفاده از Nothing درست نمي باشد چون ممکن است برخي موجوديت ها درجدول مقدار Nothing دارند يا دربرخي برنامه هاي کاربردي Web به کاربران Nothing باعث انجام کاري ديگر مي شود تنها کاري که بايد انجام دهيم اين است که از مقداري که در جدول اتفاق نمي افتد استفاده کنيم مثلا وقتي با اعداد سرو کار داريم مي توانيم از صفر ويا اعدادمنفي استفاده کنيم براي حالت text مي توان از رشته هايي مثل Notintable Nosuch Record ويا رشته هايي مثل Sjdhalksjhalka استفاده کرد .

3.2.3 پرانتر .
اگر خطاي لغوي در رشته ذکر شده پرانتز داشته باشد ( مثل پيغام SQL سرور که در مثال زير استفاده شده ) ويا پيامي دريافت کرديد که صريحا در مورد نداشتن پرانتز بود Orecle اين کار را انجام مي دهد يک پرانتز به قسمت WHERE مشکل را در رشته اضافه شده ويک پرانتز به قسمت اضافه کنيد در برخي حالات . احتياج است که از دو يا بيشتر پرانتز استفاده کنيد در اينجا که استفاده شده در Parenthesis asp را مي بينيم
My SQL = SELECT, last Name , First name Titte Notes Extension FROM Empolyees WHERE City & Strcity & )
بنابراين وقتي مقدار
) UNION SELECT Other field FROM
other Table WHERE ( =
را اضافه کنيد query زير به سرور فرستاده مي شود .
کد:
My SQL = SELECT, last Name , First name  Titte Notes Extension  FROM Empolyees WHERE City =  ) ) UNION SELECT Other field FROM
other Table WHERE ( =

3.2.4 query هاي LTKE
مشکل ديگر که معمولا به وجود مي آيد در قسمت LTKE است ديدن کلمه کليدي LTKE يا علامت درصد در پيغام خطا نشان دهنده چنين حالتي است که اغلب توزيع جستجو ازQuery SQLهاي با جملات LTKE مثل زير استفاده مي کنند .
کد:
SQL String = SELECT First name , last Name , Titte FROM Empolyees
WHERE last Name LTKE% & Str last Name Search & %
علامت هاي درصد Wildcard هستند ، بنابراين در اين حالت جمله WHERE مي تواند درهر حالتي که Str last Name Search در هر جايي در ظاهر نشده باشد مقداري درست را بر گرداند
رشته اي که برنامه کاربردي Web به ورودي کاربر اضافه مي کند معمولا يک علامت درصد يا يک ( و معمولا پرانتز ) مي باشد که بايد به جمله WHERE در رشته اضافه شده هم عينا اضافه شود .

3.2.5 بن بست .
موقعيتهايي وجود دارند که بدون تلاش قابل مقابله نيستند بعضي اوقات ممکن
است با query هايي مواجه شويم که به نظر مي آيد نمي توان از آنها بيرون آمد واصلا مهم نيست که چه مي کنيد فقط مرتبا پشت سرهم با پيغام خطا مواجه مي‌شويد .
بيشتر اوقات اين به خاطر اين است که شما در يک تابعي درجمله WHERE در يک انتخابي که آرگوماني از يک تابع ديگر است و خروجي آن داراي رشته اجرايي است که بعدا در جمله LIKE استفاده مي شود گير مي کنيد نه SQL سرور مي‌تواند در چنين حالاتي به ما کمک کند .

3.2.6 متناسب نبودن ستون عددي .
اگر اشتباه لغوي را دفع کنيد سخت ترين حل شده است پيغام خطاي بعدي درمورد نام نامناسب براي جداول است بايد يک نام معتبر براي جدول سيستم از ضميمه اي که مربوط به سرور پايگاه داده اي است که با آن کار مي کنيد انتخاب کنيد .
احتمالا لغزش با پيغام خطايي که درمورد تفاوت در تعداد فيلدها query‌هايUNION SELECT , SELECT هستند مواجه مي شويد .
در تعداد ستونهاي مورد درخواست در query منطقي را بيابيد فرض کنيم اين
که برنامه کاربردي Web ي است که شما با آن سروکار داريد .
کد:
SQL String = SELECT First name , last Name ,  Empolyees  ID  FROM  Employees
WHERE City = & strcity
SELECT منطقي و UNION SELECT اضافه شده بايد در جمله WHERE ستونهاي مساوي داشته باشند در حالت قبل هر دو بايد سه ستون داشته باشند نه تنها تعداد ستونها بلکه نوع آنها هم بايد با هم مطابقت داشته باشند اگر First name ازنوعstring است فيلد مربوط در رشته اضافه شده هم بايد از نوعstring باشد .
البته در سرور SQL قرار دادن داده عددي درحالت Charمشکلي نداردچون اعداد مي توانند به رشته تبديل شود ولي قرار دادن text درستون smallint غير قانوني است زيرا text نمي تواند به injeger تبديل شود چون نوع عددي به راحتي به string تبديل مي شودولي عکس آن ممکن نيست مقدار پيش فرض رااز نوع عددي درنظر مي گيريم .
براي بدست آوردن تعداد ستونهايي که لازم داريد براي مطابقت مقاديري را به UNION SELECT اضافه کنيد تا جايي که دريافت پيغام خطاي عدم مطابقت ستون عددي را متوقف شود اگر باخطاي عدم تطابق نوع داده مواجه شويد نوع داده ستون مورد نظر را از عدد تا حروف تغيير دهيد . برخي اوقات به محض ايجاد يک نوع داده غلط با پيغام خطاي محاوره مواجه مي شويد و بقيه اوقات خطاي محاوره وقتي شما شماره درست ستون را مطابقت داديد دنبال ستوني که خطا را ايجاد کرده مي گرديد ايجاد مي شود .
اگر همه چيز به خوبي پيش برود شما صفحه اي باهمان ساختار فرمت نوع منطقي آن دريافت مي کنيد هر جايي که از محتويات پويا استفاده مي شويد بايد نتايجquery اضافه شده را دريافت کنيد .

3.2.7 ستون WHERE اضافي
برخي اوقات مشکل شرطWHERE اضافي اضافه شده به query بعد از رشته اضافي شده است .
مثلا به خط که زير توجه کنيد .
کد:
SQL String = SELECT First name , last Name ,  title  FROM  Employees
WHERE City = & strcity & AND Country = USA
اگر بخواهيم با query به صورت يک direct injection مستقيم برخورد کنيم query به صورت زير خواهد بود
کد:
SELECT First name , last Name ,  title  FROM  Employees
WHERE City
Nosuch city  UNION ALL SELECT other field FROM other table WHERE 1=1 AND Country = USA
که پيغام خطاي زير را ايجاد مي کند .
کد:
[ Microsoft ] [ ODBC SQL Server Driver ] [ SQL Server ] invalid colvmn nam country
مشکل اين جاست که query اضافه شده جدولي در FROM ندارد که ستوني به نام Contry در آن باشد دو راه براي حل اين مشکل وجود دارد تقلب واستفاده از پاين دهنده اگر از SQL کردن آن به سرور استفاده مي کنيد ، يا حدس نام جدولي که ستون شکل دار در آن است واضافه کردن آن به .FROM

3.2.8 جدول ونام فيلد
حال که کار injection را تمام کرديد بايد تصميم بگيريد که از کدام جدولها و کدام فيلد اطلاعات را باز پس بگيريد در SQL سرور را حتي مي توانيد نام تمام جداول وستونها را در پايگاه داده بگيريد Access , oracle بسته به مزيتهاي account که برنامه هاي کاربردي Webبا آن به پايگاه داده دسترسي دارد . ممکن است .
در اينجاSQL سرور Sysobject و syscolumns ناميده ميشوند ( سيستمي از جدولهاي سيستم براي سرورهاي پايگاه داده هايي ديگر در انتهاي اين متن است دانستن نام ستونهاي شما به در آن جدولها ضروري است ) در اين جدولها نيستي از همه جدولهاو ستونها در پايگاه داده وجوددارد براي گرفتن ليست جدولهاي کاربر درSQL Server از injection query زير استفاده مي کنيم .
کد:
SELECT name FROM Sysobjects WHERE Xtype = U
اين دستور نام تمام جداولي که توسط کاربر تعريف شده اند را در پايگاه داده بر مي گرداند ( اين کاري است که Xtype = U انجام مي دهد ) مي توانيد نام فيلدها را درجدول باinjection query مشابه زير بدست مي آوريد.
کد:
SELECT  name ,  FROM  syscolmns WHERE id ( SELECT id FROM Sysobjects
WHERE name = ( orders)

3.2.9 سيکل تک رکوردي
اگر ممکن بود دستور العملي را به کار ببريد که تا جايي که مي تواند نتايج بيشتري را بر گرداند .
با استفاده tool مي توانيد براي اين کار استفاده کنيد چون براي برگرداندن
نتايج از سطرهاي مختلف به صورت يکي ساخته شده است برخي دستور العمل ها براي استفاده از يک رکورد در خروجي شان وناديده گرفتن بقيه ساخته شده اند . مي توانيد از injection query طوري استفاده کنيد که به آرامي ولي با اطمينان اطلاعات مورد در خواست خود را به طورکامل دريافت کنيد .


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
03-30-2017, 01:26 AM
ارسال: #9
مفاهیم مبنایی در sql
مفاهيم مبنايي :
مفهوم پايگاه داده ها : پايگاه داده ها در ساده ترين وجه به مثابه مخزني ميماند که اطلاعات و داده ها به صورت منسجم و احتمالا ساخت يافته در آن نگهداري ميشود . اين مخزن ميتواند يک فايل متني يا باينري ساده باشد .
همزمان با پيدايش تکنولوژي ذخيره سازي اطلاعات و فايلها ، پايگاه داده ها نيز متولد شد و همزمان با رشد تکنولوژي ذخيره و بازيابي اطلاعات و سيستم فايلينگ ، پايگاه داده ها نيز به صورت موازي و با آن رشد کرد . پايگاه داده ها از زمان تولد تا کنون پنج نسل را سپري کرده است .
همزمان با گسترش نياز کاربران براي ذخيره سازي و بازيابي اطلاعات برنامه نويسان متعددي اقدام به ايجاد برنامه هايي با اهداف و کاربردهاي متفاوت کردند . صرف نظر از برنامه هايي که از نظر کاربرد کاملا متفاوت بودند برنامه هايي نيز وجود داشتند که ماهيت و کاربرد يکساني داشتند ولي توسط برنامه نويسان متعدد ايجاد شده بودند . بهترين مثال براي اين مطلب دفـتـــرچـــه تلـفــن ميباشد .

[تصویر:  6362647533438520860SQL1.JPG]

چندين و چند نسخه متفاوت دفترچه تلفن موجود بود که همه آنها امکانات کاملا مشابهي داشتند ولي الگوريتمها و روشهاي برنامه نويسي آنها کاملا متفاوت بود . مهمترين وعمده ترين تفاوتهاي که بين اين برنامه ها وجود داشت در زير ذکر شده اند :
• نوع و ماهيت فايلي که اطلاعات در آن ذخيره ميشد ( بعضيهااز نوع باينري و بعضي TXT و... بودند )
• الگوريتم و روش ذخيره سازي داده ها در فايل
• نام توابع ( فرضا تابع مربوط به جستجو در هر برنامه نامي مطابق با سليقه برنامه نويس داشت )
تمام اين برنامه ها در واقع نوعي بانک اطلاعاتي هستند که براي اهداف خاص ايجاد شده اند . لذا به منابع داده در هر برنامه به جز در همان برنامه در جاي ديگري کاربرد نداشت و به هيچ درد ديگري نميخورد حتي برنامه هايي که مشابه بودند ( مانند دفترچه تلفن ) نيز ( بنا به دلايل ذکر شده ) نميتوانستند با هم تبادل اطلاعات داشته باشند و اگر ميخواستيم از فايل حاوي داده هاي يک دفترچه تلفن در دفترچه تلفن ديگري استفاده کنيم هيچ راهي وجود نداشت . در ضمن در تمام اين برنامه ها به جز فايل و برنامه نوشته شده توسط برنامه نويس هيچ چيز ديگري وجود نداشت که بتواند امنيت داده ها را تضمين کند . و به طور کلي داده ها را کنترل و مديريت کند . مشکل ديگري که اين برنامه ها داشتند اين بود که اين برنامه ها تنها قابليت اين را داشتند که يک کاربر از آنها استفاده کند و استفاده به صورت اشتراکي از منابع داده ها امکان پذير نبود . با گسترش روز افزون اطلاعات و نياز روز افزون کاربران براي ذخيره و بازيابي اطلاعات و دسترسي سريع به اطلاعات و لزوم تامين امنيت اطلاعات ، لازم بود برنامه هاي تخصصي و ويژه اي براي اين منظور ايجاد شوند . لذا چندين شرکت تصميم به طراحي و توليد چنين برنامه هايي را گرفتند که از شرکتهاي IBM و Microsoft و چند شرکت ديگر به عنوان پيشگامان اين امر ميتوان نام برد .
برنامه هاي مذکور پايگاه داده ها نام گرفتند . شرکتهاي مذکور بايد برنامه هايي را ايجاد ميکردند که قابليت استفاده براي مصارف گوناگون را داشته باشد . در ضمن اين برنامه ها بايد داراي قسمتي باشند که به عنوان واسط بين برنامه کاربردي و فايلها (منابع داده ) قرار بگيرد و عملياتهاي مربوط به ايجاد ، حذف و تغيير و ... را در منابع داده را کنترل و مديريت کند . اين برنامه واسط را DBMS ناميدند .
DBMS اختصار (DATABASE MANANGMENT SYSTEM ) ميباشد که معناي لغوي آن سيستم مديريت پايگاه داده يا سيستم مديريت داده ها ميباشد .
بايد خدمتتون عرض کنم که بزرگترين جهشي که پايگاه داده ها در راستاي رشد و تکامل داشت مربوط به همين قسمت يعني توليد و تکامل DBMS ميباشد . گفتيم که وظيفه DBMS اين است که بين برنامه کاربردي و منابع داده ها قرار بگيرد و کليه عملياتهاي مربوط به( ايجاد ، تغيير ، حذف و .... ) منابع داده ها را کنترل و مديريت کند . کنترل و مديريت منابع داده ها بسيار کلي و ميباشد و اگر بخواهيم منظور از کنترل و مديريت را کامل شرح دهيم بايد ساعتها وقت صرف کنيم و دهها صفحه مطلب بنويسيم که قطعا در اين مجموعه نخواهد گنجيد ضمن آنکه اين مطالب کاربردي نيط نيستند و تنها جنبه اطلاعاتي دارند لذا تنها چند نکته مهم را ذکر ميکنم و در صورتي که علاقمند بوديد بيشتر بدانيد ميتوانيد به کتابهاي موجود در اين زمينه مراجعه فرماييد .

منظور از کنترل و مديريت :
• مصون کردن برنامه هاي کاربردي در قبال تغييرات در سخت افزار ذخيره سازي .
• مديريت رکوردهاي سرريز که پس از لود اوليه بايد در فايل وارد شوند .
• ايجاد فايل با ساختارهاي گوناگون
• فراهم کردن امکاناتي براي دستيابي مستقيم و ترتيبي به رکوردها و فيلدها
• جدا کردن ساختار فيزيکي و منطقي فايلها از يکديگر
• تامين ايمني و حفاظت داده ها
• جلوگيري از تکرار ذخيره سازي داده ها ( تاحدي )
• فراهم کردن امکاناتي براي پردازش بلادرنگ (real time ) بسته به نوع سيستم عامل
• تامين صحت داده هاي ذخيره شده ( تاحدي )
• فراهم کردن امکاناتي براي بازيابي بکمک چند کليد
• فراهم کردن امکاناتي براي استفاده چند کاربر به صورت همزمان از منبع داده و کنترل آن
• کنترل و مديريت مسائل مربوط به همزماني و سطح دسترسي کاربران به منبع داده ها
• و .....

با توجه به موارد ذکر شده شرکتها سيستمهاي گوناگوني را به اين منظور طراحي و توليد کردند که هر سيستم داراي يک رابط گرافيکي براي گرفتن و انجام فرامين کاربر و يک DBMS بود که تمام مطالب ذکر شده در بالا در اين سيستمها لحاظ شده بودند . علاوه بر اين دو دفترچه اي نيز به همراه سيستم ارائه ميشد که حاوي نام و کاربرد توابع موجود در سيستم بود . برنامه نويسان در صورت نياز ميتوانستند از اين توابع در برنامه هاي خود استفاده کنند و دستوري را به سيستم ارسال کنند . رابطه اين توابع با سيستم مورد نظر دقيقا مانند رابطه توابع API موجود در ويندوز و خود ويندوز ميباشد . اندک زماني پس از توليد اين سيستمها کنسرسيومي تشکيل شد که اقدام به تهيه استانداردهايي در زمينه توليد نرم افزارهاي بانک اطلاعاتي کرد و از آن پس تمام شرکتهاي توليد کننده ملزم به رعايت اين استانداردها بودند . يکي از اين تصميمات و استانداردها يکسان سازي نام توابع در تمام سيستمها بود . ديگر آنکه قرار بر آن شد که يکسري کلمات و عبارات ويژه درنظر گرفته شوند که هر يک معرف عملياتي ويژه باشند و برنامه اي به تمام سيستمها اضافه شود که وظيفه آن دريافت ، تفسير و اجراي اين عبارات (دستورات ) باشد . مجموعه اين کلمات و برنامه اي که وظيفه تفسير آنها را داشت ، منجر به توليد زبان مشترکي براي بانکهاي اطلاعاتي شد . اين زبان برنامه نويسي زبان پايه تمام بانکهاي اطلاعاتي ميباشد که آن را T-SQL مينامند که اختصار (Transact Structured Query Language ) ميباشد .
در واقع وظيفه اين کلمات و عبارات فراخواني توابع موجود در سيستم ميباشد . دستورات زبانSQL به دوبخش تقسيم ميشود :
• دستورات مربوط به کار با داده ها ( DML)
• دستورات مربوط به تعريف داده ها ( DDL )

تمامي سيستمهاي ارائه شده در DML دستورات کاملا مشابهي را دارا ميباشند اما در بخش DDL داراي تفاوتهاي جزئي ميباشند . در ضمن سيستمهاي مختلف ارائه شده علاوه بر دستوراتي که کار يکساني را انجام ميدهند ممکن است دستورات اضافه تري نيز داشته باشند که وظيفه اين دستورات اضافي انجام عملياتهاي ترکيبي ميباشد . جلوتر بيشتر با اين زبان برنامه نويسي و دستورات آن آشنا خواهيم شد و در مثالهاي مختلف از دستورات مختلف اين زبان استفاده خواهيم کرد .
خوب تا اينجا با تاريخچه پايگاه داده ها به صورت کلي و ساده آشنا شديم . در زير چکيده اي از مطالب بالا را به همراه مزيتهاي بوجود آمدن تکنولوژي بانک اطلاعاتي را ذکر خواهم کرد .و از اين پس ميرويم سراغ مفاهيم کاربردي پايگاه داده ها . دقت کنيد که مفاهيم و کلمات مهم را به صورت زير خط دار و زردرنگ نوشته ام .
از مجموعه مطالب ذکر شده در بالا فهميديم که :
با گسترش روز افزون اطلاعات و نياز کاربران به ذخيره و بازيابي اطلاعات سيستمهايي طراحي شدند که قابليت استفاده براي مصارف گوناگون را دارا ميباشند . همچنين اين برنامه ها امکان استفاده اشتراکي از منابع داده را نيز فراهم کردند . در اين سيستمها ما به هر فايلي که اطلاعاتي با ساختار معين در آن قرار گرفته است را منبع داده ميناميم. اين سيستمها به صورت تخصصي براي ذخيره و بازيابي اطلاعات طراحي و ساخته شده اند از اين رو به اين سيستمها پايگاه داده ها يا همان بانک اطلاعاتي ميگوييم . تمامي پايگاه داده هاي موجود داراي بخشي با عنوان DBMS يا سيستم مديريت داده ها ميباشند که به عنوان واسط مابين برنامه کاربردي و منبع داده قرار ميگيرد و کليه موارد مربوط به ذخيره و بازيابي لطلاعات را به صورت خودکار کنترل ميکند . اين سيستم همچنين مسئول تامين امنيت داده هاي ذخيره شده نيز ميباشد . سيستمهاي ارائه شده محصول هر شرکتي که باشند از استاندارد واحدي براي ذخيره و بازيابي اطلاعات تبعيت ميکنند . در ضمن تمامي پايگاه داده هاي موجود داراي يک زبان پايه و مشترک با نام T-SQL مبباشند که برنامه نويسان در اکثر موارد بدون آنکه نوع بانک مورد نظر مهم باشد ميتوانند از اين زبان براي انجام امور بانکي در برنامه هاي خود استفاده کنند . علاوه بر مطالب ذکر شده بايد خدمتتون عرض کنم که بانکهاي اطلاعاتي داراي مزيتهاي بينظيري ميباشند که اين مزيتها به تدريج به اين تکنولوژي اضافه شدند .از جمله اين مزيتها ميتوان کنترل متمرکز روي تمام داده هارا نام برد که يکي از مزاياي اين امر کاهش ميزان افزونگي در ذخيره سازي داده ها ميباشد .در واقع در تکنولوژي بانکهاي اطلاعاتي تکرار ذخيره سازي داده ها به حداقل ميرسد که اين امر خود داراي مزاياي فراواني ميباشد که صرفه جويي در فضاي ذخيره سازي و کاهش عمليات سيستم از جمله مهمترين آنها ميباشد . يکي ديگر از مزيتهاي مهم بانکهاي اطلاعاتي اين است که با گسترش اين تکنولوژي مفهوم چند سطحي بودن و معماري چند لايه به تدريج قوت يافت و بسط پيدا کرد . از ديگر مزاياي اين تکنولوژي اين است که مفاهيمي چون منطق صوري ، سيستمهاي خبره ، مفاهيم هوش مصنوعي و ... نيز در اين تکنولوژي رخنه کرده اند که اين امر موجب ميشود که سيستم قادر به استنتاج منطقي از داده هاي ذخيره شده باشد . و به عنوان آخرين مزيت نيز ميتوان اين مورد را ذکر کرد که در اين سيستمها کاربران در يک محيط انتزاعي (ABSTRACTIVE) و مبتني بر يک ساختار داده يي تجريدي کار ميکنند و بکمک احکام زباني خاص ، عمليات مورد نظر خود را انجام ميدهندو بدين ترتيب برنامه هاي کاربردي ازداده هاي محيط فيزيکي کاملا مستقل ميشوند .من گفتم آخرين مزيت اما اين آخرين مزيت نيست بلکه آخرين مزيتي است که من ذکر ميکنم و مزيتهاي استفاده از بانک اطلاعاتي نيز آنقدر زياد است که از حوصله اين مقاله خارج ميباشد .
تا اينجا بحث بارها به کلمات داده ها و اطلاعات برخورد کرده ايم . اما مفهوم واقعي اين دو چيست ؟ در زير تعريف اين دو واژه را براي شما ذکر خواهم کرد و با تفاوتهاي اين دو آشنا خواهيم شد .
توجه : مطالبي که از اينجا به بعد ذکر خواهند شد بسيار بسيار مهم و حياتي ميباشند لذا خواهشمندم تا زماني که هر خط را کاملا متوجه نشده ايد هرگز سراغ خط بعدي نرويد . حتي اگر صد بار يک خط را تکرار کنيد .
مفهوم داده :
داده عبارت است از مقادير صفات خاصه (ATTRIBUTES) انواع موجوديت ها .
خوب با ارائه تعريفي براي داده با دو واژه ديگر نيز برخوردکرديم که احتمالا براي شما نامفهوم ميباشد لذا تعريفي براي اين دو نيز ارائه خواهم داد .
نوع موجوديت : مفهوم کلي يک پديده ، شي و يا فرد که در ورد آنها ميخواهيم اطلاع داشته باشيم .
صفت خاصه : ويژگي جداساز يک نوع موجوديت از نوع ديگر را گويند .
ببينيد دوستان اگر ما يک فرد يا يک شي يا يک پديده را درنظر بگيريم و بخواهيم در مورد آن اطلاعاتي کسب کنيم آن شي ، يا فرد يا پديده را موجوديت ميناميم . فرض کنيد ما انسان را در نظر ميگيريم و از بين انسانها فردي را انتخاب ميکنيم و ميخواهيم در مورد اين فرد اطلاعاتي کسب کنيم . فردي که ما انتخاب کرده ايم موجوديت ميباشد . فرض کنيد اين موجوديت من هستم . خوب من حتما داراي آيتمهايي هستم که من را از شما متمايز ميکند . هر يک از اين آيتمها را نيز صفت خاصه ميگوييم .
خوب اگر من يک موجوديت باشم قطعا يکي از صفات خاصه من نام من ميباشد و ديگري نام پدرم و ديگري شماره شناسنامه ام و .... درست ؟ حالا مقدار هريک از اين صفات خاصه من را داده ميگويند . به عنوان مثال نام من عليرضا است پس عريضا يک داده است . شماره شناسنامه من 1912 ميباشد پس عدد 1912 داده بعدي من ميباشد و ...
پس موجوديت ما يک انسان در نظر گرفته شد که اين انسان توسط يـکسري صفاتي دارد که مختص انـسـان اسـت ( صفات خاصه ) و هر يک از اين صفات خاصه داراي مقداري هستند که اين مقدار نيز همان داده است
اطلاع : اطلاع از داده حاصل ميشود و در حل مسائل به کار ميرود .
ببينيد هر داده هنگامي که در يک موقعيت مشخص براي حل مساله اي به کار گرفته شود به اطلاع تبديل ميشود . در بالا موجوديت ما انسان بود که بنده بودم خوب من به جز نام و شماره شناسنامه و ... صفات خاصه ديگري نيز دارم که يک نمونه از آنها معدل ديپلم من است . فرض کنيد معدل ديپلم من 17 باشد . پس 17 نيز يک داده است . حال اگر بخواهيم بالاترين معدل را در بين دانش آموزان ديپلم گرفته تهران پيدا کنيم چون از داده هاي موجود در فرمول پيدا کردن ماکزيمم استفاده ميکنيم لذا عدد 17 که تاکنون داده بود به اطلاع تبديل ميشود
ميدانم که احتمالا درک اين مطالب احتمالا کمي مشکل به نظر ميآيد اما اگر کمي دقت کنيم ميبينيم که اتفاقا بسيار ساده هستند . از طرفي اگر کسي اين مفاهيم را نفهمد قطعا از اينجا به بعد هيچ چيز ديگري را نيز نخواهد فهميد چون از اين واژه ها و مفاهيم آنها بارها و بارها استفاده خواهيم کرد و پايه تمام مطالب جديذي که جلوتر ذکر خواهم کرد .
يک بار ديگر و براي آخرين بار اين مطالب را با مثال شرح ميدهم و سپس به سراغ مطالب بعدي خواهيم رفت .
در کل چهار تا واژه بسيار مهم و کاربردي داريم :
• داده
• موجيديت
• صفت خاصه
• اطلاع
در اين کره خاکي و اين جهان هستي ما سه تا دسته بيشتر نداريم . يعني هر چيزي که ما ميتوانيم نام ببريم يا يک شي (مانند قابلمه ) است يا يک فرد ( مانند شما ) است يا يک پديده ( مانند زلزله ) . ما به هريک از اجزاء اين سه دسته موجوديت ميگوييم . چرا چون وجود دارد . يعني قابلمه وجود دارد پس قابلمه يک موجوديت ميباشد . حالا ما چندين و چند مدل قابلمه داريم که اين قابلمه ها با هم فرقهايي دارند . خوب عامل اين تفاوتها چيست ؟ درسته هر قابلمه داراي يکسري خصوصيتها و صفاتي ميباشد که اين قابلمه را از قابلمه ديگر جدا ميکند و علاوه بر آن همان صفات باعث ميشنود تا بين من و قابلمه هم فرقي بوجود آيد جون قابلمه صفاتي دارد که من ندارم و اين صفات مخصوص قابلمه است نه انسان ! پس قابلمه داراي يکسري صفات است که مخصوص قابلمه است که ما به هر يک از اين صفات صفت خاصه ميگوييم . هر صفت خاصه اين قابلمه داراي يک مقدار است . مثلا اگر رنگ قابلمه را به عنوان يکي از صفات خاصه آن در نظر بگيريم قطعا اين صفت خاصه مقداري دارد که ما فرض ميکنيم نارنجي است . خوب نارنجي هم شد داده ما . حالا اگر ما در يک پردازش يا در حل يک مساله از نارنجي استفاده کنيم نارنجي از داده به اطلاع تبديل ميشود . اميدوارم ديگه همه اين مفاهيم را فهميده باشند .
پس در حالت کلي موجوديت هر شي يا عين قابل تميز است که ما ميخواهيم داده هاي آن را در بانک بريزيم و در صورت نياز از آن اطلاعات داشته باشيم /. اگر ما مجموعه اي از موجوديت ها را در نظر بگيريم به ان مجوعه محيط عملياتي ميگويند . فرضا اگر موجوديت ما دانشجو باشد محيط عملياتي ما ميشود دانشگاه . محيط عملياتي بر اساس نوع برنامه اي که قرار است درست کنيم تغيير ميکند . اگر بخواهيم برنامه کتابخانه بنويسيم موجوديت ما کتاب است و محيط عملياتي ما نيز کتابخانه . اگر بخواهيم برنامه اي براي انتخاب واحد دانشجويان بنويسيم موجوديت ما ميشود دانشجو و محيط عملياتي ما نيز دانشگاه ميباشد .
محيط عملياتي هر چيزي که باشد موجوديتهاي آن با هم ارتباطاطي دارند . به عنوان مثال بين دانشجو و درس ارتباطاطي وجود دارد که دانستن اين ارتباطات در طراحي برنامه نقش حياتي دارند . ارتباط بين موجوديت ها انواع مختلفي دارد که در زير ذکر خواهم کرد :
• ارتباط يک به يک
• ارتباط يک به چند
• ارتباط چند به يک
• ارتباط چند به چند


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
03-30-2017, 01:34 AM (آخرین ویرایش در این ارسال: 05-27-2017 02:13 PM، توسط ali.)
ارسال: #10
اصول SQL و پروژه
[size=medium]SQL Server داراي چهار پايگاه داده سيستمي tempdb, model, master و msdb و يك يا چند پايگاه داده مربوط به كاربران است. برخي از سازمان ها فقط داراي يك پايگاه داده كاربر هستند كه شامل تمام داده هاي آنها است. برخي از سازمان ها نيز داراي پايگاه هاي داده مختلفي براي هر گروه در سازمان هستند. به عنوان مثال، يك سازمان مي تواند يك پايگاه داده براي فروش، يك پايگاه داده براي حقوق و يك پايگاه داده براي مديريت اسناد داشته باشد.
لازم نيست كه چند نسخه از SQL Server را اجرا كنيد تا كاربران بتوانند به پايگاه هاي داده يك سرويس دهنده دسترسي يابند. SQL Server قادر به جوابگويي به هزاران كاربر در پايگاه هاي داده مختلف به طور همزمان بر روي يك سرويس دهنده مي باشد. SQL Server تمام پايگاه هاي داده موجود در سرويس دهنده را براي تمام كاربراني كه به سرويس دهنده متصل هستند، با توجه به جوازهايشان قابل دسترسي مي سازد.
هنگام اتصال به SQL Server ، اتصال شما با يك پايگاه داده مشخص روي سرويس دهنده در ارتباط مي باشد. اين پايگاه داده، پايگاه دادة جاري ناميده مي شود. شما معمولاً به پايگاه داده اي كه به عنوان پيش فرض توسط مدير سيستم تعريف شده است متصل هستيد مگر اين كه با استفاده از گزينه هاي اتصال API هاي پايگاه داده، پايگاه داده ديگري را مشخص كنيد.

[align=center]
[تصویر:  6362647582583476970SQL3.JPG]

اجزاء منطقي پايگاه داده
داده هاي درون يك پايگاه داده SQL Server در چند شيء مختلف ذخيره شده اند. اين شيء ها پس از اتصال به پايگاه داده، براي كاربر قابل رؤيت هستند.
در SQL Server اجزاء زير به صورت شيء تعريف شده اند :
محدوديت ها جدول ها
پيش فرض ها Trigger ها
شاخص ها نوع هاي داده اي تعريف شده توسط كاربر
كليدها ديدها
رويه هاي ذخيره شده
نوع هاي داده اي و ساختار جدول
تمام داده هاي پايگاه داده SQL Server در شيء هايي به نام جدول قرار دارند. هر جدول دلالت بر شيء اي دارد كه براي كاربر با معنا مي باشد. به عنوان مثال، در يك پايگاه داده مدرسه، جدول ها مي توانند جدول كلاس، جدول معلم و جدول دانش آموز باشد.
جدول هاي SQL Server داراي دو جزء اساسي هستند :
• ستون :‌ نشان دهنده بعضي از صفت هاي شيء اي است كه توسط جدول مدل سازي شده است.
• سطر : نشان دهنده نمونه اي از يك شيء است كه توسط جدول مدل سازي شده است.

ميدان، مجموعه اي از تمام مقادير مجاز در يك ستون است. به عنوان مثال، ميدان رنگ قطعه هم شامل نوع داده اي مانند char(6) و هم شامل رشته هاي كاراكتري مجاز در ستون مانند Green, Blue, Red و غيره است.
جدول ها، كنترل هاي متعددي دارند كه صحت داده ها را تضمين مي كنند. به عنوان مثال، مي توانيد پايگاه داده اي به نام MyCoDb براي مديريت داده هاي شركت خود ايجاد كنيد. مي توانيد جدولي به نام Employees براي ذخيره اطلاعات كارمندان ايجاد كنيد. جدول مي تواند ستون هايي به نام ؟؟؟ داشته باشد. مي توانيد رويه اي به نام ؟؟ ايجاد كنيد تا مقادير داده اي مربوط به يك كارمند جديد را دريافت كرده و عمليات مربوط به درج سطر در جدول Employees را انجام دهد.
ستون ها مي توانند مقادير NULL را قبول كرده و يا رد نمايند. NULL يك مقدار ويژه در پايگاه داده است كه مفهوم" مقدار ناشناخته" را در بر دارد. NULL با مقادير جاي خالي يا صفر تفاوت دارد. جاي خالي در واقع يك كاراكتر مجاز و صفر يك عدد مجاز است در حالي كه NULL صرفاً نشان دهنده اين باور است كه ما نمي دانيم اين مقدار چيست. NULL با رشته به طول صفر نيز تفاوت دارد.
SQL Server داده هاي مربوط به تعريف مشخصات سرويس دهنده و تمام جدول هاي خود را در مجموعه ويژه اي از جدول ها به نام جدول هاي سيستمي ذخيره مي كند. كاربران نبايد مستقيماً جدول هاي سيستمي را بهنگام سازي كرده و يا روي آنها پرس و جوهايي اجرا كنند. فقط SQL Server بايد در پاسخ به دستورات مديريتي كه توسط كاربران صادر مي شود به جدول هاي سيستمي ارجاع كند.
SQL Server داراي جدول موقت مي باشد. نام اين گونه جدول ها با علامت شروع مي شود. اگر يك جدول موقت هنگام قطع اتصال كاربر حذف نشود، به طور خودكار توسط SQL Server حذف مي شود. جدول هاي موقت در پايگاه داده جاري ذخيره نمي شوند بلكه در جدول سيستمي tempdb ذخيره مي شوند. دو نوع جدول موقت وجود دارد :
• جدول هاي موقت محلي كه فقط داراي يك علامت # در ابتداي نامشان هستند. اين جدول ها فقط براي اتصالي كه آنها را ايجاد كرده است قابل رؤيت هستند.
• جدول هاي موقت عمومي كه داراي دو علامت # در ابتداي نامشان هستند. اين جدول ها براي تمام اتصال ها قابل رؤيت هستند. اگر اين جدول ها توسط اتصالي كه آنها را ايجاد كرده است قبل از قطع اتصال صريحاً حذف نشوند، به طور خودكار پس از اين كه تمام اتصال هاي ديگر، ارجاع خود به اين جدول ها را پايان دادند، بلافاصله حذف مي شوند. اگر اتصالي كه يك جدول موقت را ايجاد كرده است قطع گردد، از آن پس ديگر هيچ اتصال جديدي نمي تواند به جدول موقت ارجاع كند.

ديدهاي SQL
ديد را مي توان به عنوان يك جدول مجازي يا پرس و جوي ذخيره شده درنظر گرفت. داده هايي كه از طريق يك ديد قابل دستيابي هستند به عنوان يك شيء مجزا در پايگاه داده ذخيره نمي شوند. چيزي كه در پايگاه داده ذخيره مي شود يك دستور SELECT است. مجمموعه نتيجه دستور SELECT ، جدول مجازي حاصل از ديد را تشكيل مي دهد. از ديد براي انجام كارهاي زير استفاده مي شود :
• محدود كردن كاربر به سطرهاي ويژه اي از يك جدول.
• محدود كردن كاربر به ستون هاي ويژه اي از يك جدول.
• الحاق ستون هايي از جدول هاي مختلف به طوري كه همانند يك جدول باشند.
• بدست آوردن اطلاعات جمعي به جاي پرداختن به جزئيات.
جدول هايي كه دستور SELECT موجود در تعريف ديد به آنها ارجاع مي كند، جدول مبنا ناميده مي شوند.
پس از تعريف ديد، مي توانيد همانند يك جدول به آن ارجاع كنيد. در تعريف ديد مي توان به يك ديد ديگر ارجاع كرد.
ديدهاي SQL Server قابل بهنگام سازي هستند در صورتي كه عمل بهنگام سازي فقط بر يكي از جدول هاي مبنايي كه توسط ديد ارجاع مي شود، تاثير داشته باشد.

رويه هاي ذخيره شده

رويه ذخيره شده، مجموعه اي از دستورات Transact-SQL است كه در يك طرح اجرايي كامپايل شده اند.
رويه هاي ذخيره شده به چهار طريق داده ها را باز مي گردانند :
1- پارامترهاي خروجي كه مي توانند داده يا يك متغير كرزر را باز گردانند.
2- كدهاي بازگشتي كه همواره مقادير صحيح هستند.
3- براي هر دستور SELECT درون رويه ذخيره يا رويه هاي ذخيره شده ديگري كه در اين رويه قرار دارند، يك مجموعه نتيجه بازي گرداند.
4- كرزر عمومي كه نمي تواند خارج از رويه ذخيره شده ارجاع شود.
نمونه اي از يك رويه ذخيره شده را در زير مشاهده مي كنيد :
برنامه هاي كاربردي لازم نيست كه تمام دستورات SQL درون رويه را ارسال كنند . در عوض فقط يك دستور EXECUTE يا CALL كه شامل نام رويه و مقادير پارامتر ها است ارسال مي شود.
رويه هاي ذخيره شده كاربران را از جزئيات جدول هاي درون پايگاه داده بي نياز مي كنند. اگر مجموعه اي از رويه هاي ذخيره شده تمام كارهاي مورد نياز كاربران را پشتيباني كند كاربران هرگز مجبور نخواهند بود كه مستقيماً به جدول ها دسترسي يابند. يك نمونه از اين نحوه استفاده از رويه هاي ذخيره شده ، رويه هاي ذخيره شده سيستمي SQL Server است كه كاربران را از ارتباط مستقيم با جدول هاي سيستمي بي نياز مي كند. نام اين رويه هاي ذخيره شده با SP شروع مي شود. اين رويه هاي ذخيره شده تمام وظايف مديريتي لازم براي اجراي SQL Server را پشتيباني مي كند. در واقع، شما مي توانيد با استفاده از دستورات مديريتي Transact-SQL يا رويه هاي ذخيره شده سيستمي، SQL Server را مديريت نماييد و هرگز نياز نخواهيد داشت كه مستقيماً جدول هاي سيستمي را بهنگام سازي كنيد.
اجراي يك رويه ذخيره شده بهتر از اجراي يك دستور SQL مي باشد زيرا لازم نيست SQL Server به طور كامل يك طرح اجرا را كامپايل نمايد و فقط بايد بهينه سازي طرح ذخيره شده رويه را تكميل نمايد.
SQL Server داراي رويه هاي ذخيره شده موقت نيز مي باشد كه هنگام قطع اتصال حذف مي شوند. رويه هاي ذخيره شده موقت در tempdb ذخيره مي شوند. از اين رويه ها بيشتر در مواقعي استفاده مي شود كه برنامه هاي كاربردي، دستورات SQL-Transact پويا توليد مي كنند و چندين بار اجرا مي شوند. به جاي اين كه دستورات SQL Server چند بار كامپايل شوند، مي توان يك رويه ذخيره شده ايجاد كرد كه در اولين اجراي خود كامپايل شده و سپس طرح از پيش كامپايل شده چندين بار اجرا شود. استفاده بيش از حد از رويه هاي ذخيره شده موقت، منجر به ايجاد تداخل در جدول هاي سيستمي tempdb مي شود.
در زير، مثال ساده اي بيان شده است كه سه روش بازگرداندن داده ها توسط رويه هاي ذخيره شده را تشريح مي كند :
1- ابتدا يك دستور SELECT اجرا مي شود كه مجموعه نتيجه اي را از فروشگاه هاي جدول Sales باز مي گرداند.
2- سپس يك دستور SELECT اجرا مي شود كه يك پارامتر خروجي را مقدار دهي مي كند.
3- در ا نتها، يك دستور RETURN به همراه يك دستور SELECT وجود دارد كه يك عدد صحيح را باز مي گرداند :‌

محدوديت ها
محدوديت ها روشي را ارائه مي دهند كه SQL Server جامعيت يك پايگاه داده را اعمال كند. محدوديت ها قواعد مربوط به مقادير مجاز در ستون ها را تعريف مي كنند و مكانيزم استانداردي براي ا عمال جامعيت به شمار مي آيند. پنج نوع محدوديت وجود دارد:
1- NOTNULL مقرر مي كند كه ستون، مقادير NULL را قبول نكند.
2- محدوديت CHECK ، جامعيت ميدان را با محدود كردن مقاديري كه مي تواند در يك ستون قرار گيرد، اعمال مي كند. اين محدوديت يك عبارت منطقي را مشخص مي كند كه به تمام ممقاديري كه مي خواهند در ستون وارد شوند، اعمال مي شود. تمام مقاديري كه اين عبارت منطقي براي آنها FALSE ارزيابي شود رد مي شوند. براي هر ستون مي توانيد چند محدوديت CHECK مشخص كنيد. مثال زير نشان مي دهد كه چگونه محدوديت chk id تضمين مي كند كه فقط اعدادي در محدوده مشخص شده وارد شوند :‌

3- محدوديت UNIQUE منحصر بفرد بودن مقادير در مجموعه اي از ستون ها را اعمال مي كند. هيچ دو سطري از جدول نمي توانند داراي مقادير غير NULL و يكسان در ستون هاي مشخص شده در محدوديت UNIQUE باشند.
4- محدوديت PRIMARY KEY مجموعه اي از ستون ها را مشخص مي كند كه مقادير آنها يك سطر از جدول را به طور منحصر بفرد شناسايي مي كند. هيچ دو سطري از جدول نمي تواند كليد اصلي يكسان داشته باشد. ستون هاي موجود در كليد اصلي مقادير NULL نمي پذيرند. يك جدول ممكن است داراي تركيب هاي مختلفي از ستون ها باشد كه يك سطر را به طور منحصر بفرد شناسايي مي كنند. هر تركيب يك كليد كانديد به شمار مي آيد. يكي از اين كليدهاي كانديد را مي توان به عنوان كليد اصلي انتخاب كرد.
اگر يك محدوديت PRIMARY KEY بر روي بيش از يك ستون تعريف شده باشد. مقادير موجود ندر يك ستون ممكن است تكراري باشند، اما هر تركيب از مقادير تمام ستون هاي PRIMARY KEY بايد منحصر بفرد باشند.
5- محدوديت FOREIGN KEY ارتباط بين جدول ها را ايجاد مي كند. كليد خارجي در يك جدول به يك كليد كانديد در جدول ديگر اشاره مي كند. نمي توان سطري را در جدول درج كرد كه مقدار كليد خارجي آن داراي مقدار متناظر در كليد كانديد نباشد. همچنين نمي توان سطري از يك جدول را حذف كرد اگر مقاديري از كليد خارجي به كليد كانديد آن ارجاع مي كنند. در مثال زير، ستون part_nmbr يك كليد خارجي است.
محدوديت ها مي توانند محدوديت ستوني و يا محدوديت جدولي باشند. محدوديت ستوني به عنوان قسمتي از تعريف ستون مشخص مي شود و فقط بر آن ستون اعمال مي شود. محدوديت جدولي مستقل از تعريف ستون مشخص مي شود و مي تواند بر بيشتر از يك ستون از جدول اعمال شود.
محدوديت هاي جدولي در مواقعي به كار مي روند كه بيشستر از يك ستون بايد در محدوديت شامل شود. به عنوان مثال، اگر يك جدول داراي دو يا چند ستون در كليد اصلي باشد، براي شامل كردن دو ستون در كليد اصلي بايد از محدوديت جدولي استفاده كرد.
به عنوان مثال، جدولي را درنظر بگيريد كه رويدادهاي واقع شده در يك ماشين در يك كارخانه را ثبت مي كند. فرض كنيد رويدادهايي از انواع مختلف مي توانند در يك زمان ايجاد شوند اما دو رويدادي كه در يك زمان واقع مي شوند نمي توانند از يك نوع باشند.
اين امر ميتواند در زير باشامل كردن ستونهاي time , type دريك كليد اصلي دو ستوني اعمال شود :

قاعده ها
قاعده ها بيشتر براي سازگاري با نسخه هاي قبلي درنظر گرفته شده است و بعضي از همان كارهاي محدوديت CHECK را انجام مي دهند. فقط يك قاعده مي توان براي يك ستون مشخص كرد. قاعده ها خارج از تعريف ستون و به صورت شيء هايي مجزا ايجاد مي شوند و سپس به ستون مرتبط مي شوند.
در مثال زير يك قاعده تعريف شده است كه همان كار محدوديت CHCK را انجام ميدهد:

پيش فرض ها
پيش فرض مشخص مي كند كه اگر هنگام درج يك سطر مقداري براي ستون تعيين نشود، چه مقداري براي آن مورد استفاده قرار گيرد. براي اعمال كردن پيش فرض دو روش وجود دارد :
1- با استفاده از كلمه كليدي DEFAULT در دستور CREATETABLE يك عبارت ثابت را به عنوان مقدار پيش فرض براي ستون مشخص مي كنيم.
2- با استفاده از دستور CREATETABLE يك شيء پيش فرض ايجاد مي كنيم و سپس آن را با استفاده از رويه ذخيره شده سيستمي sp_binddefault به ستون هاي مورد نظر مرتبط مي كنيم. اين روش بيشتر براي سازگاري با نسخه هاي قبلي درنظر گرفته شده است.

Trigger ها كلاس ويژه اي از رويه هاي ذخيره شده هستند كه وقتي دستورات Insert, Upda TE يا DELETE روي يك جدول صادر مي شود، به طور خودكار اجرا مي شوند. البته در صورت امكان بهتر است به جاي Trigger از محدوديت ها و مقادير پيش فرض استفاده شود.
جدول ها مي توانند چند Trigger داشته باشند. براي تعريف Trigger از دستور CREATETABLE استفاده مي شود. در اين دستور مي توان با استفاده از عبارات FOR INSERT .FOR UPDATE يا Triggger, FOR DELETE را با يكي از دستورات پردازش داده ها مرتبط كرد. SQL Server امكان مي دهد كه چند Trigger را براي يك عمل مشخص روي جدول تعريف نمود.
‏Trigger ها حاوي دستورات Transact-SQL هستند. Trigger ها همانند رويه هاي ذخيره شده، مجموعه نتيجه توليد شده توسط دستورات SELECT درون خود را باز مي گردانند، لذا اجراي دستور SELECT در Trigger ها توصيه نمي شود زيرا عموماً كاربران هنگام اجراي دستورات پردازش داده انتظار ديدن مجموعه نتيجه را ندارند.
Trigger پس از تكميل اجراي دستوري كه باعث فعال شدنش شده است، اجرا مي شود. اگر اجراي دستور با خطا همراه باشد، Trigger مربوط به آن اجرا نمي شود.

شاخص هاي جدول
شاخص در SQL Server ساختاري مرتبط با يك جدول است كه واكشي سطرهاي يك جدول را تسريع مي كند. شاخص شامل كليدهايي است كه از يك يا چند ستون جدول ساخته شده است. اين كليدها در ساختاري ذخيره شده اند كه به SQL Server امكان مي دهد سطرهاي مرتبط با مقادير شاخص را سريع تر و كارآتر جستجو نمايد.
اگر جدولي بدون شاخص ايجاد شود، سطرهاي داده اي به ترتيب خاصي ذخيره نمي شوند. اين ساختار، heap ناميده مي شود. دو نوع شاخص در SQL Server وجود دارد :
1- خوشه اي :‌ شاخص هاي خوشه اي سطرهاي جدول را براساس مقادير كليد مرتب كرده و ذخيره مي كنند. چون سطرهاي داده اي به ترتيب براساس كليد شاخص خوشه اي ذخيره مي شوند، براي جستجوي سطرها كارآيي خوبي دارند. فقط يك شاخص خوشه اي مي تواند براي هر جدول وجود داشته باشد، زيرا سطرها به خودي خود فقط به يك ترتيب مي توانند مرتب باشند.
2- غير خوشه اي : شاخص هاي غيرخوشه اي داراي ساختاري هستند كه به طور كامل از سطرهاي داده اي مجزا مي باشند. سطرها به ترتيب كليد خوشه اي ذخيره نمي شوند. پايين ترين سطرهاي يك شاخص غيرخوشه اي شامل مقادير كليد شاخص غيرخوشه اي است و هر كليد، اشاره گرهايي به سطرهايي دارد كه شامل مقدار كليد هستند.
3- شاخص ها مي توانند منحصر بفرد باشند، در اين صورت هيچ دو سطري نمي تواند مقدار يكساني براي كليد شاخص داشته باشد.
4- عامل سر ريز خاصيتي از شاخص SQL Server است كه كنترل مي كند شاخص پس از ايجاد شدن، تا چه حد متراكم شود. عامل سرريز پيش فرض معمولاً داراي كارآيي خوبي است اما در بعضي اوقات بهتر است كه تغيير كند. اگر جدول قرار است درج ها و بهنگام سازي زيادي داشته باشد، ايجاد شاخص با عامل سرريز پايين فضاي بيشتري را براي كليدهاي آتي باقي مي گذارد. اگر جدول، يك جدول فقط خواندني و بدون تغيير است، ايجاد شاخص با عامل سرريز بالا اندازه فيزيكي شاخص را كاهش مي دهد. عامل سرريز فقط وقتي اعمال مي شود كه شاخص ايجاد شده باشد. در حالي كه كليدها درج و حذف مي شوند، شاخص در نهايت در يك چگالي مشخص تثبيت مي شود.
تصميم گيري در مورد اين كه چه مجموعه اي از شاخص ها كارآيي را بهتر مي كند بستگي به تركيب پرس و جوها در سيستم دارد.

كاربرها
شناسه كاربر، يك كاربر را درون يك پايگاه داده شناسايي مي كند. تمام جوازها و
مالكيت شيء ها در پايگاه داده توسط حساب كاربر كنترل مي شود. حساب هاي كاربر، متعلق به پايگاه داده خاص هستند. حساب كاربر xyz در پايگاه داده sales با حساب كاربر xyz در پايگاه داده inventory متفاوت مي باشد. شناسه هاي كاربر بوسيله اعضاي نقش پايگاه داده db_owner تعريف مي شوند.
يك شناسة login به خودي خود به يك كاربر جواز دستيابي به شيء هاي درون پايگاه داده را نمي دهد. قبل از اين كه كسي بتواند پس از اتصال بوسيله شناسه login، به شيء هاي درون پايگاه داده دسترسي يابد، آن شناسه login بايد با يك شناسه كاربر در پايگاه داده مرتبط شود. اگر يك شناسه login صريحاً با يك شناسه كاربر در پايگاه داده مرتبط نشده باشد، به طور خودكار با شناسه كاربر guest مرتبط مي شود. اگر پايگاه داده داراي حساب كاربر guest نباشد، login نمي تواند به پايگاه داده دسترسي يابد مگر اين كه با يك حساب كاربر مجاز مرتبط شود.
وقتي يك شناسه كاربر تعريف مي شود، با يك شناسة login مرتبط مي شود. به عنوان مثال، عضوي از نقش db_owner مي تواند شناسه login ويندوز NT مانند NETDOMAIN\joe را با شناسه كاربر abc در پايگاه داده sales و شناسه كاربر def در پايگاه داده employee مرتبط نمايد.
يك كاربر در پايگاه داده بوسيله شناسه كاربر شناسايي مي شود نه شناسه jogin به عنوان مثال، sa يك حساب login است كه به طور خودكار به حساب كاربر ويژه dbo در هر پايگاه داده نگاشته مي شود.
حساب guest، يك حساب كاربر ويژه در پايگاه داده SQL Server است. اگر كاربر دستور USE را براي دستيابي به يك پايگاه داده صادر كند كه در آن با يك حساب كاربر مرتبط نشده است، در عوض به كاربر guest مرتبط مي شود.

نقش ها در SQL
نقش ها ابزاري قدرتمند هستند كه به شما اجازه مي دهند كاربران را در يك واحد جمع آوري كرده و به آنها جوازهايي را اعطاء نماييد. جوازهايي كه به يك نقش اعطاء شده و يا از آن باز پس گرفته مي شود به اعضاي نقش نيز اعمال مي شود. مي توانيد يك نقش بوجود آوريد كه نشان دهنده كارهاي انجام شده بوسيله كلاس خاصي از كاركنان در سازمان شما باشد و جوازهاي مناسب را به آن نقش اعطاء كنيد. هنگامي كه كارمند ديگري به اين مجموعه اضافه مي شود، به سادگي مي توانيد او را به عنوان عضو جديد نقش به آن اضافه كنيد. وقتي آن شخص از مجموعه خارج مي شود مي توانيد او را از نقش حذف كنيد، در اين صورت مجبور نخواهيد بود به طور مكرر جوازهايي را به اشخاص اعطاء كرده و يا از آنها باز پس بگيريد.
اگر شما مجموعه اي از نقش ها را براساس كارهاي مختلف تعريف كنيد و به هر نقش جوازهاي لازم براي انجام آن كار را انتساب كنيد، مديريت جوازها در پايگاه داده تسهيل خواهد شد. از اين پس به راحتي مي توانيد كاربران را بين نقش ها جابجا كنيد و ديگر نيازي به مديريت انفرادي جوازهاي كاربران نيست. اگر يك كار تغيير كند، بهتر آن است كه جوازها را يك بار براي نقش تغيير دهيد و اين تغييرات به طور خودكار به تمام اعضاي نقش اعمال مي شود.
در SQL Server كاربران مي توانند به چند نقش متعلق باشند.
چند نقش ثابت در SQL Server تعريف شده است. كاربران مي توانند به اين نقش ها اضافه شوند تا جوازهاي مديريتي مربوط را دريافت كنند. نقش هاي زير در سطح سرويس دهنده مي باشند:
می توانيد با استفاده از رويه ذخيره شده سيستمي SP_helpsrvrole ليستي از نقش هاي ثابت سرويس دهنده و بوسيله SP-Srvrolepermission جوازهاي ويژه هر نقش را مشاهده كنيد.
هرپايگاه داده داراي مجموعه اي از نقش هاي ثابت پايگاهداده هستند . حوزه هر يك از اين نقش هاخاص يك پايگاه داده است. به عنان مثال اگر Database1 و Database2 هر دو داراي شناسه كاربر به نام Userx باشند اضافه كردن userx مربوط به Database1 به نقش پايگاه داده db-onwer هيچ تاثيري بر userx مربوط به Database2 ندارد.

گروه ها
در SQL Server مفهوم گروه وجود ندارد. نقش ها، جايگزين گروه ها در نسخه هاي اوليه SQL Server شده است. اما شما مي توانيد امنيت SQL Server را در سطح گروه ويندوز NT مديريت كنيد.
اگر از SP_grantlogin استفاده كرده و نام يك گروه ويندوز NT را مشخص كنيد، تمام اعضاي گروه مي توانند با استفاده از تاييد صلاحيت توسط ويندوز NT به SQL Server متصل شوند. پس از اينكه گروه براي اتصال تاييد صلاحيت شد، مي توانيد از SP_grantlogin براي مرتبط كردن اعضاي گروه با يك شناسه كاربر در پايگاه داده استفاده كنيد. از دو روش مي توانيد استفاده كنيد :
1- مي توانيد گروه را با يك شناسه كاربر در پايگاه داده مرتبط كنيد. در اين حالت، تمام اعضاي گروه با آن شناسه كاربر مرتبط مي شود.
2- مي توانيد يك حساب كاربر در گروه ويندوز NT را با يك شناسه كاربر در پايگاه داده مرتبط كنيد.
اعضاي يك گروه داراي جوازهايي هستند كه به كاربر مرتبط با گروه اعطاء شده است مگر اين كه حساب ويندوز NT آنها با يك كاربر خاص مرتبط شده باشد. اگر عضوي از گروه، يك شيء ايجاد كند نام مالك شيء نام حساب ويندوز NT خواهد بود نه نام گروه.

مالك ها و جوازها
هر شيء در SQL Server متعلق به يك كاربر مي باشد. مالك با يك شناسه كاربر پايگاه داده شناسايي مي شود. وقتي يك شيء براي اولين بار ايجاد مي شود، تنها شناسه كاربري كه مي تواند به شيء دسترسي يابد شناسه كاربر مالك يا ايجاد كننده است. اگر كاربران ديگر بخواهند به شيء دسترسي يابند، مالك بايد جوازهايي را به آنها اعطاء نمايد.
براي جدول ها و ديدها ، مالك مي تواند جوازهاي REFRENCES, SELECT, DELETE, UPDATE, INSERT يا ALL را اعطاء نمايد. قبل از اين كه كاربر بتوانند دستورات DELETE, UPDATE, INSERT يا select را روي يك جدول اجرا كند بايد داراي جوازهاي مربوطه باشد. جواز REFRENCES به مالك يك جدول ديگر امكان مي دهد كه از ستون هاي جدول شما در محدوديتREFRENCES FOREIGN KEY در تعريف ستون هاي جدول خودش استفاده نمايد.
مالك يك رويه ذخيره شده مي تواند جواز EXECUTE را براي رويه ذخيره شده اعطاء نمايد. اگر مالك يك جدول مبنا بخواهد از دستيابي مستقيم كاربران به جدول جلوگيري كند. مي تواند جوازهايي را براي ديدها يا رويه هاي ذخيره شده اي كه به جدول ارجاع مي كنند، اعطاء نمايد اما هيچ جوازي را روي خود جدول اعطاء ننمايد. اين كار، شالوده مكانيزم هاي SQL Server براي تضمين اين امر است كه كاربران داده هايي را كه صلاحيت دستيابي به آنها را ندارند، نمي بينند.
كاربران مي توانند جوازهاي دستورات را نيز دريافت كنند. بعضي از دستورات مانند CREATE Table و CREATE VIEW فقط بايد توسط كاربران خاصي اجرا شوند. اگر كاربر dbo بخواهد اجازه ايجاد جدول يا ديد را به ديگري نيز اعطاء نمايد، مي تواند جوازهايي را براي اجراي اين دستورات به آن كاربر بدهد.

پايگاه هاي داده و داده هاي سيستمي
SQL Server داراي چهار پايگاه داده سيستمي است :
1- پايگاه داده master تمام اطلاعات در سطح سيستم را براي SQL Server ثبت مي كند، مانند حساب هاي login و تمام تنظيمات پيكربندي سيستم. Master پايگاه داده اي است كه وجود پايگاه هاي داده ديگر و مكان فايل هاي اصلي را كه حاوي اطلاعات اوليه براي كاربران پايگاه داده هستند ثبت مي كند.
2- Tempdb تمام جدول هاي موقت و رويه هاي ذخيره شده موقت را نگهداري مي كند. Tempbd يك منبع عمومي است. جدول هاي موقت و رويه هاي ذخيره شده تمام كاربراني كه به سيستم متصل هستند در اين پايگاه داده ذخيره مي شود. هر بار كه SQL Server شروع به كار مي كند tempdb دوباره ايجاد مي شود. هنگام قطع اتصال، تمام جدول ها و رويه هاي ذخيره شده موقت حذف مي شوند.
3- Model قالبي براي تمام پايگاه هاي داده اي است كه در سيستم ايجاد مي شود. وقتي يك دستور CREATEDATABASE صادر مي شود، اولين قسمت از پايگاه داده با كپي كردن محتواي پايگاه داده model ايجاد مي شود. سپس قسمت هاي باقيمانده از پايگاه داده با صفحه هاي خالي پر مي شود.
4- Msdb توسط كارگزار SQL Server براي زمان بندي alert ها و job ها و ثبت اپراتورها موتور استفاده قرار مي گيرد.
هر پايگاه داده در SQL Server شامل جدول هاي سيستمي است كه داده هاي مورد نياز اجزاء SQL Server را ثبت مي كند. موفقيت عمليات در SQL Server بستگي به جامعيت اطلاعات در جدول هاي سيستمي دارد. بنابراين كاربران نمي توانند مستقيماً اطلاعات جدول هاي سيستمي را بهنگام سازي كنند.

معماري فيزيكي پايگاه داده
SQL Server در روش ذخيره سازي فيزيكي داده ها پيشرفت هاي قابل توجهي نموده است. اين تغييرات بيشتر براي كاربران معمولي SQL Server شفافيت دارند اما بر مديريت پايگاه داده SQL Server نيز تأثير دارند.

صفحه ها و Exent ها

واحد اصلي ذخيره سازي داده ها در SQL Server، صفحه است. در SQL Server اندازه صفحه ها 8 كيلو بايت است. 96 بايت اول هر صفحه، مربوط به سرصفحه است كه اطلاعات سيستمي مانند نوع صفحه، ميزان حافظه آزاد در صفحه و شناسه شيء اي كه مالك صفحه است را ذخيره مي كند. شش نوع صفحه در فايل هاي داده اي يك پايگاه داده وجود دارد:
داده. شامل سطرهاي داده اي با تمام داده ها به جز داده هاي نوع ntexxt,text و image است.
شاخص. مدخل هاي شاخص را در بردارد.
متن / تصوير. شامل داده هاي نوع ntext, text و image است.
نگاشت تخصيص عمومي. اطلاعاتي در مورد Extent هاي تخصيص يافته را دربردارد.
فضاي آزاد صفحه. اطلاعاتي در مورد فضاي آزاد موجود در صفحه ها را در بردارد.
نگاشت تخصيص شاخص. حاوي اطلاعاتي در مورد Extent هايي است كه توسط يك جدول يا شاخص مورد استفاده قرار گرفته است.
سطرهاي داده اي در صفحه بلافاصله بعد از سر صفحه به طور ترتيبي قرار گرفته اند. در انتهاي صفحه بلافاصله بعد از سر صفحه به طور ترتيبي قرار گرفته اند. در انتهاي صفحه، جدول آنست سطر قرار دارد. اين جدول براي هر سطر در صفحه شامل يك مدخل مي باشد كه هر مدخل مشخص مي كند كه سطر مزبور چند بايت از ابتداي صفحه فاصله دارد.
سطرها نمي توانند در صفحه ها زنجيره شوند. در SQL Server حداكثر مقدار داده اي كه مي تواند در يك سطر قرار گيرد، بدون احتساب داده هاي نوع ntext, text و image ، 8060 بايت است.
Extent ها واحد اصلي تخصيص فضا در جدول و شاخص ها هستند. هر Extent معادل هشت صفحه پيوستته يا 64 كيلو بايت است. SQL Server براي تخصيص بهتر فضا، كل Extent را به جدول هايي كه داده كمي دارند اختصاص نمي دهد. SQL Server داراي دو نوع Extent است :
Extent هاي يكنواخت كه متعلق به يك شيء واحد مي باشند. تمام هشت صفحه موجود در Extent فقط توسط شيء مالك مي توانند مورد استفاده قرار گيرند.
Extent هاي مخلوط كه حداكثر بوسيله هشت شيء به اشتراك گذاشته مي شوند.
Extent مخلوط كه حداكثر بوسيله هشت شيء به اشتراك گذاشته مي شوند.
صفحه هايي كه به يك جدول يا شاخص جديد اختصاص داده مي شود، از Extent مخلوط هستند. وقتي جدول يا شاخص به حدي رشد كند كه داراي هشت صفحه شود، Extent آن به نوع يكنواخت تبديل مي شود.

فايل ها و گروه هاي فايلي پايگاه داده فيزيكي
در SQL Server 7.0 يك پايگاه د اده به مجموعه اي از فايل هاي سيستم عامل نگاشته مي شود. پايگاه داده داراي سه نوع فايل مي باشد :
فايل هاي داده اي اصلي : اين فايل، نقطه شروع پايگاه داده است و به مابقي فايل ها در پايگاه داده اشاره مي كند . هر پايگاه داده داراي يك فايل داده اي اصلي است. پسوند پيش فرض اين فايل، mdf . است.
فايل هاي داده اي ثانوي :‌ اين فايل ها شامل تمام فايل هاي داده اي به جز فايل داده اي اصلي هستند. بعضي از پايگاه هاي داده ممكن است فايل داده اي ثانوي نداشته باشند. پسوند پيش فرض اين فايل ها، ndf . است.
فايل هاي log : اين فايل ها تمام اطلاعات log لازم براي ترميم پايگاه داده را نگهداري مي كنند. هر پايگاه داده بايد حداقل يك فايل log داشته باشد. پسوند پيش فرض اين فايل ها، Idf است.
فايل هاي SQL Server داراي دو نام هستند:
نام منطقي فايل كه در دستورات Transact-SQL براي ارجاع به فايل مورد استفاده قرار مي گيرد.
نام سيستم عاملي فايل كه نام فيزيكي آن مي باشد.
صفحه ها در يك فايل به طور تربيتي با شروع از صفر براي اولين صفحه، شماره گذاري مي شوند. هر فايل داراي يك عدد شناسه فايل است. براي شناسائي منحصر بفرد يك صفحه در پايگاه داده، هم شناسه فايل و هم شماره صفحه مورد نياز است.
اولين صفحه در هر فايل شامل اطلاعات در مورد صفحات فايل مي باشد. نهمين صفحه در فايل داده اي اصلي، راه اندازي پايگاه داده است كه شامل اطلاعاتي در مورد صفات پايگاه داده مي باشد.
فايل ها مي توانند از اندازه اوليه اي كه براي آنها مشخص شده است به طور خودكار رشد كنند. وقتي يك فايل را تعريف مي كنيد مي توانيد يك مقدار رشد نيز براي آن مشخص كنيد. هر موقع فايل پر مي شود، اندازه آن به مقدار مشخص شده افزايش مي يابد.
هر فايل داراي يك حداكثر اندازه نيز مي باشد. اگر حداكثر اندازه مشخص نشود رشد فايل ادامه مي يابد تا اين كه تمام فضاي موجود روي ديسك مصرف شود. فايل هاي پايگاه داده به منظور تخصيص و مديريت آسان مي توانند در گروه هاي فايلي دسته بندي شوند. بعضي از سيستم ها مي توانند با قرار دادن داده ها و شاخص ها روي ديسك هاي مشخص، كارآيي خود را بهبود بخشند. گروه هاي فايلي مي توانند به اين فرآيند كمك كنند. مدير سيستم مي تواند براي هر ديسك گروه فايلي ايجاد كند و سپس جدول ها و شاخص هاي ويژه اي را به گروه فايلي انتساب كند.
يك فايل فقط مي تواند عضو يك گروه فايلي باشد. جدول ها و شاخص ها و داده هاي ntext, text و image مي توانند با يك گروه فايلي مرتبط باشند، در اين صورت تمام صفحه هايي كه به آن اختصاص داده مي شود در آن گروه فايلي خواهد بود.
فايل هاي log هرگز در گروه فايلي قرار نمي گيرند. فضاي log به صورت مجزا از فضاي داده اي مديريت مي شود.
فايل هاي درون يك گروه فايلي به طور خودكار رشد نمي كنند، مگر اين كه در هيچ يك از فايل هاي درون گروه فايلي فضاي آزاد وجود نداشته باشد.

سه نوع گروه فايلي وجود دارد:
• اصلي. گروه فايلي اصلي شامل فايل داده اي اصلي و فايل هاي ديگري است كه در گروه فايلي ديگري قرار نگرفته است. تمام صفحه هاي جدول هاي سيستمي در اين گروه فايلي تخصيص داده مي شوند.
• تعريف شده توسط كاربر. اين گروه هاي فايلي با استفاده از كلمه كليدي FILEGROUP در دستور CREATE DATABASE يا ALTER DATABASE ايجاد مي شوند.
• پيش فرض. اين گروه فايلي شامل صفحه هاي تمام جدول ها و شاخص هايي است كه هنگام ايجاد شدن، هيچ گروه فايلي براي آنها مشخص نمي شود. در هر پايگاه داده، در هر لحظه فقط يك گروه فايلي مي تواند گروه فايلي پي فرض باشد. اعضاي نقش پايگاه دادهdb_owner مي توانند گروه فايلي پيش فرض را از يك گروه فايلي به گروه فايلي ديگر منتقل كنند. اگر گروه فايلي پيش فرض مشخص نشود گروه فايلي اصلي، گروه فايلي پيش فرض خواهد بود.
گروه هاي فايلي در واقع، ورودي / خروجي را بين چند ديسك توزيع مي كنند.
در مثال زير يك پايگاه داده با يك فايل داده اي اصلي يك گروه فايلي تعريف شده توسط كاربر ويك فايل log ايجاد مي شود. فايل داده اي اصلي در گروه فايل اصلي قرار دارد وگروه فايلي تعريف شده توسط كاربر داراي دو فايل داده اي ثانوي است.

تخصيص و استفاده دوباره از فضا
SQL Server به سرعت صفحه ها را براي شيء ها تخصيص مي دهد و فضايي را كه بوسيله حذف سطرها آزاد مي شود دوباره مورد استفاده قرار مي دهد. اين عمليات به طور داخلي در سيستم انجام مي شود و از ساختارهاي داده اي استفاده مي كند كه براي كاربران قابل رؤيت نيستند.
اگر در پايگاه داده فضاي آزاد زيادي فضاي آزاد زيادي وجود داشته باشد، SQL Serve پايگاه داده را به طور خودكار مي شكند. اين در مواقعي انجام مي شود كه گزينه autoshrink در پايگاه داده داراي مقدار true باشد. سرويس دهنده، استفاده از فضا در هر پايگاه داده را به طور نوبه اي بررسي مي كند. اگر پايگاه داده داراي فضاي آزاد زيادي باشد، SQL Serve اندازه فايل هاي پايگاه داده را كاهش مي دهد. همچنين مي توان با استفاده از Enterpise Manger يا دستور DBCC SHRINKDATABASE اين كار را به طور دستي انجام داد.
ساختارهاي داده اي SQL Serve كه فضاي آزاد را رديابي مي كنند نسبتاً ساده هستند. اين امر دو مزيت دارد:
• اطلاعات فضاي آزاد بسيار فشرده مي شود، لذا نسبتاً صفحه هاي كمي شامل اين گونه اطلاعات هستند. اين امر با كاهش دادن ميزان خواندن از ديسك كه براي واكشي اطلاعات تخصيص لازم است، سرعت را افزايش مي دهد. همچنين احتمال اين كه صفحه هاي تخصيص در حافظه باقي بمانند افزايش مي يابد كه خود باعث كاهش بيشتر خواندن از ديسك مي شود.
• بيشتر اطلاعات تخصيص به يكديگر زنجيره نشده اند. اين امر موجب مي شود كه نگهداري اطلاعات تخصيص تسهيل شود.
• SQL Serve براي ثبت تخصيص Extent ها از دو نوع نگاشت تخصيص استفاده مي كند :
• نگاشت تخصيص عمومي : صفحه هاي Extent,GAM هايي را كه تخصيص يافته اند ثبت مي كنند. هر GAM، 64 هزار Extent يا تقريباً 4 گيگا بايت داده را پوشش مي دهند. GAM داراي يك بيت براي هر Extent است. اگر بيت برابر 1 باشد، Extent متناظر آزاد است.
• نگاشت تخصيص عمومي مشترك : صفحه هاي SGAM Extent هايي را كه هم اكنون به عنوان Extent مخلوط استفاده شده اند و حداقل داراي يك صفحه استفاده نشده هستند، ثبت مي كنند. هر SGAM، 64 هزار Extent يا تقريباً 4 گيگا بايت داده را پوشش مي دهند. SGAM داراي يك بيت براي هر Exent است. اگر بيت برابر 1 باشد، Exent از نوع مخلوط است و داراي صفحه هاي آزاد مي باشد. اگر بيت برابر o باشد، Extent به عنوان Extent مخلوط استفاده نشده است و يا Extent مخلوطي است كه تمام صفحه هاي آن مورد استفاده قرار گرفته اند.
هر Extent داراي الگوهاي بيتي به صورت زيراست كه بر مبناي استفاده جاري از آنها در GAM,SGAM ثبت شده اند :
در نتيجه ، مديريت Extent ها الگوريتم ساده اي خواهد داشت. براي تخصيص يك Extent يكنواخت، SQL Serve در GAM به دنبال بيتي مي گردد كه برابر 1 باشد و سپس آن را برابر o قرار مي دهد. براي يافتن Extent مخلوط با صفحه هاي آزاد، SGAM براي پيدا كردن بيت 1 جستجو مي شود. براي تخصيص يك Extent مخلوط، GAM براي بيت 1جستجو مي شود و مقدار بيت برابر o قرار داده مي شود و سپس بيت متناظر در SGAM نيز برابر 1 مي شود. براي آزاد كردن يك SQL Serve,Extent تضمين مي كند كه بيت متناظر در GAM برابر 1 و در SGAM برابر o باشد. البته، الگوريتم هايي كه به طور داخلي در SQL Serve اجرا مي شوند پيچيده تر از آن هستند كه در اينجا مورد بررسي قرار گرفت.
صفحه هايي به نام فضاي آزاد صفحه وجود دارد كه نشان مي دهند آيا يك صفحه تخصيص داده شده است يا خير و مقدار فضاي آزاد صفحه را نشان مي دهند. هر PFS، 8000 صفحه را پوشش مي دهد. براي هر صفحه، PFS داراي يك نقش بيست است كه مشخص مي كند آيا صفحه خالي است، 50-1 درصد پر، 80-51 درصد پر، 95-81 درصد پر يا 100-96 درصد پر است.
صفحه PES اولين صفحه بعد از سرصفحه در فايل داده اي است بعد از آن GAM وبه دنبال آن SGAM قرار مي گيرد. 8000 صفحه بعد از اولين PESيك PES ديگر قرار مي گيرد . 64 هزار Extent بعد از اولين GAM يك GAM ديگر قرار مي گيرد . 64 هزار Extent بعد از اولين SGAM يك SGAM ديگر قرار مي گيرد والي آخر .


مديريت فضاي مورد استفاده شيء ها
صفحه هاي نگاشت تخصيص شاخص ، Extent هاي يك فايل پايگاه داده را كه بوسيله يك heap يا شاخص مورد استفاده قرار گرفته است، معين مي كند. هر heap يا شاخص داراي يك يا چند صفحه IAM است كه تمام Extent هاي تخصيص يافته به شيء را ثبت مي كند. يك heap يا شاخص حداقل داراي يك IAM براي هر فايلي است كه در آن Extent هايي دارد. اگر محدوده Extent هاي مربوط به heap يا شاخص در فايل فراتر از حدي باشد كه IAM بتواند ثبت كند، در اين صورت heap يا شاخص ممكن است بيش از يك IAM در يك فايل داشته باشد.
صفحه هاي IAM بر حسب نياز براي شيء تخصيص داده مي شوند و در فايل به طور تصادفي قرار مي گيرند. اولين صفحه IAM در شيء اشاره مي كند و تمام صفحه هاي IAM براي آن شيء در يك زنجيره به هم پيوسته اند.
يك صفحه IAM داراي يك سرصفحه است كه اولين Extent واقع در محدوده Extent هايي را كه توسط IAM نگاشته شده است، معين مي كند IAM داراي يك نقش بيت نيز هست كه هر بيت آن متناظر با يك Extent است. اولين بيت، متناظر با اولين Extent، دومين بيت، متناظر با دومين Extent و … مي باشد. اگر بيت برابر صفر باشد Extent متناظر، به شيء اي كه مالك صفحه IAM است تخصيص نيافته است.
اگر SQL Server بخواهد سطر جديدي را درج كند و فضايي در صفحه جاري موجود نباشد، با استفاده از صفحه هاي IAM و PES صفحه اي را پيدا مي كند كه داراي فضاي كافي براي نگهداري سطر باشد. از IAM براي يافتن Extent هايي كه به شيء اختصاص داده شده، استفاده مي شود. براي هر Extent، صفحه هاي PFS براي جستجوي صفحه اي كه داراي فضاي آزاد كافي براي نگهداري سطر باشد، مورد استفاده قرار مي گيرند هر صفحه IAM و PFS تعداد زيادي از صفحه هاي داده اي را پوشش مي دهند و لذا در يك پايگاه داده تعداد كمي از اين صفحه ها وجود دارد، به همين دليل اين صفحه ها در حافظه اصلي قرار گرفته و جستجوي آنها سريع مي باشد. SQL Server فقط هنگامي يك Extent جديد به يك شيء تخصص مي دهد كه نتواند صفحه اي در Extent هاي موجود پيدا كند كه داراي فضاي آزاد كافي براي نگهداري سطر باشد. Extent هاي جديد از گروه فايلي تخصيص داده مي شوند. اگر يك گروه فايلي داراي دو فايل باشد كه فضاي آزاد يكي از آنها دو برابر ديگري است، به ازاء هر صفحه از يك فايل دو صفحه از فايل ديگر تخصيص مي يابد. اين بدان معني است كه در يك گروه فايلي درصد فضاي مصرفي براي تمام فايل ها بايد يكسان باشد.

ساختار جدول ها و شاخص ها
داده هاي هر جدول در صفحه 8 كيلو بايتي ذخيره مي شوند. هر صفحه داده اي داراي 96 بايت به عنوان سرصفحه است كه شامل اطلاعات سيستمي مانند شناسه جدولي كه مالك صفحه است و اشاره گرهايي به صفحه هاي قبلي و بعدي، مي باشد. يك جدول آفست سطر نيز در انتهاي صفحه قرار دارد. سطرهاي داده اي، باقيمانده صفحه را پر مي كنند.
SQL Server از دو روش براي سازماندهي صفحه هاي داده اي استفاده مي كند :
جدول هاي خوشه اي جدول هايي هستند كه داراي يك شاخص خوشه اي مي باشند. سطرهاي داده اي به ترتيب كليد شاخص خوشه اي ذخيره مي شوند. صفحه هاي داده اي در يك ليست پيوندي دو طرفه به هم پيوسته اند. شاخص به صورت ساختار B-tree پياده سازي مي شود.
Heap ها جدول هايي هستند كه شاخص خوشه اي ندارند. سطرهاي داده اي با هيچ ترتيب خاصي ذخيره نمي شوند.
هر جدول مي تواند 249 شاخص غيرخوشه اي داشته باشد. شاخص هاي غير خوشه اي نيز ساختار B-tree دارند. اين شاخص ها هيچ تاثيري بر ترتيب سطرهاي داده اي ندارند.
صفحه هايي كه داده هاي ntext,text و imageرا نگهداري مي كنند، براي هر جدول به صورت يك واحد منفرد مديريت مي شوند. تمام اين داده ها براي يك جدول در يك مجموعه از صفحه ها ذخيره مي شوند.
به ازاء هر جدول و شاخص، يك سطر در جدول sysindexes وجود دارد كه به طور منحصر بفرد با تركيبي از دو ستون شناسه شيء و شناسه شاخص شناسايي مي شود. تخصيص صفحه ها به جدول و شاخص بوسيله زنجيره اي از صفحه هاي IAM مديريت مي شود. ستون sysindexes.FirstIAM به اولين صفحه IAM در زنجيره صفحه هاي IAM اشاره مي كند.

هر جدول داراي مجموعه اي از سطرها در sysindexes مي باشد :
heap داراي يك سطر در sysindexes است كه در آن indid=0 ستون IAM به زنجيره IAM مربوط به مجموعه صفحه هاي داده اي جدول اشاره مي كند.
شاخص خوشه اي داراي يك سطر در sysindexes است كه در آن indid=1 ستون root به بالاي شاخص خوشه اي اشاره مي كند.
هر شاخص غيرخوشه اي كه براي جدول ايجاد مي شود داراي يك سطر در sysindexes است. Indid داراي مقاديري بين 2 تا 201 است. ستون root به بالاي شاخص غيرخوشه اي اشاره مي كند.
هر جدول كه داراي حداقل يك ستون از نوع ntext,text و imageرا باشد، داراي يك سطر در sysindexes است كه در آن indid=255.

ساختار Heap
SQL Server از صفحه هاي IAM براي حركت در Heap استفاده مي كند. صفحه
هاي داده اي و سطرهاي درون آنها به ترتيب خاصي قرار ندارند و به يكديگر پيوسته نيستند. تنها اتصال منطقي بين صفحه هاي داده اي، چيزهايي است كه در صفحه هاي IAM ثبت مي شود.
خواندن ترتيبي يك Heap با دنبال كردن IAM انجام مي شود تا Extent هايي كه صفحه هاي مربوط به Heap در آنها قرار دارند، جستجو شوند. چون ها را به ترتيبي كه در فايل هستند نشان مي دهند، لذا خواندن ترتيبي Heap به طور يكنواخت تا انتهاي فايل ادامه مي يابد.
خواندن جدول روي Heap به صورت زير انجام مي شود :
1- اولين IAM در اولين گروه فايلي خوانده مي شود و تمام Extent هاي موجود در IAM دنبال مي شوند.
2- اين فرآيند براي هر IAM مربوط به Heap در فايل انجام مي شود.
3- مراحل 1 و 2 براي هر فايل در پايگاه داده يا گروه فايلي تكرار مي شود تا اين كه آخرين IAM در Heap پردازش شود.

شاخص هاي خوشه اي
در شاخص هاي خوشه اي، صفحه هاي درون زنجيره داده ها و سطرهاي درون آنها بر حسب كليد شاخص خوشه اي مرتب هستند. عمليات درج در محلي انجام مي شود كه مقدار كليد سطر درج شده مطابق با ترتيب سطرها باشد.
شاخص ها به صورت B-tree سازماندهي شده اند. هر صفحه در يك شاخص حاوي يك سرصفحه و به دنبال آن سطرهاي شاخص مي باشد. هر سطر شاخص شامل يك مقدار كليد و يك اشاره گر است كه به يك صفحه يا سطر داده اي اشاره مي كند. هر صفحه در يك شاخص يك گره شاخص ناميده مي شود. گره بالايي B-tree گره ريشه ناميده مي شود. لايه پاييني گره ها در شاخص گره هاي برگ ناميده مي شوند كه به صورت يك ليست پيوندي دو طرفه هستند. در شاخص خوشه اي صفحه هاي داده اي همان گره هاي برگ هستند.
SQL Server براي جستجوي سطري كه متناظر با يك كليد شاخص است از بالا تا پايين شاخص حركت مي كند. براي جستجوي محدوده اي از كليدها، SQL Server در شاخص حركت كرده تا اولين مقدار كليد در محدوده را پيدا كند. سپس با استفاده از اشاره گرهاي next و previous بين صفحه هاي داده اي حركت مي كند. براي يافتن اولين صفحه در زنجيره صفحه هاي داده اي، سمت چپ ترين اشاره گرها از گره ريشه شاخص دنبال مي شود.

شاخص هاي غيرخوشه اي
ساختار شاخص غيرخوشه اي با شاخص خوشه اي دو تفاوت عمده دارد :
سطرهاي داده اي مرتب شده نيستند و به ترتيب كليد شاخص غيرخوشه اي ذخيره نمي شوند.
لايه هاي برگ در شاخص غيرخوشه اي شامل صفحه هاي داده اي نيستند.
در عوض ، گره هاي برگ حاوي سطرهاي شاخص هستند. هر سطر شاخص شامل مقدار كليد غيرخوشه اي و يك يا چند مكان نماي سطر است كه به سطر داده اي كه داراي مقدار كليد است اشاره مي كند.
شاخص هاي غيرخوشه اي مي توانند هم روي جدولي با شاخص خوشه اي و هم روي يك Heap تعريف شوند. مكان نماي سطر داراي دو شكل است :
اگر جدول يك Heap باشد، مكان نماي سطر، يك اشاره گر به سطر است. اشاره گر از شناسه فايل، شماره صفحه و شماره سطر در صفحه تشكيل شده است. به كل اشاره گر، شناسه سطر گفته مي شود.
اگر جدول يك شاخص خوشه اي داشته باشد، مكان نماي سطر، كليد شاخص خوشه اي براي سطر است. اگر شاخص خوشه اي، منحصر بفرد نباشد، SQL Server يك مقدار داخلي را به كليدهاي مضاعف اضافه مي كند تا منحصر بفرد شوند. اين مقدار براي كاربر قابل رؤيت نيست. اين مقدار براي منحصر بفرد كردن كليد براي استفاده در شاخص هاي غيرخوشه اي استفاده مي شود. SQL Server براي واكشي سطر داده اي، شاخص خوشه اي را با استفاده از كليد شاخص خوشه اي كه در سطر برگ شاخص غير خوشه اي ذخيره شده است، جستجو مي كند.
چون شاخص هاي غير خوشه اي كليدهاي شاخص خوشه اي را به عنوان مكان نماي سطر در خود ذخيره مي كنند، بهتر است كليدهاي شاخص خوشه اي تا حد امكان كوچك باشند. اگر يك جدول داراي شاخص هاي غيرخوشه اي نيز هست، از ستون هاي بزرگ به عنوان كليد در شاخص خوشه اي استفاده نكنيد.

داده هاي ntest,text و image
مقادير ntext, text و image در سطرهاي داده اي ذخيره نمي شوند، بلكه در مجموعه اي از صفحه هاي مجزا ذخيره مي شوند. براي هر كدام از اين مقادير تنها چيزي كه در سطر داده اي ذخيره مي شود يك اشاره گر 16 بايتي است. براي هر سطر، اين اشاره گر به محل اين داده ها اشاره مي كند. اگر سطر بيش از يك ستون از نوع ntext, text و image داشته باشد، براي هر كدام از اين ستون ها يك اشاره گر وجود خواهد داشت.
اين نوع داده ها در يك مجموعه از صفحه هاي 8 كيلوبايتي ذخيره مي شوند. صفحه ها به طور منطقي در يك ساختار B-tree ذخيره مي شوند. بر حسب اين كه مقدار داده كمتر يا بيشتر از 32 كيلو بايت باشد[/align=justify][/size=medium]


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان