PDA

View Full Version : سوال: نحوی حذف تمام ارتباطات جدول



korosh00
پنج شنبه 10 مرداد 1392, 13:52 عصر
سلام
من یک جدول دارم که دانش آموزان را ثبت می کنم
یک جدول دارم که هر دانش آموز معدل ترم ها را وارد می کنم .
ای دی دانش آموز را در جدول معدل گذاشتم
همه چیز خوب پیش میره الا اینجا که من می خوام یک دانش آموز را حذف کنم . می خوام وقتی دانش آموز حذف میشه معدل هاش هم حذف بشه . من از یک تکنیک استفاده کردم که جدول معدل ها را می آوردم بر اساس آی دانش آموز و معدلش اون را پاک می کردم ولی مشکل اینجاست که دانش اموز حذف می شد و معدل فقط یک ترمش حذف میشد چون آی دانش آموزد و یک معدل در کنار هم هست .
من می خوام وقتی دانش آموز حذف بشه تمام معدل ترم هاش هم حذف بشه
مممنون

plus
پنج شنبه 10 مرداد 1392, 14:39 عصر
شما اگه از MS SQL استفاده میکنید، وقتی یک Relation میسازید، اگه این رو با Management Studio میکنید، در همون صفحه مربوط به Relation، زیر INSERT And UPDATE Specification میتونید Delete Rule رو برابر Cascade بگذارید.اینطوری هر زمان که رکوردی از جدول اصلی (دانش آموز) پاک میشه، رکوردهای جداول دیگه که به این جدول لینک دارن هم پاک میشه.
اگر هم از طریق دستورات SQL جدول رو میسازید:

ALTER TABLE Averages WITH CHECK ADD CONSTRAINT FK_Averages_Student FOREIGN KEY([IdStudent])
REFERENCES [dbo].[Student] ([Id])
ON DELETE CASCADE

hojjatshariffam
پنج شنبه 10 مرداد 1392, 14:58 عصر
شما اگه از MS SQL استفاده میکنید، وقتی یک Relation میسازید، اگه این رو با Management Studio میکنید، در همون صفحه مربوط به Relation، زیر INSERT And UPDATE Specification میتونید Delete Rule رو برابر Cascade بگذارید.اینطوری هر زمان که رکوردی از جدول اصلی (دانش آموز) پاک میشه، رکوردهای جداول دیگه که به این جدول لینک دارن هم پاک میشه.
اگر هم از طریق دستورات SQL جدول رو میسازید:

ALTER TABLE Averages WITH CHECK ADD CONSTRAINT FK_Averages_Student FOREIGN KEY([IdStudent])
REFERENCES [dbo].[Student] ([Id])
ON DELETE CASCADE

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

korosh00
پنج شنبه 10 مرداد 1392, 15:18 عصر
تشکر
این قسمت ها چی هستند
من iddanesh دارم که آی دی دانش آموزه و نام جدولم هم danesh است
کد را تغییر می دید با نام جدول بالا و آی دی
من تو سی شارپ دارم کار می کنم بانک هم اکسس است .

108298

korosh00
پنج شنبه 10 مرداد 1392, 15:25 عصر
این کسکید ، خیلی خطر ناکه ، بخصوص تو سیستم های بزرگ ، اگه حواس برنامه نویس تو کد جمع نباشه کلی اطلاعاتو پاک می کنه.
به جای این میتونید با یک یا چند دستور دلیت حساب شده ، می تونید اطلاعات مورد نظرتونو حذف کنید ،
ار کس کید در جاهایی استفاده کنید که کاملا اطمینان دارید که کاربر اشتباه نخواهد کرد.

نظرتون چیه ؟ واضح تر با مثال ؟

roolinjax
پنج شنبه 10 مرداد 1392, 17:33 عصر
سلام منم با آقا حجت موافقم
اگر عملیات حذف تمام از طریق کد انجام بشه بهتره
واضح تر اینه که همون روشی که خودتون گفتید رو انجام بدین
ابتدا حذف از جدول معدل ها و سپس حذف دانش آموز
برای حذف کامل معدل های یه دانش آموز خوب مگه آی دی توی جدول معدل بصورت کلید خارجی نیست ؟
اگه هست با یه دستور حذف ساده کل معدل ها حذف میشه دیگه :
"delete from tbl_moadel where id = 1"
مثال بالا رو خودتون توی کد درست کنید

korosh00
پنج شنبه 10 مرداد 1392, 19:27 عصر
ببنید شما معدل ترم اول دانش آموز را وارد می کنید و ثبت میشه این خودش تو قسمت معدل ها ی آی دی داره بعد ترم دوم یک آی دی دیگه و همینطور ترم سوم پس هر معدل یک آی دی داره من اگر بخوام حذف کنم باید یک بار آی دی ترم اول را بزنم و بعد حذف و ی ترم دوم و بعد حذف و بعد ترم سوم و حذف دانش آموز هم یک آی دی بیشتر نداره و حذف میشه . تونستم مشکل را برسونم ؟

korosh00
پنج شنبه 10 مرداد 1392, 20:10 عصر
من از راه On Delete Cascade رفتم حل شد

roolinjax
جمعه 11 مرداد 1392, 18:08 عصر
ببنید شما معدل ترم اول دانش آموز را وارد می کنید و ثبت میشه این خودش تو قسمت معدل ها ی آی دی داره بعد ترم دوم یک آی دی دیگه و همینطور ترم سوم پس هر معدل یک آی دی داره من اگر بخوام حذف کنم باید یک بار آی دی ترم اول را بزنم و بعد حذف و ی ترم دوم و بعد حذف و بعد ترم سوم و حذف دانش آموز هم یک آی دی بیشتر نداره و حذف میشه . تونستم مشکل را برسونم ؟

خوب این جدولی که میگی بالاخره یه فیلد کلید خارجی از جدول دانش آموزان داره دیگه که مقدار تکراری داره
اگر غیر از این باشه طراحی جدولتون مشکل داره و باز هم به دردسر برمی خورین