Добавить логическое ограничение при разработке таблиц - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть таблица, как показано ниже:

Студент:

StudentId   FirstName    LastName     Grade

Курс:

CourseId    Name     Desc

Предложение

OfferNum     CourseId      ProfessorId     

Student_Course_Mapping

OfferNum     StudentId

У меня есть ограничение, согласно которому студент может записаться только в 2 предложения на 1 семестр и год.

Например: допустим, что студент Джон зарегистрировался в Java и Python для Зимнего семестра (январь - апрель) 2020 года, чем он не может записаться на другие курсы.

У меня нет внешнего интерфейса или чего-либо еще, чтобы ограничить это. Мне только сказали работать с базой данных и применять это ограничение.

Сейчас мы вводим данные в эту таблицу вручную, используя SSMS design view.

Так что можно ограничить кого-то, входящего такие данные?

1 Ответ

0 голосов
/ 23 февраля 2020

Этот тип нумерации c ограничение между двумя таблицами не является тривиальным для реализации.

Вот четыре подхода.

(1) Создайте таблицу с одной строкой на каждого учащегося, семестр и год. Есть две колонки, по одной для каждого курса. При таком подходе не может быть более двух.

(2) Создайте пользовательскую функцию, которая вычисляет количество курсов для учащегося за данный семестр и год. Затем создайте проверочное ограничение с помощью этой функции.

(3) Создайте по одному на каждого учащегося, семестр и год и количество курсов на семестр. Сохраните этот счет с помощью триггера и установите проверочное ограничение на значение.

(4) Сохраните все логи c в «приложении». Это повлечет за собой выполнение всех вставок с помощью хранимой процедуры и ее проверку бизнес-логикой c.

В вашем случае я бы, вероятно, выбрал (2) в качестве последнего навязчивого решения. Если у вас уже есть таблица с одной строкой на одного учащегося / семестр / год, я бы предложил (3). Он включает триггер (argggh!), Но также содержит полезную информацию для других целей.

...