سيستم هاي تجاري Sql

طراحي و پياده سازي
مديريت
۱) Design and Implementation
2) Administrator
بانكهاي اطلاعاتي به دو دسته تقسيم بندي مي شوند كه عبارتند از:
۱) Desktop Access-paradox, foxpro-Dbase
2) client/server sql-oracl/

مدل Desktop براي كامپيوتهاي single پيش بيني شده است. به اين شكل كه براي يك مجموعه كوچك كه با حجم زيادي از اطلاعات روبرو نيست مي تواند نياز ما را برطرف كند.
بانكهايي مانند Access شاخص ترين عضو خانواده Desktop به حساب مي آيد. در اين نوع از بانكهاي اطلاعاتي، بانك اطلاعاتي ساخته شده بر روي يك hard قرار گرفته و براي ديگران قابل دسترسي مي‌باشد. اگر بخواهيم براي كاربران مختلف كه در اين سيستم كار مي‌كنند محدوديت هاي دسترسي تعريف كنيم با مشكل مواجه خواهيم شد چرا كه گزينه هاي امنيتي در آن نسبت به مدل client/server بسيار بسيار ضعيف مي باشد. البته در صورتيكه يك محيط شبكه داشته باشيم مي توانيم فايل ساخته شده Access خود را در داخل فايل server قرار دهيم و client ها به آن دسترسي داشته باشيم.

اگر بخواهيم از اين بانك كه نگهدارنده اطلاعات كارگزيني كارمندان و اطلاعات حقوق و دستمزد آنها باشد. گزارشي به شكل زير تهيه كنيم ليست كليه كارمندان را نمايش دهيد كه در دپارتمان ۱ مشغول كار هستند و مي خواهيم جمع حقوق كارمندان اين بخش را مشخص كند.
حداكثر سرعت در شكبه
اين مشكلات مي تواند از زواياي مختلف بوجود بيايد:
۱- تمام پردازش ها در داخل client انجام مي شود.
۲- در اين حالت نيازمند سخت افزار قوي براي client ها و وجود يك خطوط ارتباطي پرسرعت.
۳- از آنجايي كه هارد server قابل دسترس براي كليه client ها مي باشد امنيت اطلاعات server از بين خواهد رفت.
۴- اگر در اين مدل نياز به up date كردن برخي از ركوردها داشته باشيم بعد از آنكه ركوردها به client آمدند و تعدادي از آنها up date شدند بايد بر روي هارد server ذخيره گردد.
اگر در حين انجام عمل save سيستم با قطع برق مواجه گردد و يا خطوط ارتباطي قطع شوند برخي از ركوردها در فايل بانك در server ، up date شده و برخي ديگر بدون تغيير باقي خواهد ماند. هيچ راهي براي شناسايي اينكه كدام يك تغيير يافته اند وجود ندارد و نمي توان وضعيت بانك را به حالت اوليه آن برگرداند.

 

Select sum (Salary) From Employees
Where Dep=1
در قالب نوع client/server يكپارچگي اطلاعات تضمين مي شود به اين شكل كه در هنگام عمل up date چنانچه برق قطع شود با روشن شدن مجدد server بررسي مي شود كه آيا مراحل قبلي با موفقيت به پايان رسيده است يا خير.
براي حفظ يكپارچگي، اطلاعات sql server قبل از ثبت قطعي اطلاعات كليه اعمال را در فايل log خود انجام مي دهد.
Sql server داراي دو نوع فايل مي باشد:

فايل داده با پسوند Mdf . 1) Date file
فايل تراكنش با پسوند Ldf . 2) log file
فايل هاي تراكنش Transaction log file
زمانيكه سيستم روشن مي شود ابتدا log file مورد ارزيابي قرار مي گيرد. اگر در فايل log با دستور commit مواجه شود يعني كليه اعمال قبلي به شكل كامل انجام شده اند و آماده اند براي آنكه بر روي date file نوشته شوند. در اين حالت log file بر روي data file ثبت خواهد شد.
اگر با دستور commit مواجه نشود عمل roll Back اتفاق مي افتد حال مي توانيم با اين شرايط وضعيت سيستم را به شرايط قبلي بازگردانيم. تمام حالتهاي انجام شده به وضعيت سابق بر ميگردد و بانك ثبات خود را حفظ خواهد كرد يكپارچه باقي مي ماند.
انواع sql هاي قابل نصب:
۱) sql server enterprise
روي ويندوز ۲۰۰۰ و ۲۰۰۳ نصب مي شود يعني روي ويندوزهاي ۳۲ بيتي و ۶۴ بيتي قابل نصب هست.
بهترين خاصيت آن امكان داخلي آن clustering مي باشد يعني ۴ يا ۸ كامپيوتر را مي توان بهم وصل كرد.
۴- نحوه

