محدودیت در درج در sql
با سلام
من به عنوان پروژه باید پایگاه داده یه دبیرستانو بسازم استاد گفته که هر رشته باید دارای سقف 20 دانش آموز باشه و در هنگام درج این محدودیت در نظر گرفته بشه نمیدونم چجوری این محدودیتو ایجاد کنم
لطفا کمک کنید
ممنون
10 پاسخ
سلام itpro یی عزیز
به نظر من بهترین کار اینه که یه Trigger بنویسید که در زمان درج چک بکنه که چه تعدادی رکورد داری اگر کوچکتر مساوی 20 نبود ارور برگردونه.
امید وارم توضیحات کافی باشه اگر کافی نبود بفرمایید بیشتر توضیح بدم.
itpro باشید
خیر , شما میتونید در شرطتون لحاظ کنید که در هر رشته ۲۰ نفر باشه. این دیگه یه الگوریتمهه که شما به چندین شکل میتونید بنویسیدش.
پس اگه میشه لطف کنین کدشو واسم بنویسین یا ساختارشو بگین خودم بنویسم
ممنون از کمکتون
ببخشید که زیاد سوال میکنم چون چیزی از sql نمیدونم و استاد اصلا این کد یعنی trigger رو توضیح نداده واسمون حالا نمیدونم چجوری بنویسم محدودیت تعداد رو (20 دانش آموز در هر رشته البته 3 رشته اصلی بیشتر نیست)
منظورم اینه که کجای کد بالا و چجوری این محدودیت رو بنویسم؟
ببینید همونجور که گفتم Trigger به جای عملیات insert و delete و update یا این که بعد از این ها انجام میشه.
کد زیر ساختار اولیه ی یک Trigger رو نشون میده :
CREATE TRIGGER [NAME] ON [TABLENAME] [AFTER | INSTEAD OF][INSERT|UPDATE|DELETE] AS BEGIN --CODE END
به جای NAME نام Trigger
به جایTABLENAME نام جدول
به جای AFTER|INSTEAD OF یکی ش رو بنویسید اگر می خواین بعد از عملیات باشه باید AFTER رو بنویسید و اگر می خواید به حای عملیات انجام بشه INSTEAD OF رو بنویسید
و در قسمتی که INSERT,DELETE,UPDATE مشخص می کنید که Trigger قبل از کدوم عملیات اجرا بشه(فقط یکی رو بنویسید.)
مثال:
CREATE TRIGGER filterStudents ON Students After insert AS BEGIN --CODE END
بله. Trigger کارش اینه که قبل یا به جای عملیات insert , update , delete انجام میشه و میتونه حاوی دستوراتی باشه که شما بهش میدید تا اجرا بشه.
سلام عزیز
ببین شما در حال حاضر ۳تا جدول میخواید.
جدول دانش آموز
دوم جدول رشته های تحصیلی به انضمام یک ستون برای تعداد نفرات مجاز برای هر رشته
سوم جدول واسطی بین رشته و دانش آموز
حالا کد جداولت ب این صورت میشه:
Create table daneshamooz ( IDDaneshamooz smallint, Name nvarchar (50), Family nvarchar(50) ) Create table Reshte ( IDReshte tinyint, Name nvarchar100), Tedad tinyint ) Create table SabtReshte ( IDDaneshamooz smallint, IDReshte )
قدم بعدی میشه نوشتن یک پروسیجر برای درج کردن با این پیش فرض که بشه هر رشته رو براش یک سقفی در نظر گرفت،
مثلا رشته ریاضی ۵ نفر و رشته علوم تجربی ۷ نفر
فقط باید عدد مورد نظرت رو داخل جدول رشته وارد کنی.
Create procedure SabteReshteInsert IDReshte smallint, IDDaneshamooz smallint AS Declare @Tedad tinyint,TedadSabt tinyint SELECT @tedad=(SELECT tedad FROM Reshte WHERE IDReshte=@idreshtet) SELECT @TedadSabt=(SELECT COUNT(IDReshte) FROM SabtReshte WHERE IDReshte=@iDreshte) IF (@TedadSabt<tedad) . Begin . INSERT INTO SabtReshte VALUES (IDReshte,IDDaneshamoz) END
تو این قسمت ما دو تا متغییر میخوابم!
یکی برای نگهداری تعداد مجاز هر نفر در هر رشته و دومی برای نگهداری تعداد نفرات ثبت شده در جدول واسط
بعد با یک شرط میایم براش مشخص می کنیم تا زمانی که تعداد نفرات ثبت شده از تعداد نفرات مجاز کمتر بود درج انجام بده،
شاید بگی که باید این شرط برابر باشه ولی باید بگم چون دستور IF بالای دستور INSERT قرار داره و اون SELECT دومی بعد از هربار درج محاسبه میشه،باید همیشه یک گام عقب تر باشه تا نتیجه درست شه.
خواهش میکنم کمک کنین کارم گیره بخدا
پس با همون trigger که گفتین میشه این کارو انجام داد درسته؟
بزارید کاملتر توضیح بدم ببینین من یه جدول دانش آموز دارم که داخلش فیلد رشته دارم حالا استاد گفته هر دانش آموز رشتش ریاضی یا تجربی یا انسانی باشه و هر رشته هم 20 تا دانش آموز میتونه داشته باشه و بیشتر ارور بده اگه اینجوری که شما میگین باشه باید واسه هر رشته یه جدول رشته بسازم و با کلید خارجی دانش آموزان رو وارد جدول هر رشته کنم و وقتی از 20 بیشتر شد ارور بده درسته؟