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



Pdf көрінісі
бет75/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   71   72   73   74   75   76   77   78   ...   256
sql osnovi yazika

CREATE TABLE students
( record_book numeric( 5 ) PRIMARY KEY,
...
);
А можно сделать это и в виде отдельного ограничения:
CREATE TABLE students
( record_book numeric( 5 ),
...
PRIMARY KEY ( record_book )
);
В случае создания составного первичного ключа имена столбцов, входящих в его со-
став, перечисляются в выражении PRIMARY KEY через запятую:
PRIMARY KEY ( имя-столбца1, имя-столбца2, ...)
При добавлении первичного ключа автоматически создается индекс на основе B-
дерева для поддержки этого ограничения.
В таблице может быть любое число ограничений UNIQUE, дополненных ограниче-
нием NOT NULL, но первичный ключ может быть только один. PostgreSQL допускает
и отсутствие первичного ключа, хотя строгая теория реляционных баз данных не ре-
комендует так поступать.
99


Глава 5. Основы языка определения данных
Завершаем наш обзор различных видов ограничений рассмотрением такого важно-
го понятия, как внешний ключ (foreign key). Внешние ключи являются средством
поддержания так называемой ссылочной целостности (referential integrity) между
связанными таблицами. Напомним, что это означает, на примере таблиц «Студен-
ты» (students) и «Успеваемость» (progress). В первой из них содержатся данные
о студентах, а во второй — сведения об их успеваемости. Поскольку в процессе обу-
чения студенты сдают целый ряд зачетов и экзаменов, то в таблице «Успеваемость»
для каждого студента может присутствовать несколько строк. Для большинства из
них это так и будет, хотя, в принципе, возможна ситуация, когда для какого-то сту-
дента в таблице «Успеваемость» не окажется ни одной строки (если, он, например,
находится в академическом отпуске).
Конечно, должна быть возможность определить, какому студенту принадлежат те
или иные оценки, т. е. какие строки в таблице «Успеваемость» с какими строками
в таблице «Студенты» связаны. Для решения этой задачи не требуется в каждой стро-
ке таблицы «Успеваемость» повторять все сведения о студенте: номер зачетной книж-
ки, фамилию, имя и отчество, данные документа, удостоверяющего личность. Доста-
точно включить в состав каждой строки таблицы «Успеваемость» лишь уникальный
идентификатор строки из таблицы «Студенты». В нашем случае это будет номер за-
четной книжки — record_book. Данный атрибут и будет являться внешним ключом
таблицы «Успеваемость». Таким образом, получив строку из таблицы «Студенты»,
можно будет найти все соответствующие ей строки в таблице «Успеваемость», сопо-
ставив значения атрибутов record_book в строках обеих таблиц. В результате мы
сможем получить все строки таблицы «Успеваемость», связанные с конкретной стро-
кой из таблицы «Студенты» по внешнему ключу.
Таблица «Успеваемость» будет ссылающейся (referencing), а таблица «Студенты» —
ссылочной
(referenced). Обратите внимание, что внешний ключ ссылающейся таб-
лицы ссылается на первичный ключ ссылочной таблицы. Допускается ссылка и на
уникальный ключ, не являющийся первичным. В данном контексте для описания от-
ношений между таблицами можно сказать, что таблица students является главной,
а таблица progress — подчиненной.
Создать внешний ключ можно в формате ограничения уровня атрибута следующим
образом:


Достарыңызбен бөлісу:
1   ...   71   72   73   74   75   76   77   78   ...   256




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

    Басты бет