Учебное пособие Санкт-Петербург «бхв-петербург»



Pdf көрінісі
бет106/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   102   103   104   105   106   107   108   109   ...   256
sql osnovi yazika

DROP TABLE students;
CREATE TABLE students ...
2. Посмотрите, какие ограничения уже наложены на атрибуты таблицы «Успевае-
мость» (progress). Воспользуйтесь командой \d утилиты psql. А теперь пред-
ложите для этой таблицы ограничение уровня таблицы.
В качестве примера рассмотрим такой вариант. Добавьте в таблицу progress
еще один атрибут — «Форма проверки знаний» (test_form), который может
принимать только два значения: «экзамен» или «зачет». Тогда набор допусти-
мых значений атрибута «Оценка» (mark) будет зависеть от того, экзамен или за-
чет предусмотрены по данной дисциплине. Если предусмотрен экзамен, тогда
допускаются значения 3, 4, 5, если зачет — тогда 0 (не зачтено) или 1 (зачтено).
134


Контрольные вопросы и задания
Не забудьте, что значения NULL для атрибутов test_form и mark не допуска-
ются.
Новое ограничение может быть таким:
ALTER TABLE progress
ADD CHECK (
( test_form = 'экзамен' AND mark IN ( 3, 4, 5 ) )
OR
( test_form = 'зачет' AND mark IN ( 0, 1 ) )
);
Проверьте, как будет работать новое ограничение в модифицированной таб-
лице progress. Для этого выполните команды INSERT, как удовлетворяющие
ограничению, так и нарушающие его.
В таблице уже было ограничение на допустимые значения атрибута mark. Как
вы думаете, не будет ли оно конфликтовать с новым ограничением? Проверьте
эту гипотезу. Если ограничения конфликтуют, тогда удалите старое ограниче-
ние и снова попробуйте добавить строки в таблицу.
Подумайте, какое еще ограничение уровня таблицы можно предложить для
этой таблицы?
3.* В определении таблицы «Успеваемость» (progress) на атрибуты term и mark
наложены как ограничения CHECK, так и ограничение NOT NULL. Возникает во-
прос: не является ли ограничение NOT NULL избыточным? Ведь в ограничении
CHECK явно указаны допустимые значения.
Проверьте гипотезу об избыточности ограничения NOT NULL в данном случае.
Для этого модифицируйте таблицу, убрав ограничение NOT NULL, и попробуйте
добавить в нее строку с отсутствующим значением атрибута term (или mark).
4. В определении таблицы «Успеваемость» (progress) для атрибута mark не толь-
ко задано ограничение CHECK, но и установлено значение по умолчанию с по-
мощью ключевого слова DEFAULT:


Достарыңызбен бөлісу:
1   ...   102   103   104   105   106   107   108   109   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет