PDA

View Full Version : مشکل در حذف رکوردی که با یک فیلد دیگر Relation دارد



A.S.Roma
سه شنبه 01 دی 1388, 22:46 عصر
با سلام.

برای چنین ساختاری نمی توانم دستور DELETE بنویسم .
http://images.asrejavan.net/files/4dk92dbx0vil2zkrflqj.jpg



The DELETE statement conflicted with the SAME TABLE REFERENCE constraint "FK_Menu_Menu". The conflict occurred in database "mySite", table "dbo.Menu", column 'ParentId'.


یعنی Record هایی که Child دارن Delete نمی شوند .
فکر می کنم یک راهش این باشه که اول یک SELECT بزنیم و تمامی Record هایی که ParentId شون همونیه که می خواهیم DEl کنیم رو پیدا کنیم و اول اونا رو پاک کنیم بعد بریم سراغ Record ریشه .

اما به نظر بهینه نمیاد.

به نظرتون راه حلش چیه !؟
ضمنا" کلا" چه راهکاری رو برای پیاده سازی منوهایی که ساختار درختی دارند پیشنهاد می کنید؟!

Chabok
چهارشنبه 02 دی 1388, 02:09 صبح
با سلام


یعنی Record هایی که Child دارن Delete نمی شوند .
خب نباید هم پاک بشوند . اتفاقاً خوب است که نتوان آن ها را پاک کرد.


اما به نظر بهینه نمیاد.
این مورد بهینه است یا اینکه رکوردهای بی پدری در جدول وجود داشته باشند که به هیچ دردی نمیخورن ؟

به هر حال شما می توانید این Relation را حذف کنید که در صورت حذف به مشکل برنخورید .

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

و یا برای راحت تر کردن کاربر می توانید هنگام حذف یک والد دیگر از او بخواهید تا در صورت نیاز این فرزندها را حذف نکنید و به یک والد دیگر انتقال دهید .

بستگی به سیستم شما دارد که بخواهید چگونه با کاربر تعامل کنید و اینکه رکوردهایی که دارای والد نیستند نگهداری بشوند یا خیر .

Mostafa_Dindar
چهارشنبه 02 دی 1388, 02:47 صبح
هميشه برام سوال بوده كه پراپرتي هاي Relation رو چطور استفاده كنم . مثلا :DeleteRule چهار مقدار NoAction , Cascade , SetNull , SetDefault داره .
يا پراپرتي Enforce Forign Key Constraint دو مقدار Yes , No ميگيره . اين پراپرتي ها اينجا به كارمون نمياد ؟
اگه اينجا كاربرد نداره پس كاربردشون كجاست ؟

A.S.Roma
چهارشنبه 02 دی 1388, 08:45 صبح
هميشه برام سوال بوده كه پراپرتي هاي Relation رو چطور استفاده كنم . مثلا :DeleteRule چهار مقدار NoAction , Cascade , SetNull , SetDefault داره .
يا پراپرتي Enforce Forign Key Constraint دو مقدار Yes , No ميگيره . اين پراپرتي ها اينجا به كارمون نمياد ؟
اگه اينجا كاربرد نداره پس كاربردشون كجاست ؟
متاسفانه زمانی که PK و FK یک Relation از یک جدول باشد نمی توان از این گزینه استفاده کرد. ( یا حداقل من نتونستم ) و الا با Cascade گذاشتن Property مشکل من حل میشد.

A.S.Roma
چهارشنبه 02 دی 1388, 08:48 صبح
اتفاقاً خوب است که نتوان آن ها را پاک کرد.
منظور من چیزی شبیه Cascade در Relation میان دو جدول بود که ظاهرا" باید دستی اینکار را انجام دهم.
ممنون از پاسختون.:لبخندساده: