Учебно-практическое пособие москва 2017 ббк



Pdf көрінісі
бет101/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   97   98   99   100   101   102   103   104   ...   243
Байланысты:
Язык SQL. Базовый курс

CREATE TABLE progress
( doc_ser numeric( 4 ),
doc_num numeric( 6 ),
subject text NOT NULL,
acad_year text NOT NULL,
term numeric( 1 ) NOT NULL CHECK ( term = 1 OR term = 2 ),
mark numeric( 1 ) NOT NULL CHECK ( mark >= 3 AND mark <= 5 )
DEFAULT 5,
FOREIGN KEY ( doc_ser, doc_num )
REFERENCES students ( doc_ser, doc_num )
ON DELETE CASCADE
103


ON UPDATE CASCADE
);
Теперь и первичный, и внешний ключи — составные. Проверьте их действие,
добавив несколько строк в каждую таблицу.
7.* Модифицируйте определение таблицы «Успеваемость» (progress), а если потре-
буется, то и определение таблицы «Студенты» (students), чтобы изучить все ва-
рианты реагирования СУБД на обновление строк в ссылочной таблице, в данном
случае — students. Последовательно изменяйте определение внешнего клю-
ча таблицы progress, испробовав варианты ON UPDATE CASCADE, ON UPDATE
RESTRICT, ON UPDATE SET NULL и ON UPDATE SET DEFAULT. Для получения ин-
формативной картины введите несколько строк в обе таблицы, а затем выпол-
няйте операцию UPDATE, подбирая значения ключевых атрибутов таким обра-
зом, чтобы вызвать ожидаемую реакцию СУБД.
Учтите, что при использовании фразы ON UPDATE SET DEFAULT необходимо,
чтобы, во-первых, с помощью ключевого слова DEFAULT было установлено зна-
чение по умолчанию для атрибута внешнего ключа в ссылающейся таблице, а
во-вторых, это DEFAULT-значение все равно должно присутствовать в одной из
строк ссылочной таблицы. Как вы считаете, с учетом сказанного, возможно ли
использование ON UPDATE SET DEFAULT в нашем случае?
Попробуйте обосновать или, наоборот, опровергнуть целесообразность исполь-
зования каждой из этих политик — CASCADE, RESTRICT, SET NULL и SET
DEFAULT — при выполнении операции UPDATE в реальной информационной
системе, предназначенной для учета успеваемости студентов.
8. В таблице «Успеваемость» (progress) есть атрибут «Учебная дисциплина»
(subject). Это текстовый атрибут. Одинаковые наименования учебных дисци-
плин записываются в таблицу progress многократно. Создайте еще одну табли-
цу — «Учебные дисциплины» (subjects), в которой будет два атрибута: «Иден-
тификатор учебной дисциплины» (subject_id) и «Учебная дисциплина» (subject).
Тип данных первого из них будет integer, а второго — text. В качестве первично-
го ключа будет служить subject_id, а второй атрибут будет уникальным. Введите
в новую таблицу две-три строки для различных учебных дисциплин.
Модифицируйте таблицу progress, заменив атрибут subject на subject_id. Тип
данных нового атрибута будет integer. Поскольку тип данных изменится, то для
замены первоначальных значений, хранящихся в этом столбце, на новые при-
дется использовать конструкцию USING (о ней говорится в тексте главы).
Добавьте в определение таблицы progress еще один внешний ключ, который бу-
дет ссылаться на таблицу subjects. В составе этого внешнего ключа будет только
один атрибут — subject_id.
Мы видим, что таблица может иметь больше одного внешнего ключа. Таким об-
разом, структура связей в реальной базе данных может оказаться весьма слож-
ной.
Теперь введите несколько строк и в таблицу progress, учитывая ее связь с новой
таблицей subjects.
104


9. В таблице «Студенты» (students) есть текстовый атрибут name, на который нало-
жено ограничение NOT NULL. Как вы думаете, что будет, если при вводе новой
строки в эту таблицу дать атрибуту name в качестве значения пустую строку?
Например:


Достарыңызбен бөлісу:
1   ...   97   98   99   100   101   102   103   104   ...   243




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

    Басты бет