-
March 31st, 2016, 00:43
#11
آموزش SQL Server از صفر تا صد بخش هفتم
ورود و صدور دادهها از منابع خارجي
جمله DELETE , UPDATE, INSERT در داخل يك برنامه پايگاه اطلاعاتي بسيار مفيد هستند. اين جملات به همراه جمله 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) خيلي قوي و مشهور از اين دستور استفاده ميكنند.
راههاي ايجاد پايگاه دادهاي
نحوه نگارش جمله CREATE DATABASE در نسخههاي مختلف SQL تفاوت زيادي دارد. بسياري از SQLها از جمله CREATE DATABASE صرفنظر ميكنند و مستقيماً به سراغ جمله CREATE TABLE ميروند. چون قبل از اينكه جدولي ايجاد شود، ما بايد پايگاه دادهاي ايجاد كنيم، اين بخش روي بعضي از مفاهيمي كه يك طراح هنگام ساخت يك پايگاه اطلاعاتي تكيه ميكند، متمركز شده است. اولين مطلبي كه بايد درنظر گرفته شود، سطح دسترسي مجاز ميباشد. اگر از سيستم مديريت پايگاه دادهاي رابطهاي (RDBMS) استفاده كنيم كه از سطح دسترسي مجاز حمايت ميكند، بايد مطمئن باشيم كه امكان تنظيم سطح دسترسي مجاز را داريم و يا اينكه اداره كننده سيستم به ما اجازه CREATE DATABASE را اعطا كرده است. براي اطلاعات بيشتر راجع به اين موضوع بايد به مستندات RDBMS خود مراجعه كنيم. بيشتر RDBMDها همچنين اين امكان را به ما ميدهند تا يك اندازه پيش فرض براي پايگاه اطلاعاتي مشخص كنيم (معمولاً برحسب فضاي ديسك سخت (مثلاً مگابايت)). بنابراين ما نياز به دانستن اين مطلب داريم كه چگونه سيستم پايگاه دادهاي، دادهها را بر روي ديسك به اندازه موردنظر ذخيره ميكند. مسئوليت درنظر گرفتن اين فضا نيز به عهده اداره كنندگان سيستم ميباشد.
طراحي پايگاه دادهاي
طراحي يك پايگاه دادهاي مناسب براي موفقيت سيستم كاربردي اهميت فراواني دارد. بسياري از عوامل ممكن است در طراحي پايگاه دادهاي ما تأثير بگذارند، مثل:
امنيت
ميزان فضاي موجود روي ديسك
ميزان سرعت جستجو و بازيابي پايگاه دادهها
ميزان سرعت بهنگام سازي پايگاه دادهها
ميزان سرعت اتصال چند جدول براي بازيابي دادهها
حمايت RDBMS از جداول موقت
ميزان فضاي روي ديسك از عوامل مهم است. گرچه ممكن است فكر كنيد كه با وجود چندين گيگابايت فضا ديگر جاي نگراني براي فضاي ديسك وجود ندارد، بزرگ شدن حجم پايگاه دادهاي عمل بازيابي را طولاني ميكند. اگر در طراحي ساختار جداول دقت به خرج نداده باشيم احتمال تكرار دادهها افزايش مييابد. اغلب ممكن است مشكل متفاوت و عكسي نيز اتفاق بيفتد. به اين ترتيب كه ممكن است ما عمل نرمال سازي را روي پايگاه دادهاي خودمان انجام داده و جداول جديدي ايجاد كرده باشيم، اگرچه در تئوري در طراحي پايگاه دادهاي موفق بودهايم ولي در واقع براي پاسخگويي از طريق پرس و جو ممكن است با مشكل زمان طولاني جهت اجرا مواجه شويم.
نگهداري پايگاه اطلاعاتي طراحي شده در اين حالت گاهي اوقات مشكل است زيرا ساختار جدول ممكن است هدف طراح را نامفهوم و گنگ نمايد. اين مطلب علت اصلي مستندسازي است، زيرا چنانچه عمل مستندسازي روي طراحي و برنامه نويسي انجام گيرد، افراد بعدي و يا كساني كه با ما كار ميكنند، ميتوانند به آنچه ما در هنگام طراحي و كد كردن برنامه فكر ميكرديم، پيببرند. در فرهنگ طراحي پايگاه دادهها، مستندسازي تحت عنوان فرهنگ دادهها يا كاتالوگ سيستم شناخته ميشود.
-
-
March 31st, 2016 00:43
# ADS
-
March 31st, 2016, 00:46
#12
پاسخ : آموزش SQL Server از صفر تا صد بخش چهارم
-
-
March 31st, 2016, 00:52
#13
آموزش SQL Server از صفر تا صد بخش هشتم
ايجاد يك فرهنگ دادهاي (كاتالوگ سيستم)
فرهنگ دادهاي مهمترين فرم مستندسازي طراح پايگاه دادهاي است. اين فرهنگ وظايف زير را دارا ميباشد:
- شرح هدف پايگاه دادهها و كسي كه از آن استفاده ميكند.
- توضيح مشخصات پايگاه دادهاي: روي چه دستگاهي ايجاد شده است، اندازه پيش فرض پايگاه دادهاي يا اندازه فايل رخداد (كه براي ذخيرهسازي اطلاعات عمليات پايگاه دادهاي در بعضي از 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 براي ايجاد شاخص شبيه زير است:
کد:
CREATE INDEX index – name
ON table – name (column – name l, [column – name 2], …)
همانگونه كه بارها ديديم، نحوه نگارش CREATE INDEX ميتواند در سيستمهاي مختلف پايگاه دادهاي فرق داشته باشد. جمله CEATE INDEX يك شاخص را از پايگاه دادهاي برميدارد. مثل هميشه، جمله CREATE INDEX در نسخههاي مختلف تفاوت دارد.
تذكر ـ وقتي جدولي حذف ميشود، تمام شاخصهاي وابسته به آن نيز حذف ميگردند.
ویرایش توسط a00b : March 31st, 2016 در ساعت 00:52
دلیل: قلت عملاعی
-
-
March 31st, 2016, 14:29
#14
پاسخ : آموزش SQL Server از صفر تا صد
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++
-
-
March 31st, 2016, 14:43
#15
آموزش SQL Server از صفر تا صد بخش نهم
نكات شاخصبندي
فهرست زير چندين نكات را در هنگام استفاده از شاخصها متذكر ميشود:
- s براي جداول كوچك، شاخصها هيچ اثري در بهبود اجراي پايگاه دادهاي ندارند.
- s شاخصها بهترين اثر را خواهند داشت اگر ستونهايي كه شاخص ميشوند داراي يك طيف وسيعي از داده باشند.
- s شاخصها ميتوانند پرس و جوي ما را بهينه نمايند وقتي جواب پرس و جوها يك مقدار كمي داده باشد (مثلاً كمتر از 25% دادهها). اگر حجم زيادي از دادهها در يك زمان برگردانده ميشود، شاخصهاي نوع داده سربار محسوب ميشوند و عملاً كارايي ندارند.
- s شاخصها ميتوانند نرخ بازيابي دادهها را بهبود بخشند. به هرحال آنها بهنگام سازي دادهها را كند ميكنند.
- s هميشه روي فيلدهايي شاخصبندي را انجام دهيم كه در عمل اتصال بين جداول استفاده ميشوند. اين روش به طرز قابل ملاحظهاي سرعت اتصال را بالا ميبرد.
- s اكثر سيستمهاي پايگاه دادهاي امكان ايجاد شاخصي روي يك ديد را به ما نميدهند. اگر سيستم پايگاه دادهاي اين اجازه را ميدهد، از شبه جمله GROUP BY به همراه جمله SELECT استفاده كنيم تا ديدي براي مرتبسازي دادههاي آن ديد ايجاد كند (متأسفانه بسياري از سيستمها قادر نيستند از شبه جمله ORDER BY به همراه جمله CREATE VIEW استفاده كنند.
- s روي فيلدهايي كه مرتباً در حال بهنگام شدن يا تغييرند شاخص ايجاد نكنيم.
- s شاخصها و جداول را روي يك درايو فيزيكي ذخيره نكنيم. جداسازي اين اشيا رقابت بين درايو را حذف كرده و در نتيجه پرس و جوها سريعتر خواهد شد.
- s شاخصها نبايد روي فيلدهايي بنا شوند كه شامل تعداد زيادي مقدار NULL هستند.
شاخصبندي روي بيشتر از يك فيلد
SQL همچنين اين امكان را ميدهد كه روي بيشتر از يك فيلد شاخص ايجاد نماييم. اين نوع شاخص يك شاخص مركب ناميده ميشود.
استفاده از كلمه كليدي UNIQUE به همراه CREATE INDEX
شاخصهاي مركب اغلب به همراه كلمه كليدي UNIQUE براي جلوگيري از تكرار ركوردها استفاده ميشوند.
توجه ـ چنانچه كليد اصلي براي يك جدول مشخص شده باشد، شاخصها تلويحاً توسط پايگاه دادهاي ايجاد ميگردند. زيرا ميدانيم كه هر مقدار از داخل كليد اصلي بايد يكتا باشد. محدوديت كليد اصلي و يكتايي هر دو باعث ميشوند كه سيستم، شاخص ايجاد نمايد.
شاخصها و اتصالها
هنگام استفاده از اتصالهاي پيچيده در پرس و جوها، جمله SELECT ميتواند وقت زيادي مصرف كند. اگر جداول بزرگ باشند اين مقدار وقت ممكن است به چندين ثانيه برسد. اين نوع اجرا در يك محيط كلاينت سرور كه تعداد زيادي كاربر در آن واحد در حال كار كردن ميباشند ممكن است مدتهاي زيادي كاربران را در حالت انتظار بگذارد. ايجاد يك شاخص روي فيلدهايي كه اغلب اوقات در اتصالها استفاده ميشوند ميتواند اجراي پرس و جوي شما را به طرز قابل ملاحظهاي بهبود بخشد، به هر حال اگر تعداد زيادي شاخص ايجاد شوند، به جاي بالا بردن سرعت ميتوانند اجراي سيستم را پايين آورند.
ايجاد ديدها View ها
معرفي ديد
يك ديد اغلب به يك جدول مجازي اشاره ميكند و اين به آن معني است كه يك ديد شبيه جدول است و شبيه به يك جدول به آن مراجعه ميشود. به هرحال، ديدها شامل دادههايي مثل جداول نيستند. تنها رسانه موردنياز براي يك ديد، رسانهاي براي نگهداري تعريف ديد است. يك ديد به وسيله يك پرس و جو روي يك يا چند جدول پايگاه دادهاي تعريف ميشود. يك ديد چيزي جز يك پرس و جوي از قبل تعريف شده نيست. ديدها به وسيله جمله CREATE VIEW ايجاد ميشوند.
بعد از اينكه ديد ايجاد شد، ميتوانيم از دستورات SQL زير براي مراجعه به آن ديد استفاده كنيم:
- SELECT
- INSERT
- UPDATE
- DELETE
كاربرد ديدها
ما ميتوانيم از ديدها يا جداول مجازي براي پرس و جوهاي پيچيده استفاده كنيم. بعد از آنكه يك ديد يا مجموعهاي از دادهها ايجاد شدند، ميتوانيم از آن ديد همانند يك جدول استفاده نماييم. به هرحال محدوديتهاي خاصي براي تغيير دادهها در داخل ديدها ممكن است بوجود آيد. وقتي دادهاي در يك جدول تغيير ميكند، ديدهاي ايجاد شده نيز تغيير مينمايند البته بايد توجه داشته باشيم كه ديدها در پايگاه دادهاي همانند جدول فضاي فيزيكي اشغال نميكنند.
نحوه نگارش جمله CREATE VIEW به شكل زير است:
کد:
CREATE VIEW view – name [(column l, column 2, …)] AS
SELECT column – name(s)
FROM table – name
WHERE condition
تذكر ـ اگر بلافاصله پس از جمله CREATE VIEW (قبل از كلمه كليدي AS) مستقيماً فهرستي از ستونها را مشخص نكنيم، نام ستونها در ديد همان نام ستونهاي انتخاب شده جدول پايه خواهد بود.
تغيير نام ستونها
ديدها نحوه ارائه دادهها را آسان ميكنند. به علاوه با معرفي يك ديد با استفاده از جمله create view اين امكان به ما داده ميشود تا ستونهاي انتخابي را تغيير نام دهيم.
پردازش ديد در SQL ديدها ميتوانند دادههاي جداول را به شكلي خيلي راحتتر از آنچه در ساختار جدول پايگاه دادهاي وجود دارد، ارائه دهند. وقتي چندين پرس و جوي پيچيده را پشتسر هم اجرا ميكنيم، ديدها ميتوانند بينهايت كار را ساده نمايند.
محدوديتهاي استفاده از SELECT
SQL محدوديتهاي مشخصي را در هنگام استفاده از جمله SELECT براي ساختن يك ديد قرار ميدهد. قوائد زير هنگام استفاده از جمله SELECT بكار گرفته ميشوند:
s از عملگر UNION نميتوانيم استفاده كنيم.
s از شبه جمله ORDER نميتوانيم استفاده كنيم اما ميتوانيم از شبه جمله GROUP BY در يك ديد استفاده نماييم تا وظايف مشابه شبه جمله ORDER BY را اجرا كنيم.
تغيير دادهها در يك ديد
همانگونه كه گفته شد، با ايجاد يك ديد با استفاده از يك يا چند جدول فيزيكي در يك پايگاه دادهاي، ميتوانيم يك جدول مجازي بسازيم، تا از دستورات SQL يا يك برنامه كاربردي پايگاه دادهاي استفاده كنيم. بعد از اينكه يك ديد توسط جمله CREATE VIEW … SELECT ايجاد شد، ميتوانيم با استفاده از دستورات پردازش دادهها مثل DELETE, INSERT, UPDATE اعمال بهنگام سازي، درج و حذف دادهها را روي ديد انجام دهيم.
مشكلات تغيير دادهها با استفاده از ديدها
در زير فهرستي از محدوديتهاي متداول كه در هنگام كار با ديدها با آن مواجه هستيم آورده شده است:
ـ نميتوانيم از جملات DELETE در ديدهاي چندين جدول استفاده كنيم.
ـ نميتوانيم از جمله INSERT استفاده كنيم مگر آنكه تمام ستونهاي NOT NULL استفاده شده در جدول اصلي در ديد نيز باشند. اين محدوديت مورد اجرا گذاشته ميشود زيرا پردازنده SQL نميداند كه چه مقاديري را به داخل ستونهاي NOT NULL درج كند.
ـ اگر ركوردهايي را از طريق يك ديد اتصالي درج يا بهنگام كنيم، تمام ركوردهايي كه بهنگام شدهاند بايد متعلق به جدول فيزيكي يكساني باشند.
ـ اگر از شبه جمله DISTINCT براي ايجاد يك ديد استفاده كنيم، نميتوانيم ركوردها را در داخل يك ديد درج يا حذف نماييم.
ـ نميتوانيم يك ستون مجازي (ستوني كه نتيجه يك عبارت يا تابع است) را بهنگام كنيم.
كاربردهاي مشترك ديدها
در اينجا وظايفي كه ديدها ميتوانند اجرا كنند، آمده است:
s تهيه امكانات امنيتي براي كاربر
s تبديل بين واحدها
s ساده كردن و ساخت پرس و جوهاي پيچيده
s خلاصه نمودن دادهها از چندين جدول
ايجاد امنيت با استفاده از ديدها
امروزه تمام سيستمهاي پايگاههاي دادهاي داراي مجموعه كاملي از امكانات امنيتي هستند. كاربران سيستم پايگاه دادهاي معمولاً بسته به راهي كه آنها از پايگاه دادهاي استفاده ميكنند به گروههايي تقسيم ميشوند.
معموليترين نوع اين گروهها اداره كنندگان پايگاه دادهاي، طراحان پايگاه دادهاي، اشخاص وارد كننده اطلاعات و كاربران معمولي ميباشند. اين گروههاي كاربران داراي درجات مختلفي از حق دسترسي به پايگاه دادهاي ميباشند. اداره كننده پايگاه دادهاي احتمالا داراي بيشترين و كاملترين كنترل روي سيستم پايگاه دادهاي است. مثل حق 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 امكان اتصال جدولها را به شرط عدم تساوي نيز دارد. در اين حالت به جاي علامت مساوي (=) از علامت نامساوي استفاده ميكند. در دنياي واقعي نيز اتصال به شرط تساوي از اتصال به شرط غير تساوي متدوالتر و مرسومتر است ولي به هرحال ممكن است با شرايطي مواجه شويم كه كاربرد موردنظر ما نتايج بهتري را با اتصال به شرط غير تساوي ايجاد كند.
-
-
March 31st, 2016, 16:24
#16
پاسخ : آموزش SQL Server از صفر تا صد
-
-
March 31st, 2016, 16:33
#17
آموزش SQL Server از صفر تا صد بخش دهم
اتصال جدولها با استفاده از كلمه كليدي 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 انواع مختلفي از محدوديتها وجود دارد.
جامعيت دادهها
محدوديتها براي اطمينان از صحت و سازگاري دادهها در يك پايگاه اطلاعاتي رابطهاي بكار ميروند. جامعيت دادهها اطمينان از صحت و سازگاري دادهها در پايگاه دادهاي است. جامعيت دادهها يك پايگاه اطلاعاتي رابطهاي را از طريق اعمال محدوديت روي جداول كنترل ميكند. هر وقت افراد دادههايي را به داخل پايگاه دادهاي وارد ميكنند (دادهها مجبور هستند كه به نحوي وارد شوند) اشتباهات در هنگام ورود ممكن است منجر به عدم صحت اطلاعات شوند.
جامعيت دادهها درگير صحت ورود اطلاعات و سازگاري ذخيره سازي آنها در داخل پايگاه دادهها ميباشد. بطور مثــال شما نميخواهيد كه شماره تلفن شخصي را يك اپراتور به صورت 3178889222 وارد كند و اپراتور ديگري به صورت (317) 888-9222.
دادهها بايد دقيق و صحيح باشند و به شكل سازگاري در پايگاه دادهاي ذخيره شوند و امكان بازيابي دقيق داده از پايگاه دادهاي فراهم آيد و نيز امكان مقايسه دقيق بين دادهها انجام شود.
چرا از محدوديتها استفاده ميكنيم؟
براي پاسخ به اين سئوال، نگاهي به محتويات اصلي جامعيت داده مياندازيم (صحت و سازگاري دادهها) و اينكه چگونه جامعيت دادهها را در يك پايگاه دادهاي از طريق كاربرد محدوديتها اعمال ميكنيم.
صحت دادهها درگير وضع قوانيني (محدوديتهايي) روي ستونهاي جدول هستند، طوريكه سيستم پايگاه دادهاي فقط امكان درج دادههاي خاصي را در پايگاه ميسر سازد. مثلاً شما ميخواهيد كه فقط دادههاي عددي به داخل يك ستون كه حاوي نرخ ساعتي كارمندي است وارد شود و نيز ميخواهيد مطمئن شويد كه ستون 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 يك جدول فرزند است.
ارتباط جدول پدر/ جدول فرزند
(هر حقوق بايد با نام يك كارمند منطبق شود)
در شكل فوق ستون 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 اضافه مينماييم.
نرمالسازي پايگاه دادهها
پايگاه دادهاي خام
هنگامي كه شروع به طراحي يك پايگاه داده ميكنيم، يا اينكه آن را از يك نسخه SQL به نسخه ديگر منتقل ميكنيم، با حجم زيادي از دادهها مواجه ميشويم. همه دادهها موجود ميباشند ولي قابل كنترل نيستند. يك پايگاه دادهاي كه نرمال نشده است ممكن است شامل دادههايي باشد كه در يك يا چند جدول مختلف به دلايلي قرار گرفته باشند. اين مطلب از نقطهنظر امنيت، فضاي مورد استفاده ديسك، سرعت پرس و جوها، كارايي بهنگام سازي پايگاه دادهها و مهمتر از همه جامعيت و يكپارچگي دادهها خوب نيست.
يك پايگاه دادهاي قبل از عمل نرمالسازي، به جداول منطقي كوچكتر و قابل كنترلتر شكسته نشده است. براساس تجربيات، پايگاههاي دادهاي ميتواند فقط شامل يك زوج جدول باشند، هر جدول صدها ستون (يا فيلد) دادهاي را در خود جا داده است.
طراحي پايگاه دادهاي منطقي
هر پايگاه دادهاي بايد با توجه به نياز كاربر طراحي شود. طراحي پايگاه دادهاي منطقي، همچنين به مدل منطقي اشاره ميكند يعني پردازش دادهها مرتب شده به صورت منطقي و سازماندهي آنها به گروههايي كه ميتوانند به سادگي نگهداري شوند و توسط كاربران نهايي مورد استفاده قرار گيرند. طراحي منطقي يك پايگاه دادهاي بايد تكرار دادهها را كاهش دهد يا حتي كاملاً از بين ببرد. به هر حال، چرا يك داده را دوباره ذخيره ميكنيم؟
طراحي پايگاه دادهاي منطقي اولين مرحله و قدم در بكارگيري و پيادهسازي يك پايگاه دادهاي فيزيكي نيست، بلكه اولين قدم تهيه محيط يك پايگاه دادهاي است بطوري كه ساختار و محدوديتهاي فيزيكي براي كاربران روشن باشد.
نيازهاي كاربر نهايي چيست؟
نيازهاي كاربران نهايي بايد در صدر فهرست ملاحظات در هنگام طراحي يك پايگاه دادهاي باشد. بايد توجه شود كه كاربران نهايي مردمي هستند كه سرانجام از پايگاه دادهاي استفاده ميكنند و ورود اطلاعات از طريق همين كاربران انجام ميشود، در نتيجه در طراحي پايگاه دادهاي اين موضوع بايد درنظر گرفته شود.
برنامهاي كه آنها بتوانند از طريق آن به پايگاه دادهاي دستيابي پيدا كنند، بايد ساده باشد ضمن آن كه اجراي مناسب نيز درنظر گرفته شود در غير اينصورت نياز كاربران ناديده گرفته خواهد شد. ساختار فيزيكي پايگاه دادهاي ميتواند شفاف باشد، اگر يك طراحي منطقي مناسب به كار گرفته شود.
در اينجا سئوالاتي كه بايد از كاربران نهايي پرسيده شوند، آورده شده است:
- چه دادههايي بايد در پايگاه دادهاي نگهداري و ذخيره شود؟
- دادهها چطور بايد در داخل پايگاه دادهاي دستهبندي شوند؟
- چطور كاربران به پايگاه دادهاي دسترسي داشته باشند؟
- چطور تمام دادهها مربوط به پايگاه دادهاي ميشود؟
- چه معياري براي صحت دادهها بايد درنظر گرفته ميشود؟
افزونگي دادهها
دادهها نبايد افزونگي داشته باشند، بدين معني كه تكرار دادهها به چند دليل بايد در حداقل نگهداري شود. مثلا، لازم نيست كه آدرس منزل كارمندي را در بيشتر از يك جدول نگهداري كنيم. يك آدرس براي يك كارمند در داخل يك جدول ممكن است با آدرس همان كارمند در جدولي ديگر يكسان نباشد. كدام جدول صحيح است؟ آيا مستنداتي براي كنترل آدرس جاري كارمند وجود دارد؟ ممكن است اين طور باشد و ممكن است نباشد. در اينجا افزونگي دادهها ممكن است تبديل به يك مشكل بزرگ گردد.
-
-
March 31st, 2016, 16:33
#18
پاسخ : آموزش SQL Server از صفر تا صد بخش نهم
----------------------------------
-
-
March 31st, 2016, 16:38
#19
آموزش SQL Server از صفر تا صد بخش یازدهم
فرمهاي نرمال
فرمهاي نرمال راهي براي اندازهگيري سطح يك پايگاه دادهاي كه نرمال شده است، ميباشند، سه فرم نرمال متداول عبارتند از:
- فرم اول نرمال
- فرم دوم نرمال
- فرم سوم نرمال
هر فرم نرمال بستگي دارد به گامهاي نرمال سازي كه در فرم نرمال قبلي برداشته شده است. به طور مثــال، براي نرمالسازي يك پايگاه دادهاي با استفاده از فرم دوم نرمال، پايگاه دادهاي بايد در فرم اول نرمال قرار گرفته باشد. براي نرمال سازي پايگاه دادهاي توسط فرم سوم نرمال اين پايگاه بايد در فرم دوم نرمال قرار داشته باشد. (اين بدان معني است كه پايگاه دادهاي در فرم اول نرمال ميباشد)
فرمهاي نرمال بايد به شكل ترتيبي به كار گرفته شود.
فرم اول نرمال
هدف از فرم اول نرمال آن است كه دادههاي منطقي كه جداول ناميده ميشوند، تقسيم كنيم. وقتي كه جدولي طراحي شد، يك كليد اوليه يا اصلي به آن جدول اختصاص مييابد. كليد اصلي در يك جدول يك يا چند ستوني است كه هر رديف از آن جدول را منحصر بفرد ميكند. در اين حالت به جاي داشتن يك جدول بزرگ، چندين جدول كوچكتر با قابليت كنترل بهتر خواهيم داشت.
فرم دوم نرمال
هدف از فرم دوم نرمال داشتن دادههايي است كه فقط تا حدي به كلي اوليه وابسته است و آن دادهها را در جدول ديگري ذخيره ميكند. فرم دوم نرمال را از فرم اول نرمال بوسيله تقسيم جدول اصلي به دو جدول بيرون ميكشيم؛ طوريكه هر كدام از جداول داراي يك موضوع خاص خود ميباشند.
فرم سوم نرمال
هدف از فرم سوم نرمال برداشتن دادهها از جدولي است كه به كليد اوليه وابسته نميباشد. در تبديل جدولها به فرم سوم نرمال، جداول جديدتري ايجاد ميكنيم تا دادههاي بيشتري را در آنها جاي دهيم.
مزاياي نرمالسازي
نرمال سازي مزاياي بيشماري براي يك پايگاه دادهاي ايجاد ميكند. بعضي از مزاياي اصلي شامل موارد زير است:
- سازماندهي كليتر پايگاه دادهها
- كاهش افزونگي دادهها
- سازگاري دادهها در داخل پايگاه دادهها
- طراحي بسيار انعطافپذيرتر پايگاه دادهها
- امكمان امنيت بهتر پايگاه دادهها
سازماندهي از جريان نرمالسازي بدست ميآيد و كار هر شخص را سادهتر ميكند، از كاربري كه به جداول پايگاه دادهها دسترسي دارد تا طراح و اداره كننده بانك (DBA) كه مسئوليت اداره بانك اطلاعات به عهده او ميباشد. افزونگي دادهها كاهش مييابد، به اين ترتيب ساختار دادهها سادهتر ميگردد و در مصرف ديسك صرفهجوي خواهد شد. چون تكرار دادهها كم ميگردد، امكان ناسازگاري دادهها بطور چشمگيري كاهش مييابد.
چون پايگاه دادهاي نرمال، به جداول كوچكتري شكسته شده است، وقتي ساختار موجود را تغيير ميدهيم، انعطاف بيشتري داريم. خيلي آسانتر است هرگاه جدول كوچكي را با تعداد كم داده تغيير دهيم، تا اينكه بخواهيم جدول بزرگي را با تمام دادههاي حياتي پايگاه دادهها تغيير دهيم. وقتي عمل نرمالسازي انجام شده باشد امكان اعمال امنيت بهتر خواهد شد. بنابراين كار هر شخص سادهتر ميگردد و كاربر نهايي راضي خواهد شد.
معايب نرمالسازي
گرچه اكثر پايگاههاي دادهاي موفق در درجاتي از نرمال ميباشند ولي يك عيب اساسي در يك بانك اطلاعاتي نرمال شده وجود دارد؛ و آن كاهش سرعت پردازش دادهها است. قبول كاهش سرعت پردازش پايگاه دادهها، مستلزم آگاهي است چون هر پرس و جو يا درخواست تغيير به پايگاه دادهها فرستاده ميشود، در نتيجه عواملي در اجرا و سرعت پردازش آن دخالت دارند از جمله نحوه كاركرد CPU، نحوه كار حافظه و امكانات ورودي/ خروجي (I/O).
يك پايگاه اطلاعاتي نرمال شده به دليل پردازش تغييرات و پرس و جوهاي پايگاه دادهاي به CPU، حافظه و I/O بيشتري نياز دارد تا يك پايگاه دادهاي نرمال نشده. اين بهخاطر آن است كه ابتدا بايد جداول به هم متصل شوند و سپس دادههاي موردنياز كاربر از داخل اين جداول اتصالي بازيابي گردند.
از نرمال درآوردن يك پايگاه اطلاعاتي
از نرمال در آوردن، روند تغيير ساختار جدول يك پايگاه نرمال شده به شكلي است كه اجازه افزونگي كنترل شده به جهت اجراي بهتر و سريعتر را به پايگاه دادهاي ميدهد. تنها دليل از نرمال در آوردن يك پايگاه دادهاي بهبود اجراي پايگاه دادهها ميباشد. يك پايگاه دادهاي از حالت پايگاه دادهاي روند كاهش در حالت نرمال يك پايگاه دادهاي، به اندازه يك يا دو درجه است. البته بايد به خاطر داشته باشيم كه نرمالسازي واقعاً ممكن است اجراي پايگاه دادهاي را كندكند چون نياز به اتصال جدولها ميباشد. خارج كردن پايگاه دادهاي از حالت نرمال نيازمند تركيب جداول جدا شده است و احتمال ايجاد دادههاي تكراري در داخل جداول وجود دارد.
انجام اين كار نتيجهاي كاهش تعداد I / O و زمان صرف شده كمتري توسط CPU است؛ بنابراين سرعت اجرا افزايش خواهد يافت. به هرحال، عمل خارج كردن پايگاه دادهها از حالت نرمال هزينه بر ميباشد. در يك پايگاه اطلاعاتي نرمال شده، ستونهايي كه براي تقسيم جداول انتخاب شده بودند در هنگام تركيب جداول باعث اتصال آنها خواهند شد و در نتيجه افزونگي دادهها افزايش مييابد. وقتي يك پايگاه دادهاي نرمال شده، از حالت نرمال بيرون ميآيد. ما با دادههاي مربوط به هم در جدولي بزرگتر (برخلاف چندين جدول كوچك) روبرو هستيم در نتيجه يك پرس و جود در يك جدول بزرگتر، سريعتر اجرا خواهد شد زيرا دادهها در كنار هم در يك جا ذخيره شدهاند. به هرحال هم نرمال سازي و هم از حالت نرمال درآوردن پايگاه دادهها نياز به دانستن اطلاعاتي درباره دادههاي واقعي و طبيعت حرفهاي دارد كه ميخواهيم پايگاه دادهها را در آن محل اعمال نماييم.
-