Главная страница
Навигация по странице:

  • МЕТОДИЧЕСКИЕ УКАЗАНИЯ по выполнению лабораторных работ по дисциплине (модулю) « Базы данных »

  • 09.03.01 Информатика и вычислительная техника с направленностью (профилем)Электронно-вычислительные машины, комплексы, системы и сети

  • Разработчик(и) методических указаний

  • Лабораторная работа №1 Установка и настройка СУБД 1. Цель и задачи работы

  • 2. Порядок выполнения работы

  • 4. Теоретические сведения Запуск базы данных

  • Графический клиент pgAdmin

  • Лабораторная работа №2 Создание таблиц Цели и задачи работы

  • Порядок выполнения работы

  • Лабораторные_БД_ЭВМ_20 (AutoRecovered). Методические указания по выполнению лабораторных работ по дисциплине (модулю)


    Скачать 0.75 Mb.
    НазваниеМетодические указания по выполнению лабораторных работ по дисциплине (модулю)
    Дата05.05.2022
    Размер0.75 Mb.
    Формат файлаdocx
    Имя файлаЛабораторные_БД_ЭВМ_20 (AutoRecovered).docx
    ТипМетодические указания
    #512616
    страница1 из 12
      1   2   3   4   5   6   7   8   9   ...   12

    МИНОБРНАУКИ РОССИИ
    Федеральное государственное бюджетное

    образовательное учреждение высшего образования

    «Тульский государственный университет»
    Институт прикладной математики и компьютерных наук

    Кафедра «Вычислительная техника»


    Утверждено на заседании кафедры

    «Вычислительная техника»

    «29» мая 2020г., протокол № 11


    Заведующий кафедрой

    _________________________А.Н. Ивутин


    МЕТОДИЧЕСКИЕ УКАЗАНИЯ

    по выполнению лабораторных работ

    по дисциплине (модулю)

    «Базы данных»
    основной профессиональной образовательной программы

    высшего образования – программы бакалавриата

    по направлению подготовки

    09.03.01 Информатика и вычислительная техника
    с направленностью (профилем)

    Электронно-вычислительные машины, комплексы, системы и сети

    Формы обучения: очная
    Идентификационный номер образовательной программы: 090301-02-20


    Тула 2020 год

    Разработчик(и) методических указаний
    ____Набродова И.Н., доцент, к.т.н.___________ _______________

    (ФИО, должность, ученая степень, ученое звание) (подпись)


    Оглавление


    Лабораторная работа №1 4

    Лабораторная работа №2 12

    Лабораторная работа №3 20

    Лабораторная работа №4 24

    Лабораторная работа №5 28

    Лабораторная работа №6 33

    Лабораторная работа №7 37

    Лабораторная работа №8 44

    Лабораторная работа №9 52

    Лабораторная работа №10 63

    Лабораторная работа №11 69

    Лабораторная работа №12 80

    Лабораторная работа №13 91

    Лабораторная работа №14 101

    Лабораторная работа №15 106

    Лабораторная работа №16 111

    Лабораторная работа №17 117

    Лабораторная работа №18 121

    Лабораторная работа №19 125


    Лабораторная работа №1

    Установка и настройка СУБД
    1. Цель и задачи работы

    Целью данной лабораторной работы является получение навыком и настройки СУБД.
    2. Порядок выполнения работы

    - ознакомится с теоретическими сведениями;

    - выполнить задание;

    - оформить отчет;

    - ответить на контрольные вопросы, заданные преподавателем.
    3. Оформление отчета

    Отчет должен содержать: титульный лист, цель работы, описание пунктов выполнения лабораторной работы в соответствии с заданием, ответы на контрольные вопросы и выводы по работе.
    4. Теоретические сведения

    Запуск базы данных

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

    Вы можете запустить базу данных непосредственно с рабочего стола или при помощи командной строки SQL.

    Графический клиент pgAdmin

    Для упрощения администрирования на сервере postgresql в базовый комплект установки входит такой инструмент как pgAdmin. Он представляет графический клиент для работы с сервером, через который мы в удобном виде можем создавать, удалять, изменять базы данных и управлять ими. Так, на Windows после установки мы можем найти значок pgAdmin в меню Пуск и запустить его:



    Рисунок 1 – pgAdmin в Windows

    После этого нам откроется следующая программа:



    Рисунок 2 – pgAdmin и PostgreSQL
    Теперь подключимся к серверу PostgreSQL. Для этого в левой части окна программы раскроем пункт Servers, который содержит набор серверов PostgreSQL. При установке последней версии устанавливается сервер, который по умолчанию имеет название PostgreSQL 10. Нажмем на этот пункт, и нам отобразится окно для ввода пароля:



    Рисунок 3 – Логин в pgAdmin
    Здесь необходимо ввести пароль для суперпользователя postgres, который был задан при установке PostgreSQL.

    После успешного логина нам откроется содержимое сервера:



    Рисунок 4 – Содержимое сервера
    В частности, в узле Databases мы можем увидеть все имеющиеся базы данных. По умолчанию здесь есть только одна база данных - postgres.

    Также в правой части мы можем увидеть узел Login/Group Roles, который предназначен для управления пользователями и их ролями.

    И третий узел - Tablespaces позволяет управлять местом хранения файлов баз данных.

    Теперь создадим свою базу данных. Для этого нажмем правой кнопкой мыши на узел Databases. И далее в контекстном меню выберем Create->Database...



    Рисунок 5 – Создание базы данных в pgAdmin

    После этого нам отобразится окно для создания базы данных. Введем название для БД, например, test1 и нажмем на кнопку "Save":



    Рисунок 6 – Создание базы данных в PostgreSQL через pgAdmin
    После этого в древовидном меню слева отобразится содержимое созданной базы данных test1:



    Рисунок 7 – Администрирование в PostgreSQL через pgAdmin
    Консольный клиент psql

    Консольный клиент psql представляет еще один способ взаимодействия с сервером PostgreSQL. Данная программа также, как и pgAdmin, позволяет выполнять команды языка SQL.



    Рисунок 8 – Консольный клиент psql для работы с PostgreSQL
    Запустим psql. Программа предложит ввести название сервера, базы данных, порта и пользователя. Эти пункты можно прощелкать, так как для них будут использоваться значения по умолчанию (для сервера - localhost, для базы данных - postgres, для порта - 5432, в качестве пользователя - суперпользователь postres). Далее надо будет ввести пароль для пользователя (по умолчанию пользователя postgres):



    Рисунок 9 – Консольный клиент psql

    И после удачного подключения можно будет отправлять серверу команды через psql.

    Теперь создадим базу данных с помощью следующей команды языка SQL:



    Для создания базы данных применяется команда create database, после которой указывается название бд. То есть в данном случае название бд - "test2". Причем команда завершается точкой с запятой.

    Далее подключимся к этой базе данных для осуществления с ней взаимодействия. Для этого применяется команда \c (сокращение от connect), после которой указывается имя базы данных:



    Затем создадим в этой базе данных таблицу с помощью команды:



    Данная команда создает таблицу users, в которой будет три столбца - Id, Name и Age.



    После этого мы можем добавлять и получать данные из выше созданной таблицы. Вначале добавим в таблицу одну строку с помощью следующей команды:



    И в конце получим добавленные данные:





    Стоит отметить, что по умолчанию консоль в Windows поддерживает кодировку CP866, тогда как базы данных могут работать совсем с другой кодировкой, например, 1251. И даже сам клиент psql выводит нам соответствующие сообщения. Кроме того, при получении данных, при выводе информации о базах данных, таблицы и т.д. некоторая информация может отображаться некорректно. В этом случае перед запуском psql надо установить нужную кодировку и затем из консоли запустить программу psql.
    Остановка базы данных

    PostgreSQL останавливается автоматически одновременно с завершением работы компьютера, на котором она установлена.

    Перед остановкой PostgreSQL рекомендуется убедиться, что все пользователи и приложения завершили свою работу и закрыли соединение с базой данных.

    Если пользователи или приложения имеют открытые соединения на момент начала остановки базы данных, остановка произойдёт следующим образом:

    Будет запрещено выполнение новых соединений и запрещён запуск новых транзакций;

    Для всех неподтвержденных транзакций будет выполнен откат;

    Позволяет всем существующим сеансам закончить работу в штатном режиме

    Вы можете остановить базу данных как с рабочего стола, так и с помощью командной строки SQL.

    Чтобы остановить базу данных с рабочего стола:

    Подключитесь к серверу PostgreSQL как администратор Windows - т.е., как пользователь, являющийся членом группы «Администраторы».

    Перейдите на PostgreSQL 10, после чего нажмите Stop.

    Для остановки базы данных с использованием командной строки SQL, Вы должны запускать приложение командной строки с того же компьютера, на котором была установлена база данных PostgreSQL.

    Чтобы завершить работу базы данных с помощью командной строки SQL:

    Подключитесь к серверу PostgreSQL как администратор Windows - т.е., как пользователь, являющиеся членом группы «Администраторы».

    Откройте терминальную сессию или командное окно, если оно еще не открыто.

    На приглашение операционной системы введите следующую команду для запуска командной строки SQL и соединения с базой данных: sigterm
    Учетные записи пользователей

    Учётная запись пользователя состоит из имени пользователя и атрибутов пользователя, включающих:

    1. Пароль для проверки прав доступа к базе данных.

    2. Привилегии и роли.

    3. Табличное пространство по умолчанию для объектов базы данных.

    4. Временное табличное пространство по умолчанию для обработки запросов.
    5. Оборудование

    Персональный компьютер с установленной операционной системой Windows XP/7/8, браузер (Например, InternetExplorer, GoogleChrome, Opera), СУБД PostgreSQL.
    6. Задание на работу

    1. Установите СУБД PostgreSQL 9.6 (или новее) и клиент управления СУБД pgAdmin4. Приведите скриншоты шаговой установки.

    2. Подключитесь к базе данных через текстовый терминал (с помощью программы psql) от имени пользователя PostgreSQL и создайте базу данных. Приведите в отчете скриншоты терминала с выполненными командами и их результатом.
    7. Контрольные вопросы

    1. Каковы основные функции СУБД?

    2. Назовите отличительные черты реляционных баз данных?

    3. Что представляют собой базы данных?

    4. Назовите преимущества архитектуры «клиент-сервер»?

    5. Какие функции перешли к среднему уровню обработки данных в трехуровневой архитектуре «клиент-сервер»?

    6. Определите роль сервера в двухуровневой архитектуре «клиент-сервер».


    Лабораторная работа №2

    Создание таблиц


    1. Цели и задачи работы

    Целью лабораторной работы является изучение и практическое применение функций для создания таблиц.


    1. Порядок выполнения работы

    - ознакомится с теоретическими сведениями;

    - выполнить задание;

    - оформить отчет;

    - ответить на контрольные вопросы, заданные преподавателем.


    1. Оформление отчета

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


    1. Теоретические сведения

    Создание объектов базы данных осуществляется с помощью операторов языка запросов SQL.

    Для создания таблицы базы данных (БД) используется команда CREATE TABLE. CREATE TABLE создаёт новую, изначально пустую таблицу в текущей базе данных. CREATE TABLE также автоматически создаёт составной тип данных, соответствующий одной строке таблицы. Таким образом, имя таблицы не может совпадать с именем существующего типа в этой же схеме.

    Синтаксис команды CREATE TABLE:

    CREATE TABLE name_table (name_columndata_type,…);

    Для удаления таблицы используется команда DROP TABLE. DROP TABLE удаляет таблицы из базы данных. Удалить таблицу может только её владелец, владелец схемы или суперпользователь. Чтобы опустошить таблицу, не удаляя её саму, вместо этой команды следует использовать DELETE или TRUNCATE.

    Синтаксис команды DROP TABLE:

    DROP TABLE name_table;

    Для модификации базы данных используется команда ALETR TABLE. ALTER TABLE меняет определение существующей таблицы. Например, можно добавлять или удалять столбцы, менять их размер, создавать или уничтожать индексы или переименовывать столбцы либо саму таблицу. Можно также изменять комментарий для таблицы и её тип.

    Возможные синтаксисы команды ALTER TABLE:

    • Запрос добавляющий столбец в конец таблицы
