بایگانی

بایگانیِ دستهٔ ‘T-SQL’

CTE بازگشتی و ساختار آن

سپتامبر 2, 2011 بیان دیدگاه

CTE چیست؟

CTE یک مجموعه نتیجه موقتی دارای نام است که از یک کوئری ساده مشتق شده و می‌تواند در محدوده اجرای یک عبارت SELECT ، INSERT ، UPDATE و یا DELETE تعریف شود.
می‌توان به CTE مانند جایگزینی برای جداول مشتق شده (subquery)، View و توابعی که توسط کاربران تعریف شده، اندیشید. از مهمترین تفاوت‌های CTE با دیگر ساختارها می‌توان به این مورد اشاره کرد که می‌توان آن را به صورت بازگشتی استفاده کرد که این مورد برای ساختارهای درختی بسیار مفید خواهد بود.
از دیگر مزایای آن کپسوله‌سازی کد است. ما می‌توانیم یک روال را در CTE نوشته و چندین بار به آن ارجاع دهیم.

ساختار CTE بازگشتی
این ساختار شبیه ساختارهای بازگشتی در زبان‌های برنامه‌نویسی دیگر است. اگرچه توابع بازگشتی در زبان‌های دیگر فقط یک مقدار عددی را باز می‌گرداند ولی یک CTE بازگشتی می‌تواند چندین سطر را بازگرداند.
هر CTE بازگشتی شامل سه عنصر است :
۱- فراخوانی روال :
اولین فراخوانی CTE بازگشتی شامل یک یا چند CTE_query_deefinition است که توسط عملگرهای UNION ALL ، UNION ، EXCEPT یا INTERSECT به هم ملحق شده‌اند.
چون این تعاریف ساختار پایه‌ای CTE را تشکیل می‌دهند، آن‌ها را  به عنوان اعضای لنگر  (anchor) می‌شناسند. CTE_query_definition ها به عنوان اعضای لنگر در نظر گرفته می‌شوند مگر اینکه به خودشان ارجاع دهند. تعیف تمام اعضای لنگر کوئری باید قبل از تعریف اولین عضو بازگشتی قرار بگیرند و یک عملگر UNION ALL باید برای الحاق آخرین عضو لنگر و اولین عضو بازگشتی قرار گیرد.

۲- فراخوانی بازگشتی روال :
فراخوانی بازگشتی شامل یک یا چند CTE_query_definition می‌باشد که با عملگرهای UNION ALL که به خود CTE ارجاع می‌دهند، به هم ملحق شده‌اند.
این بخش کوئری به عنوان اعضای بازگشتی شناخته می‌شوند.

۳- شرط خاتمه :
این عملیات ، یک عملیات ضمنی (implicit) است. زمانی که هیچ سطری از فراخوانی قبلی باز نگردد، عملیات بازگشت خاتمه می‌یابد.

نکته : استفاده ناصحیح از این روش ممکن است باعث شود که یک چرخه بی‌نهایت تشکیل شود و کوئری ما با مشکل برخورد نماید.
ساختار CTE بازگشتی باید حداقل شامل یک عنصر لنگر و یک عنصر بازگشتی باشد. شبه کد زی با فرض این حداقل‌ها، ساختار اولیه را به ما نشان می‌دهد :

WITH     cte_name    (column_name[,…n])
AS
(
CTE_query_definition
UNION   ALL
CTE_query_definition
)
SELECT  *  FROM cte_name

مراحل اجرای عملیات بازگشتی به شرح زیر است:
۱- عبارت CTE به دو بخش عضو لنگر و عضو بازگشتی تقسیم می‌گردد.
۲- اعضای لنگر اجرا شده و اولین فراخوانی یا مجموعه نتیجه پایه (T(0)) را می‌سازد.
۳- اعضای بازگشتی اجرا می‌شود که T(i) ورودی و T(i+1) خروجی است.
۴- مرحله ۳ تا زمانی که مجموعه‌ای خالی بازگردانده شود تکرار می‌گردد.
۵- مجموعه نتیجه بازگردانده می‌شود. این مجموعه اجتماعی ازT(0) تا T(n) است.

stackoverflow و سایت‌های هم‌خانواده آن

نوامبر 16, 2010 ۱ دیدگاه

یکی دو سالیست که سایتی با نام stackoverflow در عرصه‌ی سایت‌های تخصصی برای پرسش و پاسخ در رابطه با مسائل برنامه‌نویسی می‌درخشد. این سایت به قدری اعتبار پیدا کرده که سوالات ان بلافاصله در گوگل ایندکس می‌شودِ یعنی درست بلافاصله پس از پرسیدن یک سوال، می‌توان آن را در گوگل جستجو کرد و آن را دید.

این نرم‌افزار بسیار خلاقانه و با کارایی بالا نوشته شده است. برای نوشتن این برنامه از تکنولوژی ASP.Net MVC نوشته شده است. سناریوی تهیه شده برای پرسش و پاسخ در این وب سایت به قدری عالی و خلاقانه طراحی شده که تمام کاربران آن را به دادن پاسخ‌های سریع و دقیق ترغیب می‌کند. معمولا هر سوالی که در آن از بقیه کاربران بپرسید پس از چند دقیقه به پاسخ‌های خوبی دست خواهید یافت. این سایت مورد توجه متخصصان زیادی از سراسر دنیا می‌باشد.

