یه بار برای همیشه، فرانت‌ اند رو اصولی یاد بگیر! یه بار برای همیشه، فرانت‌ اند رو اصولی یاد بگیر!
🎯 ثبت نام
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
SQL Server رو حرفه‌ای یاد بگیر

تو این دوره SQL Server رو از صفر تا پیشرفته یاد می‌گیری! از تراکنش‌ها و طراحی دیتابیس تا Query نویسی حرفه‌ای و پروژه‌های واقعی مثل مدیریت فروش و سیستم مالی. همه چی رو با مثال و تمرین یاد می‌گیری و یه متخصص دیتابیس می‌شی!

مشاهده بیشتر

استفاده از گزینه ی DELETE CASCADE برای رسیدگی به Child key Removal در ارتباطات کلید خارجی

استفاده از گزینه ی DELETE CASCADE برای رسیدگی به Child key Removal در ارتباطات کلید خارجی

استفاده از گزینه ی DELETE CASCADE در تعاریف محدودیت کلید خارجی به معنای اجرای بهتر و کد کمتر در هنگام حذف رکدوردها از جدول هایی است که دارای یک رابطه ی parent-child تعریف شده می باشند.

توضیحات

ابتدا اجازه بدهید که تایید کنیم که نمودار جاری ما دارای گزینه ی تعریف شده ی DELETE CASCADE روی کلید خارجی، بین جدول Parent و Child می باشد. در اینجا وضعیت SQL به همراه نتیجه را مشاهده می کنید.

name
delete_referential_action_desc
FK_Child_Parent
CASCADE

اکنون که تایید کرده ایم که این گزینه ی تعریف شده را داریم، اجازه بدهید با استفاده از عبارت SQL زیر یک رکورد را از جدول Parent حذف کنیم.

1
2
DELETE FROM [dbo].[Parent] where ParentID=82433‎
<button></button>

با نگاه به explain plan برای این query، متذکر می شویم که SQL Optimizer ابتدا رکوردهای child را حذف کرده و سپس delete را روی جدول Parent اجرا می کند. به این خاطر لازم است به هر جدول تنها یک بار دسترسی داشته باشد.

آموزش SQL Server

اکنون اجازه بدهید گزینه ی DELETE CASCADE را از تعریف کلید خارجی (foreign key) حذف کرده و تفاوت ها را مشاهده کنیم. برای این کار به حذف و ایجاد مجدد کلید خارجی بدون گزینه ی DELETE CASCADE نیاز داریم. در اینجا عبارت های SQL برای انجام این تغییرات را مشاهده می کنید:

1
2
3
4
5
6
ALTER TABLE [dbo].[Child] DROP CONSTRAINT [FK_Child_Parent]‎
  
ALTER TABLE [dbo].[Child]  WITH CHECK ‎
ADD CONSTRAINT [FK_Child_Parent] FOREIGN KEY([ParentID])‎
REFERENCES [dbo].[Parent] ([ParentID])
<button></button>

زمانی که کلید خارجی دوباره ایجاد شده می توانیم یک عملکرد حذف دیگر نیز اجرا کنیم تا اگر تفاوتی در اجرا وجود دارد، مشاهده کنیم. یک موضوع قابل ذکر این است که بدون گزینه ی DELETE CASCADE نیاز به اجرای یک عبارت delete دیگر داریم تا رکوردها را از اولین جدول Child حذف کنیم. در اینجا عبارت های SQL را برای اجرای delete مشاهده می کنید:

1
2
3
DELETE FROM [dbo].[Child] where ParentID=62433‎
DELETE FROM [dbo].[Parent] where ParentID=62433‎
<button></button>

با نگاه کردن به explain plan برای این عبارت ها، مشاهده می کنیم که آنها کاملا شبیه هستند، تنها تفاوت این است که چون ما در حال اجرای عبارت های مجزای delete هستیم، لازم است جدول Child برای بار دوم محدودیت کلید خارجی را برای بار دوم، هنگام حذف از جدول Parent، چک کند.

آموزش SQL Server

با استفاده از نتایج SQL Profiler از هر query، می توانیم این اسکن اضافه از جدول Child را تایید کنیم، که در واقع به این معناست که گزینه ی DELETE CASCADE بهتر اجرا می کند. در زیر مشاهده می کنیم که گزینه ی DELETE CASCADE در هر رده از منابع کمتری استفاده می کند و حدود 20 درصد سریعتر اجرا می کند.

CPU
Reads
Writes
Duration
No Delete Cascade
344
28488
0
399
Delete Cascade
250
14249
0
312
1394/07/27 10068 1595
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...