5. В стандарте SQL сказано, что при наличии ограничения уникальности, вклю-
чающего один или более столбцов, все же возможны повторяющиеся значения
этих столбцов в разных строках, но лишь в том случае, если это значения —
NULL. PostgreSQL придерживается такого же подхода.
Модифицируйте определение таблицы «Студенты» (students), добавив ограни-
чение уникальности по двум столбцам: doc_ser и doc_num. А затем проверьте
вышеприведенное утверждение, добавив в таблицу не только строки, содержа-
щие конкретные значения этих двух столбцов, но также и по две строки, имею-
щие следующие свойства:
– одинаковые значения столбца doc_ser и NULL-значения столбца doc_num;
– NULL-значения столбца doc_num и столбца doc_ser.
Подобные вещи возможны, так как NULL-значения не считаются совпадающи-
ми. Это можно проверить с помощью команды
SELECT (null = null);
Она даст такой результат (т. е. NULL):
?column?
----------
(1 строка)
6. Модифицируйте определения таблиц «Студенты» (students) и «Успеваемость»
(progress). В таблице students в качестве первичного ключа назначьте комби-
нацию атрибутов doc_ser и doc_num, а в таблице progress соответствующим об-
разом измените определение внешнего ключа.
CREATE TABLE students
( record_book numeric( 5 ) NOT NULL UNIQUE,
name text NOT NULL,
doc_ser numeric( 4 ),
doc_num numeric( 6 ),
PRIMARY KEY ( doc_ser, doc_num )
);
Обратите внимание, что для атрибутов doc_ser и doc_num можно не указывать
ограничение NOT NULL: они входят в состав первичного ключа, а в нем NULL-
значения не допускаются, поэтому ограничение NOT NULL фактически подра-
зумевается при включении атрибута в состав первичного ключа.
Достарыңызбен бөлісу: