Этот тип нумерации c ограничение между двумя таблицами не является тривиальным для реализации.
Вот четыре подхода.
(1) Создайте таблицу с одной строкой на каждого учащегося, семестр и год. Есть две колонки, по одной для каждого курса. При таком подходе не может быть более двух.
(2) Создайте пользовательскую функцию, которая вычисляет количество курсов для учащегося за данный семестр и год. Затем создайте проверочное ограничение с помощью этой функции.
(3) Создайте по одному на каждого учащегося, семестр и год и количество курсов на семестр. Сохраните этот счет с помощью триггера и установите проверочное ограничение на значение.
(4) Сохраните все логи c в «приложении». Это повлечет за собой выполнение всех вставок с помощью хранимой процедуры и ее проверку бизнес-логикой c.
В вашем случае я бы, вероятно, выбрал (2) в качестве последнего навязчивого решения. Если у вас уже есть таблица с одной строкой на одного учащегося / семестр / год, я бы предложил (3). Он включает триггер (argggh!), Но также содержит полезную информацию для других целей.