نحوه کار در این سایت به گونه‌ای است که برای هر فعالیتی امتیازاتی از طرف کاربران و خود سایت به شما داده می‌شود. به عنوان مثال برای هر سوالی که بپرسید و سوال شما سوال خوبی باشد، کاربران می‌توانند به سوال شما رای بدهند به ازای هر رای برای سوال خوب ۵ امتیاز، برای هر پاسخ مناسب ۱۰ امتیاز و برای هر جوابی که از طرف شخص سوال‌کننده به عنوان پاسخ سوالش انتخاب شود ۱۵ امتیاز کسب می‌شود. خود سایت هم دارای مدال‌هایی با رنگ‌های طلایی، نقره‌ای و برنزی می‌باشد. این موارد به صورت خودکار محاسبه می‌شود و به شما مدال‌هایی با نام‌های مختلف داده می‌شود. به عنوان مثال اگر سوالی بپرسید که بیش از ۱۰۰۰ بار دیده شود، یک مدال برنز با عنوان popular question به شما داده می‌شود. به همین ترتیب مدال‌های دیگری با رنگ‌های دیگر به شما اعطا خواهد شد.

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

از آنجا که کارایی و ایده این سایت بسیار جالب بوده است، سایت‌های هم خانواده‌ای برای آن ساخته شده است که لزوما در زمینه برنامه‌نویسی نیستند. از جمله این ساایت‌ها می‌توان به موارد زیر اشاره کرد :

 

۱- http://serverfault.com : این سایت از اولین نمونه‌هاست، اگر مشکلاتی در رابطه با پیکربندی سرورهای مختلف دارید می‌توانید در این سایت به پاسخی دست یابید و مشکل خود را حل کنید.

۲- http://superuser.com : این سایت مربوط است به پرسش و پاسخ برای تمام مشتاقان کامپیوتر در هر ضمینه و در هم پلتفرمی.

۳- http://webapps.stackexchange.com : این سایت برای متخصصینی که در ضمینه طراحی و پیاده‌سازی نرم‌افزارهای تحت وب کار می‌کنند، پیاده سازی شده است.

۴- http://area51.stackexchange.com : این سایت برای کسانی است که علاقه دارند که سایت‌هایی از خانواده stackoverflow بسازند. در این سایت می‌توان پیشنهاداتی را برای ساخت سایت‌های هم خانواده ارائه داد.

۵- http://webmasters.stackexchange.com : این سایت به وب‌مسترها کمک می‌کند تا سوالات خود را در رابطه با نگهداری و پیشبرد وب سایت خود بپرسند.

۶- http://gamedev.stackexchange.com : اگر سوالی در رابطه با توسعه بازی‌های کامپیوتری داشتید، می‌توانید از این سایت استفاده کنید.

۷- http://askubuntu.com : در این سایت هر سوالیکه در ضمینه کار با سیستم عامل اوبونتو داشته باشید پاسخ داده می‌شود. دوستانی که از ایم سیستم عامل متن‌باز استفاده می‌کنند می‌توانند کمک زیادی از این سایت بگیرند.

۸- http://math.stackexchange.com : این سایت یکی از موارد مورد علاقه بنده است. در این سایت متخصصین زیادی گرد هم آمده‌اند و به سوالات ریاضی پاسخ می‌دهند و در ضمینه‌های گوناگون علم شیرین ریاضیات تبادل نظر می‌کنند.

۹- http://stats.stackexchange.com : این هم سایتی برای بچه‌های رشته آمار و ریاضی. در این سایت سوالات مربوط به تحلیل‌های آماری پاسخ داده می‌شوند.

۱۰- http://photo.stackexchange.com : جمعی از متخصصین عکاسی این سایت را راه‌اندازی کرده‌اند که بتوانند به آموزش این هنر بسیار زیبا بپردازند. من یکی از علاقه‌مندان پر و پا قرص عکاسی هستم.

۱۱- http://english.stackexchange.com : اگر سوالی در رابطه با زبان انگلیسی و کاربرد آن دارید این سایت به شما توصیه می‌شود. سوالات گرامری، معناشناسی، نوشتاری و … در رابطه با زبان انگلیسی را در این سایت بپرسید. از آنجا که آموزش زبان انگلیسی در کشور ما، طرفداران زیادی دارد لذا این سایت یکی از پرکاربردترین این سایت‌ها می‌تواند باشد.

۱۲- http://cooking.stackexchange.com : این هم سایتی برای آموزش آشپزی که از هم خانواده‌های سایت‌های بالا می‌باشد.

۱۳- http://gaming.stackexchange.com : اگر از علاقه‌مندان بازی‌های کامپیوتری هستید و در جایی از بازی به مشکلی برخورد کردید، این سایت را به خاطر داشته باشید.

۱۴- http://www.danatarin.com : این هم یک عضو فارسی زبان این خانواده که به پرسش و پاسخ درباره بحث‌های مختلف مربوط به حوزه IT می‌پردازد.

 

سایت‌های هم خانواده دیگری هم وجود دارند که می‌توانیم با یک گشت کوچک در اینترنت به آن‌ها دسترسی پیدا نماییم. امیدوارم که استفاده از چنین سایت‌هایی برای کاربران هدف، مفید واقع شود.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.