ويرايش استاندارد ۲) Standard Edition
روي ويندوز ۲۰۰۰ و ۲۰۰۳ نصب مي شود و تفاوتش با sql اولي اين است كه امكان clustering را ندارد.
Sql 2000 service pack 3a
Win 2000 service pack 4
Win 2003 service pack 1
3) sql server personal edition
روي ويندوز xp نصب مي شود.
Spl server , client tools

روي ويندوز CE كامپيوترهاي جيبي (packet pc) نصب مي شود.
نصب sql :
بعد از نصب sql server و فعال شدن service manager به سراغ interprise manager مي رويم تا بتوانيم به كمك آن به table ها دسترسي يابيم. اگر اثري از sql نصب شده در sql server group وجود نداشت بر روي آن right click كرده گزينه new registration را انتخاب مي

كنيم. با اين كار sql server شناسايي خواهد شد. سپس آن را باز كرده و ليست data base ها از folder data base كليه بانكهاي موجود را مشاهده خواهيم كرد. حال بانكهاي tempdb-msdb-model-master به عنوان بانكهاي سيستيم و pubs , northwind مشاهده مي شود كه اين دو data base (بانك) نمونه‌هايي هستند كه ماكروسافت آنها را براي آشنايي بهتر ترويج كرده است.
براي غير فعال كردن بانكهاي سيستمي وtable هاي سيستمي كه در هر بانكي (data base هاي) وجود دارند مي توانند بر روي نام data base ، كليك راست كرده و گزينه edit sql server registration را انتخاب كنيم و در اين پنجره گزينه show system … را غير فعال كنيم

تا هيچ يك از موارد سيستمي به نمايش در نيايد.
از اين بانكهاي سيستمي sql بانك master اصلي ترين بانك sql مي باشد اين بانك در پشت صحنه كليه عمليات sql را مديريت مي‌نمايد و هر نوع آسيب به اين data base باعث از كارافتادن sql خواهد شد.
بانك model db بانكي است كه از روي آن تمام data base هاي جديد ساخته مي شود و در واقع طرح و الگويي جهت ساير data base هاست.
بانك temp db به ما كمك مي كند كه بر روي انجام عمليات موقت از اين بانك اطلاعاتي استفاده نماييم زمانيكه مطمئن به انجام قطعي عمليات نيستيم مي توانيم از بانك temp db استفاده كنيم هر بار sql فعال مي شود temp db خالي خواهد شد.
Msdb بانكي است كه وظيفه انجام كارهايي را كه تحت عنوان job شناخته مي شوند را بر عهده دارد. اين بانك با سرويس sql server agent كار مي كند.
نكته:
اگر sql در حالت stop  باشد يعني sql سرويس دهي نمي كند و اگر در حالت pause  باشد باعث مي شود كه هر كسي كه قبلاً وارد سيستم شده و در حال كار با sql است بينام خطا دريافت نكرده ولي فرد جديد نمي تواند وارد سيستم شده و كاري انجام دهد.
Stop يعني توقف بطور كامل و sql سرويس دهي مي كند ولي pause يعني توقف لحظه اي.
اگر بخواهيم به هر دليلي به عنوان admin بخواهيم تغييري در sql بدهيم بايد sql را از حالت multi user خارج كرده و به حالت single user درآوريم و براي اجراي مجدد start را مي زنيم و سرويس دهي sql ديگران قرار مي گيرد.
توسط interpriser ابزارهاي مديريتي خواهيم داشت.
روي sql server كليك مي كنيم و آن را باز مي كنيم.
Sql server\ service manager \ interprise manager \ registration \ wizard\ register sql server wizard

اگر اسم sql را نديديم بايد آن را ثبت كنيم. مثلاً pcl
Right click \ new sql server registration
Right click \ edit … \ registed sql server properties
Sql هايي كه سيستمي بودند پنهان شدند.
نكته:
اگر master آسيب ببيند ديگر sql كار نمي كند.
نحوه ايجاد data base :
بر روي data bases ، كليك راست كرده گزينه new data base را انتخاب مي كنيم. اس

م data base را وارد مي كنيم.
در قسمت collation name براي انتخاب زبان code page مي باشد. اگر در هنگام نصب گزينه collation به درستي تنظيم شده باشد در اين جا بر روي انتخاب server default تنظيم خود را قرار مي دهيم. در غير اينصورت مي توانيم از موارد موجود Arabic CS-AI براي زبان فارسي انتخاب نمائيم.
اگر data base اي را حذف كنيم ديگر آن data base قابل برگشت نيست.
مثال:
اسم كامل فيزيكي Employces-Data.MDF
با حجم ۱mG بر روي hard ساخته مي شود.
تحقيق:
Group file چيست؟ براي چه فايل ها را دسته بندي مي كنيم؟ آيا مي‌تواند مقداري غير از primary بگيرد؟
دسته:
فقط اولين فايل داده ساخته شده پسوند MDF دارد و فايل دوم به بعد NDF پوندش مي باشد.
در قسمت properties يك قسمت automatic … وجود دارد كه اگر تيك نداشته باشد گزينه هاي آن غير فعال خواهد بود و اگر تيك داشته باشد مي توان حجم و موارد ديگر را به دلخواه تغيير داد.
براي مثال باشد اگر

بعد از پر شدن ، مگ مگ اضافه مي شود.

نامحدود unrestricted
محدود restricted
در قسمت maximum file size مي توان محدوديت قرارداد مي توان محدوديت قرار دارد.
قسمت transaction فايل ساخته شده با پسوند LDF است.
تحقيق:
در اين قسمت log file (با پسوند LDF) چرا group file ندارد؟
در زمان ساخت data base در tab دوم فايل data را تنظيم مي كنيم و در tab سومص سازيم.
نحوه رشد مي تواند برحسب mB يا percent (درصد) باشد. در قسمت restricted حجم نهايي فايل مشخص مي شود. اگر unrestricted انتخاب شود براي حجم فايل محدوديتي قائل نخواهيم شد.
هر بانك اطلاعاتي داراي يك log file است كه محل نگهداري آن همان محل فايل data مي باشد. log file تاريخچه تغييرات اطلاعاتي است كه در سيستم روي مي دهد. هر data اي كه بخواهيم تعويض شود در log file نوشته مي شود هر عمل حذف data و يا تغيير data باعث مي‌شود در log file ذخيره گردد بطور كلي log file همواره در حالت بزرگ شدن مي باشد.
فوائد log file :
1- عمل پيگيري تراكنش ها (Transaction Tracking) براي پيگيري تراكنش ها مورد استفاده قرار مي گيرد. يعني در هر واحد عملياتي در data base كه به آن تراكنش مي گوييم مي توانيم به كمك log file در صورت انصراف از تغييرات انجام شده وضعيت بانك را به حالت قبل از تراكنش برگردانيم.
۲- امكان data base recovery يا بازيابي data base :
اگر data base به هر دليلي دچار مشكل گردد و فايل MDF آن آسيب ببيند مي توانيم به كمك Log عمل recovery را انجام دهيم.
۳- restore to the point of crash :
عمل بازيابي اطلاعات يعني restore قابل انجام خواهد بود به شرط آنكه از log file ، back up گرفته شده باشد.
در شرايطي كه حتي server دچار مشكلات جدي گردد و يا بطور فيزيكي از بين برود اگر محل نگهداري log در جاي ديگري خارج از آن server پيش بيني شده باشد به راحتي مي توانيم، اطلاعات از بين رفته را برگردانيم.
عمل back up در sql به دو صورت قابل انجام است:
۱) complete back up
2) log back up
لبه option :
Restricted access براي محدود كردن دسترسي مي باشد كه با انتخاب آن گزينه هاي زير فعال مي شود.
۱) members of db-owner , db creator or …
Db-owner مالك بانك اطلاعاتي
ميدان بانك اطلاعاتي

نكته:
كاربر معمولي جزء اين گروه (ميدان بانك اطلاعاتي) نمي باشد.
محدود به يك كاربر ۲) single user

Single user براي مواقعي است كه مي خواهيم تنها به شكل single (منفرد- تك) با اين data base كار كنيم. گاهي مواقع لازم است كه دسترسي به بانك از حالت چند كاربره خارج شود و به حالت تك كاربره درآيد.
با انتخاب Read only كل بانك اطلاعاتي حالت فقط خواندني پيدا مي‌كند. مثلاً اگر بخواهيم بانك اطلاعاتي مربوط به حسابداري براي سال قبل را به شكل فقط خواندني درآوريم تا جلوي هر تغييري در آن گرفته شود آن بانك را مي توان Read only كرد.
Recovery :
Model سه حالت دارد: Bulk log-simple-full
اگر ويندوز Xp باشد در حالت simple خواهد بود و اگر ويندوز ۲۰۰۰ يا ۲۰۰۳ باشد در حالت full قرار خواهد گرفت.

حالت full :
در اين حالت همه تغييرات در فايل log ذخيره مي شود و تا وقتي كه از log ، back up گرفته نشود فايل log حذف نمي گردد.
حالت bulk :
شبيه full است با اين تفاوت كه برخي از دستورات در sql مانند دستور BCP/DTS دستوراتي هستند كه اطلاعات پرحجم توليد مي‌كنند. كساني كه جابجايي اطلاعات يعني از بانكي مانند oracle ، access و يا حتي sql و … اطلاعات را به محل ديگر و يا به داخل خود sql منتقل مي نمايند بايد روي گزينه bulk loge انتخاب نمايند.
حالت simple :
در اين حالت تمام تغييرات در log نوشته مي شود اما با هر بار عمل commit يا roll back از log حذف مي گردد در persona نوع پيش فرض هستند در اين روش log file بزرگ نمي شود.
قسمت setting :
Ansi null default :
اين گزينه رفتار ايجاد جدول در sql را تغيير مي دهد. براي فيلدهاي هر جدول مي توانيم تعيين كنيم كه مقدار آن null باشد يا خير.
با انتخاب اين گزينه فيلدها بطور اتوماتيك null خواهد شد. وضعيت پيش فرض هر فيلد بدون استفاده از اين گزينه not null خواهد بود.
Auto close :
Data base بطور خودكار بسته مي شود.
Recursive triggers :
يعني در حالت عادي trigger ها بازگشتي نمي باشند. با اين گزينه مي‌توانيم trigger از نوع بازگشتي ايجاد كنيم:
از بين بردن فضاي خالي
Auto shrink :
باعث مي شود فضاي خالي در data base از بين برود. Auto shrink زماني كار مي كند كه حجم خالي به ميزان ۲۵% كل فضاي data base رسيده باشد.
Auto shrink براي data base هايي لازم است كه admin نداشته باشد.
: Auto create statistics , auto update statistics
اطلاعات آماري مربوط به update كردن
به كمك اين گزينه ها آمار فراواني index هاي sql مشخص مي شود و بطور اتوماتيك با هر بار اضافه كردن record تعداد كليدهاي index مورد شمارش واقع مي شود.
اين آمار به اين دليل لازم و مهم است كه sql تشخيص دهد كه گزارش خود را بر حسب index انجام دهد يا خير.
: Torn page detection صفحات پاره پاره پاره Torn
وسط اين گزينه وجود صفحات پاره مورد شناسايي قرار مي گيرد. واحد خواندن و نوشتن در page , sq مي باشد كه حجم آن ۸kB است.
اگر در هنگام كار در زمان نوشتن اطلاعات sql دچار مشكل شود يا برق قطع گردد صفحات پاره بوجود مي آيند كه با run شدن مجدد sql با فعال بودن اين گزينه t

orn page ها مورد شناسايي قرار خواهند گرفت.
: Use quoted identifiers
در حالت معمولي رشته ها (مجموعه اي از كاراكترها) در sql در داخل ‘ ‘ و يا “ “ گذاشته مي شوند.
“Ali” يا ‘Ali’ : مثال
در صورت فعال بودن اين گزينه عبارت را در “ “ هم مي توان قرار داد.
نكته:
اگر گزينه تيك دار باشد از هر ‘ ‘ و “ “ مي توان استفاده كرد ولي اگر تيك دار نباشد فقط از ‘ ‘ استفاده مي كنيم.
اگر جدولي تعريف شده باشد كه نام آن شامل space باشد مانند:
Order – details حتماً بايد در داخل “ “ قرار گيرد.

نكته:
در صورتيكه اين گزينه تيك نداشته باشد براي مورد خطاب قرار دادن جدول هاي space دار از [ ] استفاده مي شود.
: Compatibility
براي سازگاري version هاي مختلف sql (قديمي) با ۲۰۰۰
نكته:
براي دسته بندي فايل ها از file group استفاده مي كنيم.
مثل آدرس tel- محل خدمت و …
كمتر دچار تغييرات مي شود (صدا- تصوير)
براي binary مي توان از يك هارد مستقل از نوع TDE استفاده كنيم و براي text مي توان از هارد SCSI كه گران قيمت است استفاده كنيم با اين كار از سرعت بالايي برخوردار خواهيم بود. ولي هارد TDE ارزاي قيمت است.
File group زماني قابل استفاده است كه در سيستم server بيش از يك هارد فيزيكي داشته باشيم.
File group براي partion هاي گوناگون كاربردي ندارد.
اگر ما دو تا هارد داشته باشيم و آنها را در يك file group قرار دهيم باعث مي شود كه عمل نوشتن و خواندن بر روي هر دو هارد بطور همزمان انجام شود يعني موازي خواندن و موازي نوشتن.

Page (8 kB) واحد نوشتن
ولي اگر دو هارد داشته باشيم سرعت بالاتر مي رود چون اطلاعات در هر دو hard نوشته مي شود. دو page بطور همزمان نوشته و خوانده و پر مي شود.
ولي اگر در يك file group باشد و يك hard داشته باشيم يك page كه دارد پر مي شود بايد صبر كرد كه در page بعدي پر شود.
File group و كاربرد آن:
كاربرد اول file group امكان موازي نوشتن و موازي خواندن اطلاعات بر روي دو هارد مي باشد.
از آنجايي كه اطلاعات بصورت page ذخيره مي شود و page ها ظرفيت ۸kB دارند داده ها ذره ذره بر روي هارد نوشته نمي شوند بلكه page ها بايد پر شوند آنگاه دستور نوشتن از RAM بر روي هارد صادر خواهد شد كه به اين عمل Check point مي گويند.
اگر دو هارد فيزيكي در يك file group قرار داشته باشد مي توانيم موازي خواندن و موازي نوشتن بر روي آنها را بطور همزمان انجام دهيم.
File gioup زماني قابل پياده سازي است كه چندين هارد فيزيكي در اختيار داشته باشيم.
كاربرد بعدي file group جدا كردن انواع داده ها از يكديگر مي‌باشد به اين شكل كه مي توان log file را در يك محل ديگر بر روي هارد ديگر قرار دهيم تا اگر اطلاعات data دچار مشكل شد عمل بازيابي راحت تر صورت گيرد و ديگر اينكه مي توانيم داده هاي text را از

صدا و تصوير تفكيك نموده و جهت صرفه جويي در هارد مصرفي به جاي هارد SCSI براي تصاوير و اطلاعات Binary از هارد TDE استفاده كنيم.
: Query analyzar
واحد برحسب مگابايت MG Syntax
Create database database-name
[on
[< file spec > [,…n]]
[, < file group > [,…n]]
]
[log on {< file spec > [,… n ]}]
[collate collation name ]
[for load I for ATTach]
< file spec > :: =
[primary ]
([Name = logical file name,]
File name = ‘ on file name]
[, size = size]

[, MAX size = {max size | unlimited}]
[, file growth = growth increment ]) [,… n]
< file group > :: =
File group file group name < file spec > [, …n]
تحقيق:

دستورات data base كه گفته شد هر كدام چه كاربردي دارند؟
Primary گفته شد. دستورات بالاي primary تحقيق شود.
براي تغيير نام:
Create data base new data base
alter data base new data base
modify name = my data base
با استفاده از دستور alter data base را مي توانيم نام data base را تغيير دهيم.
هر دو دستور را با هم مي نويسيم براي تغيير نام و بعد كليد F5 براي اجراي دستورات استفاده مي شود.
ERD:
Entity relationship diagram
هر موجوديت در يك table قرار مي گيرد. تشخيص موجوديت ها يكي از مشكل ترين كارها در data base است چون يكسري از موجوديت ها آشكار و بعضي از موجوديت ها پنهان مي باشند.
انواع ارتباطات:
يك به يك one to one
يك به چند one to many
چند به چند many to many
نكته:
ارتباط بين دو موجوديت تنها يكي از سه حالت ارتباط مي تواند باشد.
ارتباط چند به چند
و انتخاب اينكه رابطه بين موجوديت ها كداميك از سه حالت ارتباطات بستگي به محيط عملياتي كه در آن قرار داريم.
اگر تشخيص داديم كه يك ارتباط بين دو موجوديت چند به چند است آن قابل پياده سازي نمي باشد.
بايد ارتباط چند به چند را تبديل به ارتباطات يك به چند كنيم تا بتوان آنها را پياده سازي كرد.
براي اين كار از يك table ثانويه استفاده مي كنيم براي تبديل ارتباط چند به چند به چند ارتباط يك به چند

تشخيص موجوديت ها يكي از مهمترين موضوعاتي است كه در يك بانك اطلاعاتي قابل انجام مي باشد. هر آنچه كه بتوان در داخل يك جدول قرار گيرد به عنوان يك موجوديت تعريف مي شود.
مثلاً خدمات آموزشي دانشگاه مي تواند شامل موجوديت هايي مانند:
۱- دانشجو ۲- درس ۳- استاد ۴- ترم ۵- كلاس ۶- رشته تحصيلي و … باشد.
و يا در سيستم فروش مي توانيم موجوديت هايي به شرح زير داشته باشيم:
۱- كالا ۲- مشتري ۳- فروشنده ۴- انواع فروش ۵- انواع تخفيفات ۶- شركت حمل و نقل ۷- انبار ۸- حواله ۹- فاكتور و …
بين موجوديت ها ارتباط برقرار مي شود كه شامل: يك به يك، يك به چند و چند به چند است.
اولين كار در هر data base اي تشخيص موجوديت هاي آن و سپس تشكيل شده است نگهداري كرد.
در اين حالت از آنجايي كه در data base هاي نوع relational نمي‌توان ركو

ردهاي تكراري درج كرد معمولاً يكي از فيلدها كليد اصلي تعريف مي شود. (primary key)
كليد اصلي مي تواند به شكل ذاتي يا تصنعي ساخته شود. ذاتي بودن كليد مانند شماره دانشجويي – كد پستي – شماره كارمندي و … مي باشد. اين كدها اصطلاحاً غير ماشيني تعريف مي شوند.
اما كليدهاي تصنعي كدهاي بوجود آمده توسط ماشين براي هر ركورد خواهد بود.
مانند شماره رديف – اعدادي كه بصورت auto number در جدول توليد مي شوند.
دو حالت دارد:
Primary key

Auto number در access را در sql به نام indentity مي‌شناسيم.
ويژگي primary key :
1- يكتا بودن
۲- not null بودن
همواره primany key بايد اين ويژگي را داشته باشد.
كليد خارجي
F.K forien key
كد پرسنلي ۱
كد پرسنلي p.k
كد فرزند نام
نام فرزند نام خانوادگي
نام خانوادگي سال استخدام
جنسيت تاريخ تولد
سال تولد .
.
.
.
.
.

نكته:
در ارتباط فيلدهاي مربوط در دو جدول بايد از نظر نوع و اندازه يكسان باشند بهتر است نام آنها نيز يكي باشد اما اين قانون قطعي نيست.
هم نوع فيلد و هم اندازه فيلد يكسان باشند.
: Forien key

كليد خارجي فيلد نظير primary key در جدول سمت بي نهايت مي‌باشد و به ما اجازه مي دهد كه ما بتوانيم ارتباط اين دو جدول را برقرار كنيم.
همواره forein key در قسمت بي نهايت و primary key در سمت يك تراز خواهد گرفت.
كليد اصلي P.k براي يكتا يا unipue كردن ركورد در سمت ۱ در جدول MASTER
كليد خارجي F.K در جدول Details (جزئيات) براي ايجاد ارتباط با جدول MASTER هم نوع و هم سايز با كليد اصلي جدول MASTER
كه پرسنلي غير قابل تكرار است.
ارتباط حلقه اي
ارتباط چند به چند
اين حلقه بايد شكسته و بهينه شود.
نكته:
در اين جدول مشخص نمي توان كرد كه كدام فروشنده به مشتري كدام كالا را فروخته و يا مشتري مورد نظر ما از كدام فروشنده كالا خريد كرده است.
مثال: در صورت وجود داشتن ۳ موجوديت دانشكده، گروه و استاد ارتباطات مابين را تشخيص دهيد.
نكته:
در صورت چند به چند بودن بايد شكسته شود.
قوانين نرمال سازي:
قانون اول:
قانون ۱ نرمال از درج فيلدهاي تكراري در جدول خودداري شود.
مشخصات ثابت مشخصات متغير
كد فاكتور ۱
كد فاكتور

كد فروشنده كد كالا

كد مشتري مقدار
تاريخ فاكتور قيمت
.
.
. تخفيف

قانون دوم:
قانون ۲ نرمال مي گويد مقام فيلدهاي موجود در يك جدول بايد با P.K آن جدول در ارتباط باشد.
نرمال نيست و بايد نرمال شود.
۳ تا جدول بايد بر اين درست كنيم.
كد فاكتور
كد مشتري
كد فروشنده
نام مشتري
آدرس مشتري
تلفن مشتري
نام فروشنده
فاميل فروشنده
.
.
.
قانون سوم:
همان قانون ۲ نرمال مي باشد ولي به شكل گسترش يافته. مي گويد كه اگر جدولي داراي فيلد P.K مركب باشد تمامي فيلدهاي موجود در آن جدول بايد فيلدهاي P.K در ارتباط باشند.
جدول كلاس جدول درس
كد درس
كد كلاس كد درس
عنوان درس
P.Kكد استاد واحد عملي
كد مركز آموزش
شماره كلاس
روز تشكيل كلاس
P.Kساعت تشكيل
P.Kتاريخ تشكيل واحد نظري
تمرين:
آموزشگاهي كه كار خدماتي آموزشي كامپيوتر انجام مي دهد مي‌خواهد كليه امور خود را مكانيزه كليه جدول ها شناسايي شود و ارتباطات بين آنها شناسايي شود. نمودار ER
تمرين:
قوانين چهارم و پنجم نرمال سازي تحقيق شود.
نكته:
از كليه فيلدهاي محاسباتي كه از انجام عملياتي بر روي ساير فيلدها به دست مي آيند خودداري نماييد.
كد كالا
قيمت كالا
تعداد
قيمت كل كالا

 

‌Select KALA name , price , unit , price , price * unit
As total price from KALA
انواع داده ها در : SOL
Field name Data type Exact Numeric
اعداد دقيق:
۱) bigint -2^63 الي ۸byte
2) int -2^31 الي ۴byte
3) small int -2^13 الي ۲byte
4) tiny int 0-255
00000000
11111111
الي ۱byte
5) bit يا ۱
۰۰۰۰۰۰۰۰
۰۰۰۰۰۰۰۱ ۱byte

Decimal and Numeric
براي مدل و نمره هاي درس بكار مي رود. ۱) Decimal
هر دو به يك معنا هستند و فرقي ندارند. ۲) Numeric
زوج اعداد سيال:
^۳۸-۱ ۱ تا ^۳۸+۱ -۱
نكته:
تا ۳۸ رقم دقت مي تواند داشته باشد.
Decimal (p,s)
مثال: Decimal (20,5)
ظرفيت Precision
5 1-9
9 10-19
13 20-29
17 30-38
DATA TYPE

