Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД3_1lr.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
492.03 Кб
Скачать

11

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

Тема: "Создание отношений и схемы базы данных"

Цель работы: усвоить способы создания отношений и схемы отношений базы данных средствами СУБД MS SQL Server 2008;

Краткие теоретические сведения Отношения базы данных

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

Существует три основных вида отношений между таблицами, которые могут существовать в базе данных:

  • Один-к-одному (один-один).

  • Один-ко-многим (один-множество).

  • Многие-ко-многим (множество-множество).

Отношение "один-к-одному" - это самое простое для понимания отношение, хотя используется оно сравнительно редко - одна запись в одной таблице должна соответствовать ровно одной записи в другой таблице. Такая ситуация может возникнуть лишь в случаях, например, если вам требуется разбить одну очень большую таблицу на две.

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

Отношение "многие-ко-многим". Иногда встречается ситуация, когда ни одной, одной или нескольким записям в главной таблице соответствует ни одна, одна или несколько записей в таблице подчиненной. В качестве иллюстрации можно привести пример компании, которая располагает несколькими складами (их состояние отражено в главной таблице), причем склады эти снабжают товарами несколько магазинов (подчиненная таблица). Если склады организованы таким образом, что несколько складов могут снабжать один и тот же магазин (например, каждый склад специализируется на определенном виде товаров), то получится, что каждый склад снабжает несколько магазинов, а каждый магазин снабжается несколькими складами.

Внешний ключ — это любой ключ в подчиненной таблице (таблице-потомке), в которой столбец или набор столбцов прямо соответствует аналогичной информации в главной таблице. Внешний ключ существует только тогда, когда существует отношение между главной и подчиненной таблицами.

Создание отношения спомощью SQL Server Management Studio

  1. Запустите SQL Server Management Studio, найдите узел вашей базы данных и разверните его. Найдите и выделите нужную таблицу, щелкните затем на ней правой кнопкой мыши. Выберите команду проект, чтобы перейти в конструктор таблиц.

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

  2. Диалоговое окно свойств таблицы должно открыться па вкладке отношения. Никаких отношений здесь еще не определено.

  3. Щелкните на кнопке Добавить для того, чтобы создать новое отношение.

  1. Далее необходимо выбрать параметры отношения. В поле списка таблица первичного ключа, то есть главная таблица на стороне "один", по умолчанию выбрана первая по алфавиту таблица. Разверните список и выберите имя нужной вам таблицы. В качестве таблицы внешнего ключа, то есть подчиненная таблица на стороне "многие", выберите имя другой таблицы

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

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

  4. В нижней части окна диалога увидите два поля флажка: Cascade Update Related Fields и Cascade Delete Related Records. Установив эти флажки, можно гарантировать, что при изменении или удалении значений первичного ключа в главной таблице SQL-сервер автоматически внесет соответствующие изменения в подчиненную таблицу, то есть изменит или удалит необходимые строки.

  5. Щелкните на Close, чтобы продолжить работу. Когда вы будете закрывать таблицу, появится окно сообщения с запросом на сохранение изменений: щелкните на Yes. В результате появится еще один диалог Save с запросом на сохранение изменений: снова щелкните на Yes и все внесенные изменения будут физически записаны в базу данных.

Флажки, находящиеся в нижней части окна диалога Отношения имеют следующее назначение:

  • Check exesting data on creaton (Проверка существующих данных при создании отношения). Если хотя бы в одной из двух таблиц уже имеются записи, то установка этого флажка приведет к тому, что SQL-сервер проверит эти существующие данные в момент перед физическим созданием отношения. Если данные отвечают требованиям, которые предъявляет к ним отношение, то оно будет успешно создано. И напротив, если данные не пройдут проверку, отношение создано не будет. Очевидно, что в подобной ситуации необходимо принять решение: вы можете либо скорректировать ошибочные данные в таблице и заново попытаться создать отношение, либо пересмотреть параметры отношения.

  • Enforce relationship for replication (Принудительная поддержка отношения при репликации). Реплика базы данных создается и используется отдельно, например, в другом подразделении той же организации, а вносимые в базу данных изменения копируются (реплицируются) в реплику.

  • Enforce relationship for INSERT and UPDATE (Принудительная поддержка отношения в операциях INSERT и UPDATE). Его установкой мы требуем, чтобы в результате процесса вставки или удаления записей (то есть, в результате транзакций) данные в таблицах отвечали условиям отношения. Это приведет к тому, что невозможно будет вставить (изменить, удалить) в таблицу запись со значением в поле внешнего ключа, какое отсутствует в таблице содержащей первичный ключ. Иными словами, если операция нарушает условия, накладываемые на таблицы отношением, она отменяется!

  • Cascade Update Rotated Fields/Cascade Delete Related Records (Каскадное обновление связанных полей/Каскадное удаление связанных записей). Эти два флажка не имеют отношения к реализации ссылочной целостности, они отвечают за сохранение таковой. Если мы изменяем ключевую информацию в одной таблице, SQL-сервер автоматически каскадирует изменения во вторую, сохраняя тем самым существующее отношение. Каскадирование происходит только при внесении изменений в главную таблицу, изменения в подчиненной таблице не каскадируются.

Использование SQL-команды Alter Table для построения отношения

Создать отношение или ограничение целостности возможно при помощи SQL-выражения. Это делается посредством команды ALTER TABLE, выполненной в Query Analyzer.

  1. Запустите Query Analyzer.

  2. В панели Query введите следующий SQL-код:

USE имя_базы данных

CREATE UNIQUE CLUSTERED INDEX имя_индекса