ALTER TABLE table1 (column1 varchar(10));

    • Изменение размера столбца
ALTER TABLE table1 MODIFY (column1 varchar(20));

    • Удаление столбца таблицы
ALTER TABLE table1 DROP COLUMN column1;

    • Изменение имени таблицы
ALTER TABLE table1 RENAME TO table2;

    При создании (изменении) таблицы могут быть определены ограничения на вводимые значения. В этом случае SQL будет отвергать любое из них при не соответствии заданным критериям. Ограничения могут быть статическими, ограничивающими значения или диапазон значений, вставляемых в столбец (CHECH, NOT NULL). Они могут иметь связь со всеми значениями столбца, ограничивая новые строки значениями, которые не содержатся в столбцах или их наборах (уникальные значения, первичные ключи). Ограничения могут также определяться связью со значениями, находящимися в другой таблице, допуская, например, вставку в столбец только тех значений, которые в данный момент содержатся так- же в другом столбце другой или этой же таблицы (внешний ключ). Эти ограничения носят динамический характер.

    Существует два основных типа ограничений - ограничения на столбцы и ограничения на таблицу. Ограничения на столбцы (COLUMN CONSTRAINTS) применимы только к отдельным столбцам, а ограничения на таблицу (TABLE CONSTRAINTS) применимы к группам, состоящим из одного или более столбцов. Ограничения на столбец добавляются в конце определения столбца после указания типа данных и перед окончанием описания столбца (запятой). Ограничения на таблицу размещаются в конце определения таблицы, после определения последнего столбца.

    Чтобы запретить возможность использования в поле NULL-значений, можно при создании таблицы командой CREATE TABLE указать для соответствующего столбца ключевое слово NOT NULL. Это ограничение применимо только к столбцам таблицы. NULL – это специальный маркер, обозначающий тот факт, что поле пусто.

    Если при создании таблицы для столбца указывается ограничение UNIQUE, то база данных отвергает любую попытку ввести в это поле какой- либо строки значение, уже содержащееся в том же поле другой строки. Это ограничение применимо только к тем полям, которые были объявлены NOT NULL.

    Можно сделать уникальными группу полей, указав UNIQUE в качестве ограничений таблицы. При объединении полей в группу важен порядок, в котором они указываются. Ограничение на таблицу UNIQUE является полезным, если требуется поддерживать уникальность группы полей. Ограничения уникальности гарантируют, что данные в определённом столбце или группе столбцов уникальны среди всех строк таблицы. Например, если в нашей базе данных не допускается, чтобы студент сдавал в один день больше одного экзамена, то можно в таблице объявить уникальной комбинацию значений полей STUDENT_ID и EXAM_DATE. Для этого следует создать таблицу EXAM_MARKS таким способом.

    CREATE TABLE EXAM_MARKS

    (EXAMID INTEGER NOT NULL,

    STUDENTID INTEGER NOT NULL,

    SUBJID INTEGER NOT NULL,

    MARK CHAR(1),

    EXAM_DATEDATE NOTNULL,

    UNIQUE (STUDENT_ID, EXAM_DATE));