Money and small money پولي – ماي
۱) money 8 byte
2) small money 4byte
نكته:
براي پول ايراني نمي توانيم از اين استفاده كنيم و بايد از integer استفاده شود.
اعداد تقريبي: Approximate numeric
1) float -1.79E+308 (-1.79 10308)
2) Real 1.79E+308-1 (1.79 10308)-1

n digit byte
Float (n)
1-24 7 4 read
25-53 15 8 flaot

جدول سازي
محل تعريف فيلدها و نوع
Field properties
ويژگي ها
Data time:
از اول ژانويه ۱۷۵۳ تا آخر دسامبر ۹۹۹۹
Small date time:
از اول ژانويه ۱۹۰۰ تا جون ۲۰۷۶
تاريخ ۸ بايت است بدون در نظر گرفتن علامت
براي تاريخ شمسي كاراكتري
تابع

دو روش براي مقادير رشته اي (text) در كامپيوتر پياده سازي شده است.
۱) ANSI
روش كدگذاري ASCII مي باشد يعني براي هر كاراكتر يك بايت در نظر گرفته مي شود.
علائم كوچك و بزرگ

۲) Unicode
براي هر كاراكتر دو بايت استفاده مي شود.
۶۵۵۳۵ تا
Books online\index\data type char\data types
در SQL دو دسته داريم:
طول ثابت ۱) char
از كدگذاري ASCII استفاده مي شود. طول تغيير Varchar text
2) n char
از كدگذاري Unicode استفاده مي شود. n varchar
n text
n char طول ثابت با Unicode
n varchar طول متغير با Unicode
تفاوت varchar , char
طول ثابت fixed length ثابت char
طول متغير variable length متغير varchar
Other data types:
مراحل ساخت data base :
وارد قسمت data base مي شويم و براي مثال employee و سپس كليك راست مي كنيم و گزينه new data base را انتخاب مي كنيم.
در اين پنجره ۴ قسمت داريم:
ستون اول كه نام فيلد را در آن مي نويسيم.
در data type نوع فيلد را مشخص مي كنيم

.
در قسمت length مشخص مي شود چه حجم اين ستون اشغال شده.
در قسمت allow nulls آيا اجباري در ورود اطلاعات هست يا خير.
سپس كليك كرده و به رديف پايين مي رويم.
را برميداريم Varcar l0 allow null N Name
Emp fomily Varcar 15
Department name char 15
Address char 30
Telephon int 4
بعد از انتخاب آنها كليد p.k را انتخاب كرده و بعد save مي كنيم و براي table نام انتخاب مي كنيم.
سپس براي table دوم راست كليك كرده و مثل قبل برايش مشخصات وارد مي كنيم و براي برقرار شدن اين ارتباط بين دو جدول بايد فيلد مشترك داشته باشيم.
اگر قرار باشد در جدول فيلد جديدي بسازيم روي جدولي كه ساختيم راست كليك كرده گزينه design table را انتخاب كرده و فيلد مورد نظر را بوجود مي‌آوريم.
طراحي اوليه جدول design table
Open table:
Return all rows براي ورود اطلاعات استفاده مي كنيم.
۱ Ali ahmady mail 1988/12/06 Tehran tel
نكته:
اگر براي شماره tel كه قبل از آن داشت نبايد آن را عدد تعريف كنيم چون قبل از عدد اعتبار ندارد بايد char تعريف شود.
در اينجا تغييرات بطور اتوماتيك save و ثبت مي شود.
رنگ سبز پررنگ نشان دهنده فعال بودن آن است.
SCI\SQL CLASS
روي اين راست كليك كرده گزينه Edit SQL … را انتخاب مي كنيم گزينه show system را تيكش را برداشته تا روي data base راست كليك كرده New … را باز كرده يك پنجره باز مي شود نام را وارد مي كنيم:
Employee
روي + employee را باز كرده گزينه table را انتخاب مي كنيم گزينه new table را انتخاب كرده و فيلدها را مي سازيم.
مالك data base owner data … مخفف dbo
روي table ساخته شده را كليك مي كنيم و بعد گزينه properties را انتخاب مي كينم تا بتوانيم اطلاعات را ببينيم.
براي ساخت كليد اصلي p.k در جدول سمت چپ راس

ت كليك مي كنيم گزينه اول را انتخاب مي كنيم.
زير employee كه ساختيم گزينه diagram راست كليك مي كنيم.
نكته:
روي diagram راست كليك مي كنيم گزينه new diagram و سپس diagram wizard سپس next را زده يك پنجره باز مي شود.
در قسمت available table هر دو را add مي كنيم و next را زده و سپس finish را مي زنيم.
اتصال دو جدول:
روي emp ID جدول employee انتخاب كرده مي گيريم و مي كشيم و مي‌بريم روي empID جدول chid مي اندازيم.
نكته:
پنجره creat relationship ايجاد مي شود كه ارتباط اين دو جدول را ممكن مي سازد.
FK-child-employee
اگر Ok اين پنجره را بزنيم و از ما خطا بگيرد يعني data type و سايز با هم متفاوت است و بايد برويم در table مشكل را رفع و save كرده سپس اتصال دو جدول برقرار مي شود.
ارتباط چند كليد ارتباط ۱
نكته:
براي table ساخته شده مي توانيم حالت هاي مختلفي داشته باشيم.
Employee Right click \table view\ standard

