Как добавить проверочное ограничение, чтобы подтвердить, что студент может выбрать максимум пять курсов, используя SQL-запрос? - PullRequest
0 голосов
/ 29 ноября 2018

Можно ли добавить проверочное ограничение без использования pl sql ... Я хочу добавить его только по SQL-запросу

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Один из вариантов сделать это - использовать материализованное представление с ограничением.Если у вас есть такая таблица, в которой хранится связь между студентом и курсом:

CREATE TABLE student_course (student_id NUMBER, course_id NUMBER);

Затем определите материализованное представление следующим образом:

CREATE MATERIALIZED VIEW LOG ON student_course WITH SEQUENCE, ROWID
(student_id, course_id)
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW student_courses_count
PARALLEL
BUILD IMMEDIATE  
REFRESH FAST ON COMMIT AS  
SELECT student_id,
   COUNT(course_id) AS courses_count,
FROM student_course
GROUP BY student_id;

ALTER TABLE student_courses_count
  ADD CONSTRAINT student_courses_count_max CHECK( courses_count <= 5 );

Итак, вы сначала создаете материализованное представление, которое обновляется.на каждое изменение в основной таблице.И проверяется ограничение на материализованном представлении, являющемся производной таблицей.

Предположим, у вас есть несколько записей в student_course:

student_id | course_id
-----------+-----------
        1  |        1
        1  |        2
        1  |        3
        2  |        2
        2  |        4

Материализованное представление будет содержать результат запроса, которыйбыл использован для определения материализованного представления.Таким образом, для каждого student_id он будет содержать количество записей в student_course:

student_id | courses_count
-----------+--------------
        1  |          3
        2  |          2

. Во всех отношениях материализованное представление ведет себя как таблица, но его содержимое создается путем выполнения запроса (в нашем случаезапрос рассчитывает количество курсов для каждого студента).Учитывая, что материализованное представление очень похоже на таблицу, мы можем добавить ограничение для столбца, который содержит ряд курсов, связанных со студентом.

Если вы когда-нибудь создадите шестой курс для какого-либо учащегося, значение в столбце courses_count для этого учащегося станет равным 6, и это приведет к нарушению ограничений в базе данных.Таким образом, такая транзакция будет отменена, и вы не сможете добавить более 5 ассоциаций для данного учащегося.

0 голосов
/ 29 ноября 2018

Я думаю, что он имеет несколько подходов, один из которых имеет выбранный номер записи в столбце курса и подсчет, когда добавить курс дает 1, а другой дает 2 и так далее, и поставить ограничение проверить значение <= 5 </p>

...