Ограничениям таблиц можно присваивать уникальные имена. Преимущество явного задания имени ограничения состоит в том, что в этом случае при выдаче системой сообщения о нарушении установленного ограничения будет указано его имя, что упрощает обнаружение ошибок.

    Для присвоения имени ограничению используется несколько изменённый синтаксис команд CREATE TABLE и ALTER TABLE.

    Приведённый выше пример запроса изменяется следующим образом:

    CREATE TABLE EXAM_MARKS

    (EXAMID INTEGER NOT NULL,

    STUDENTID INTEGER NOT NULL,

    SUBJID INTEGER NOT NULL,

    MARK CHAR(1),

    EXAM_DATEDATE NOTNULL,

    CONSTRAINT STUD_SUBJ_CONSTR

    UNIQUE (STUDENT_ID, EXAM_DATE);

    В этом запросе STUD_SUBJ_CONSTR - это имя, присвоенное указанному

    ограничению таблицы.
Первичные ключи таблицы - это специальные случаи комбинирования ограничений UNIQUE и NOT NULL. Первичные ключи имеют следующие особенности:

    • таблица может содержать только один первичный̆ ключ;

    • внешние ключи по умолчанию ссыпаются на первичный̆ ключ таблицы;

    • первичный̆ ключ является идентификатором строк таблицы (строки, однако, могут идентифицироваться и другими способами).

    Улучшенный вариант создания таблицы первичным ключом имеет теперь следующий вид:

    CREATE TABLE STUDENT (STUDENTID INTEGER PRIMARY KEY,

    SURNAME CHAR (25) NOT NULL,

    NAME CHAR (10) NOT NULL,

    STIPEND INTEGER,

    KURS INTEGER,

    CITY CHAR (15),

    BIRTHDAY DATE,

    UNIV_ID INTEGER);

    Ограничение PRIMARY KEY может также быть применено для нескольких полей, составляющих уникальную комбинацию значений – составнойпервичный ключ. Мы можем применить ограничение таблицы PRIMARY KEY, объявив пару EXAM_ID и STUDENT_ID первичным ключом таблицы:

    CREATE TABLE NEW_EXAM_MARKS

    (STUDENTID INTEGER NOT NULL,

    SUBJID INTEGER NOT NULL,

    MARK INTEGER,

    DATA DATE,

    CONSTRAINT EX_PR_KEY PRIMARY KEY(EXAM_ID,STUDENT_ID));

    Ограничение CHECK позволяет определять условие, которому должно удовлетворять вводимое в поле таблицы значение, прежде чем оно будет принято. Любая попытка обновить или заменить значение поля такими, для которых предикат, задаваемый ограничением CHECK, имеет значение ЛОЖЬ, будет отвергаться.

    Рассмотрим таблицу STUDENT. Значение столбца STIPEND в этой таблице STUDENT выражается десятичным числом. Наложим на значения этого столбца следующее ограничение – величина размера стипендии должна быть меньше 200.

    Соответствующий запрос имеет следующий вид.

    CREATE TABLE STUDENT

    (STUDENTID INTEGER PRIMARY KEY,

    SURNAME CHAR (25) NOT NULL,

    NAME CHAR (10) NOT NULL,

    STIPEND INTEGER CHECK (ST IPEND < 200),

    KURS INTEGER,

    CITY CHAR (15),

    BIRTHDAY DATE,

    UNIV_ID INTEGER);

    В SQL имеется возможность при вставке в таблицу строки, не указывая значений некоторого поля, определять значение этого поля по умолчанию. Наиболее часто используемым значением по умолчанию является NULL. Это значение принимается по умолчанию для любого столбца, для которого не было установлено ограничение NOT NULL. Ограничение NOT NULL просто указывает, что столбцу нельзя присваивать значение NULL. Пример синтаксиса:

    Значение поля по умолчанию указывается в команде CREATE TABLE тем же способом, что и ограничение столбца, с помощью ключевого слова

    DEFAULT <значение по умолчанию>.

    Строго говоря, опция DEFAULT не имеет ограничительного свойства, так как она не ограничивает значения, вводимые в поле, а просто конкретизирует значение поля в случае, если оно не было задано.

    Когда каждое значение, присутствующее в одном поле таблицы, представлено в другом поле другой или этой же таблицы, говорят, что первое поле ссылается на второе. Это указывает на прямую связь между значениями двух полей. Поле, которое ссылается на другое поле, называется внешним ключом, а поле, на которое ссылается другое поле, называется родительским ключом. Так что поле UNIV_ID таблицы STUDENT – это внешний ключ (оно ссылается на поле другой таблицы), а поле UNIV_ID таблицы UNIVERSITY, на которое ссылается этот внешний ключ – это родительский ключ.

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

    Для решения вопросов поддержания ссылочной целостности в SQL используется ограничение FOREIGN KEY. Назначение FOREIGN KEY – это ограничение допустимых значений поля множеством значений родительского ключа, ссылка на который указывается при описании данного ограничения FOREIGN KEY. Ограничение внешнего ключа указывает, что значения столбца (или группы столбцов) должны соответствовать значениям в некоторой строке другой таблицы. Это называется ссылочной целостностью двух связанных таблиц.

    Проблемы обеспечения ссылочной целостности возникают как при вводе значений поля, являющегося внешним ключом, так и при модификации/удалении значений поля, на которое ссылается этот ключ (родительского ключа). Одно из действий ограничения FOREIGN KEY – это отклонение (блокировка) ввода значений внешнего ключа, отсутствующих в таблице с родительским ключом. Также это ограничение воздействует на возможность изменять или удалять значения родительского ключа.

    Ограничение FOREIGN KEY используется в командах CREATE TABLE и ALTER TABLE при создании или модификации таблицы, которая содержит поле, которое требуется объявить внешним ключом. В команде указывается имя родительского ключа, на который имеется ссылка в ограничении FOREIGN KEY.

    Синтаксис ограничения FOREIGN KEY имеет следующий вид:

    FOREIGNKEY < список столбцов >

    REFERENCES < родительская таблица > [<родительский ключ >];

    В этом предложении список столбцов – это список из одного или более столбцов таблицы, которые будут созданы или изменены командами CREATE TABLE или ALTER TABLE (должны быть отделены друг от друга запятыми). Параметр родительская таблица - это имя таблицы, содержащейродительский ключ. Это, в частности, может быть и таблицей, которая создается или изменяется текущейкомандой. Параметр родительский ключ представляет собой список столбцов родительской таблицы, которые составляют собственно родительский ключ. Оба списка столбцов, определяющих внешний и родительский ключи, должны быть совместимы, а именно:

    • содержать одинаковое число столбцов.

    • последовательность (1-й, 2-й, 3-й и т.д.) столбцов списка внешнего ключа должны иметь типы данных и размеры, совпадающие с соответствующими (1-м, 2-м, 3-м и т.д.) столбцами списка родительского ключа.

    При применении команды ALTER TABLE к какой-либо таблице для задания ограничения FOREIGN KEY, значения внешнего ключа этой таблицы и родительского ключа соответствующей таблицы должны находиться в состоянии ссылочной целостности. В противном случае команда будет отклонена.

    Синтаксис команды ALTER TABLE в этом случае имеет следующий вид:

    ALTER TABLE <имя таблицы>

    ADD CONSTRAINT <имя ограничения>

    FOREIGN KEY (< список столбцов внешнего ключа > )

    REFERENCES < имя родительской таблицы >

    [(< список столбцов родительского ключа >)];

    Ограничение внешнего ключа может указываться не для всей таблицы, как это было показано выше, а непосредственно на соответствующий столбец таблицы. При таком варианте, называемом ссылочным ограничением столбца, ключевое слово FOREIGN KEY фактически не используется. Просто используется ключевое слово REFERENCES и далее указывается имя родительского ключа, подобно следующему примеру:

    CREATE TABLE STUDENT

    ( STUDENTID INTEGER PRIMARY KEY,

    SURNAME CHAR (25),

    NAME CHAR (10),

    STIPEND INTEGER,

    KURS INTEGER,

    CITY CHAR (15),

    BIRTHDAY DATE,

    UNIV_ID INTEGER REFERENCES UNIVERSITY(UNIV_ID));
Команда определяет поле STUDENT.UNIV_ID как внешний ключ, использующий в качестве родительского ключа поле UNIVERSITY.UNIV_ID, являющееся ключом таблицы UNIVERSITY.

    Эта форма эквивалентна следующему ограничению таблицы STUDENT:

    FOREIGN KEY (UNIV_ID) REGERENCES UNIVERSITY (UNIV_ID) или, вдругой записи,

    CONSTRAINT UNIV_FOR_KEY FOREIGN KEY (UNIV_ID) REFERENCES UNIVERSITY (UNIV_ID).

    Как уже говорилось, при использовании команд INSERT и UPDATE для модификации значений столбца, объявленного как внешний ключ, вновь вводимые значения должны уже быть обязательно представлены в фактически присутствующих значениях столбца, объявленного родительским ключом. При этом можно помещать в эти поля пустые (NULL) значения, несмотря на то, что значения NULL не допустимы в родительских ключах. Можно также удалять (DELETE) любые строки с внешними ключами из таблицы, в которой̆ эти ключи объявлены.

    При необходимости модификации значений родительского ключа дело обстоит иначе. Использование команды INSERT, которая осуществляет ввод новой записи, не вызывает никаких особенностей, при которых возможно нарушение ссылочной целостности. Однако команда UPDATE, изменяющая значение родительского ключа и команда DELETE, удаляющая строку, содержащую такой̆ ключ, содержат возможность нарушения согласованности значений родительского и ссылающихся на него внешних ключей. Например, может возникнуть так называемая "висячая" ссылка внешнего ключа на несуществующее значение родительского ключа, что совершенно не допустимо. Чтобы при применении команд UPDATE и DELETE к полю, являющемуся родительским ключом, не нарушалась целостность ссылки, возможны следующие варианты действий̆.

    • Любые изменения значений родительского ключа запрещаются и при по- пытке их совершения отвергаются (ограничение NO ACTION или RESTRICT). Эта спецификация действия применяется по умолчанию.

    • Изменения значений родительского ключа разрешаются, но при этом автоматически осуществляется коррекция всех значений внешних ключей, ссылающихся на модифицируемое значение родительского ключа. Это называется каскадным изменением (ограничение CASCADE).

    • Изменения значений родительского ключа разрешаются, но при этом соответствующие значения внешнего ключа автоматически удаляются, то есть за- меняются значением NULL (ограничение SET NULL).

    • Изменения значений родительского ключа разрешаются, но при этом соответствующие значения внешнего ключа автоматически заменяются значением по умолчанию (ограничение SET DEFAULT).

    При описании внешнего ключа должно указываться, какой из приведенных вариантов действий следует применять, причем в общем случае это должно быть указано раздельно для каждой из команд UPDATE и DELETE. В качестве примера использования ограничений, накладываемых на операции модификации родительских ключей, можно привести следующий запрос:

    CREATE TABLE NEW_EXAM_MARKS

    (STUDENTID INTEGER SUB J_I D INTEGER NOT NULL,

    MARK INTEGER,

    DATA DATE,

    CONSTRAINT EXAM_PR_KEY PRIMARY

    REFERENCES SUBJECT,

    CONSTRAINT STUDENT_ID_FOR_KEY FOREIGN KEY (STUDENT_ID) REFERENCES STUDENT ON UPDATE CAS CADE ON DELETE NO ACTION);

    В этом примере при попытке изменения значения поля STUDENT_ID таблицы STUDENT будет автоматически обеспечиваться каскадная корректировка этих значений в таблице EXAM_MARKS. При изменении идентификатора студента STUDENT_ID в таблице STUDENT сохранятся все ссылки на его оценки. Однако любая попытка удаления (DELETE) записи о студенте из таблицы STUDENT будет отвергаться, если в таблице EXAM_MARKS существуют записи об оценках данного студента.

    1.   1   2   3   4   5   6   7   8   9   ...   12


    написать администратору сайта