نكته :
اگر خواستيم هر دو جدول با هم در يك حالت باشند هر دو جدول را select مي كنيم و سپس در قسمت آبي نام جدول right click كرده سپس table view و حالت هاي مختلف را مي توانيم داشته باشيم.
در data base علامت North wind + را باز مي كنيم قسمت table را نگاه مي كنيم. به عنوان مثال روي table كه نامش product است راست كليك كرده گزينه open table را زده و return all rows را زده يك پنجره باز مي شود كالاها را مي بينيم.
SQL Query Analyzer

هنگام باز شدن اين قسمت يك پنجره باز مي شود كه مشخصات را از ما مي‌خواهد.
Connect to SQL Server
دو حالت مي توان انتخاب كرد كه بر اساس زمان نصب مي باشد.
Windows authentication
در اين پنجره اي كه بعد از Ok كردن باز مي شود كدنويسي مي كنيم.
نكته:
در قسمت بالاي آن combo را باز مي كنيم و گزينه north wind را انتخاب مي كنيم.
حال Books online را باز كرده در قسمت index مي توانيم تايپ كنيم. Select close و مي توانيم از اين قسمت كمك بگيريم.
دستور كلي select در اين قسمت نوشته شده است.
در قسمت index تايپ مي كنيم select , from و رويش click مي كنيم و دستور select به اين ترتيب مي باشد.
Select select-list
[INTO new-table]
FROM table-source
[WHERE search-condition]
[GROUP by group-by-expression]
[MAVING search-condition]
[ORDER by order-expression [ASC|DESC]]
ليست فيلد select
نام جدول FROM
مثال:
Sele

ct first name , last name , employee from employees
اين دستورات را در پنجره SQL Query analyzer مي نويسيم سپس كليد FS را زده تا اجرا شود.
در قسمت پايين صفحه اطلاعات در جدول به نمايش در مي آيد.
Select predicted , product name , unit price From products
كليد F5 را زده تا اجرا شود اين دستورات چون پشت سرهم نوشته مي‌شوند بعد از زدن F5 هر دو دستور اجرا مي شود.
نكته:
ولي اگر بخواهيم فقط يكي از دستوراتتان اجرا شود بايد آن را انتخاب و select كرده و بعد F5 را بزنيم.
تمرين:
گزارشي تهيه كنيد و در آن در كنار مشخصات كالا، يك فيلد محاسباتي به نام ماليات Tax كه براي هر كالايي ۱۰% ماليات محاسبه نمايد را نمايش دهيد.
فيلد محاسباتي:
يعني فيلدي كه با انجام محاسبات از روي يك فيلد ديگر ساخته مي شود.
Select protected , product name , unit price ,
Unit price * 0.1
From products
بر اساس اين دستورات فيلد به وجود مي آيد ولي بدون نام. حال براي داشتن اسم مستعار و جديد دستورات زير را مي نويسيم:
Select protected, product name , unit price , unit price * 0.1 AS TAX
با استفاده از دستور AS حال نام فيلدها TAX خواهد بود.
مثال:
Select protected , left (product name , 10) , unit price from products
نكته:
در فرمان select مي توانيم دامنه نمايش ركورد را (predicate) تغيير دهيم كه اين كار توسط دستوراتي انجام مي شود.
اين دستورات عبارتند از:
اين دستورات بعد از select مي آيند. نمايش كليه ركوردها

ALL
فقط موارد غير تكراري را نمايش مي دهد Distinct
عدد صحيح Top n
15% كل ركوردها را ميدهد Top percent
مثال:
Select all protected , product name from products
مثال:
Select city
From customers
حال با دستور distinct مي نويسيم تا شهرهاي تكراري نمايش ندهد.
Select distinct city
From customers
از دستور Top n استفاده مي كنيم يعني n ركورد از جدول را از بالا مي‌گرداند.
Select Top 10 products , product name from products
دستور top n percent را استفاده مي كنيم.
Select top 10 percent prodectid , product name from products
ORDER BY:
براي منظم كردن اطلاعات به شكل صعودي و نزولي بعد از from استفاده مي شود.
ليست فيلدها select
نزولي صعودي نام جدول from
ASC|DESC ليست فيلد يا نام فيلد ORDER BY از Z به A از A به Z
Select productid , product name , unit price
From products
ORDER By product name ASC
مثال:
Select productid , product name , unit price
Form products
ORDER By product name desc , unit price ASC
نكته: