بهار آموزش با تخفیف های شگفت انگیز توسینسو بهار آموزش با تخفیف های شگفت انگیز توسینسو
مانده تا پایان تخفیف
مشاهده دوره ها
0

محدودیت در درج در sql

با سلام

من به عنوان پروژه باید پایگاه داده یه دبیرستانو بسازم استاد گفته که هر رشته باید دارای سقف 20 دانش آموز باشه و در هنگام درج این محدودیت در نظر گرفته بشه نمیدونم چجوری این محدودیتو ایجاد کنم

لطفا کمک کنید

ممنون

پرسیده شده در 1395/03/03 توسط

10 پاسخ

0

سلام itpro یی عزیز

به نظر من بهترین کار اینه که یه Trigger بنویسید که در زمان درج چک بکنه که چه تعدادی رکورد داری اگر کوچکتر مساوی 20 نبود ارور برگردونه.

امید وارم توضیحات کافی باشه اگر کافی نبود بفرمایید بیشتر توضیح بدم.

itpro باشید

پاسخ در 1395/03/03 توسط
0

خیر , شما میتونید در شرطتون لحاظ کنید که در هر رشته ۲۰ نفر باشه. این دیگه یه الگوریتمهه که شما به چندین شکل میتونید بنویسیدش.

پاسخ در 1395/03/03 توسط
0

پس اگه میشه لطف کنین کدشو واسم بنویسین یا ساختارشو بگین خودم بنویسم

ممنون از کمکتون

پاسخ در 1395/03/03 توسط
0

ببخشید که زیاد سوال میکنم چون چیزی از sql نمیدونم و استاد اصلا این کد یعنی trigger رو توضیح نداده واسمون حالا نمیدونم چجوری بنویسم محدودیت تعداد رو (20 دانش آموز در هر رشته البته 3 رشته اصلی بیشتر نیست)

منظورم اینه که کجای کد بالا و چجوری این محدودیت رو بنویسم؟

پاسخ در 1395/03/03 توسط
0

ببینید همونجور که گفتم 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
پاسخ در 1395/03/03 توسط
1

بله. Trigger کارش اینه که قبل یا به جای عملیات insert , update , delete انجام میشه و میتونه حاوی دستوراتی باشه که شما بهش میدید تا اجرا بشه.

پاسخ در 1395/03/03 توسط
1

سلام عزیز

ببین شما در حال حاضر ۳تا جدول میخواید.

جدول دانش آموز

دوم جدول رشته های تحصیلی به انضمام یک ستون برای تعداد نفرات مجاز برای هر رشته

سوم جدول واسطی بین رشته و دانش آموز

حالا کد جداولت ب این صورت میشه:

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 دومی بعد از هربار درج محاسبه میشه،باید همیشه یک گام عقب تر باشه تا نتیجه درست شه.

پاسخ در 1395/03/09 توسط
0

پس با همون trigger که گفتین میشه این کارو انجام داد درسته؟

پاسخ در 1395/03/03 توسط
0

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

پاسخ در 1395/03/03 توسط

پاسخ شما