русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование внешних ключей


Дата добавления: 2015-07-09; просмотров: 672; Нарушение авторских прав


Внешний ключ используется в комбинации с первичным для связывания двух таблиц по общему столбцу. Вы, к примеру, можете связать таблицы Orders и Customers через столбец CustID, который есть в обеих таблицах. Если вы используете поле CustID таблицы Customers в качестве первичного ключа (кстати, он у вас уже есть), то можете использовать поле CustID таблицы Orders в качестве внешнего ключа, который свяжет две таблицы. Вы не сможете добавить запись в таблицу Orders, если в таблице Customers нет соответствующей записи. Кроме того, вы не сможете удалить запись из таблицы Customers при наличии соответствующей записи в таблице Orders, поскольку вы не хотите выполнять заказ без информации о клиенте.

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

1. В SQL Server Management Studio щелкните на кнопке New Query и выполните команду New SQL Server Query. Подключитесь с помощью аутентификации Windows.

2. Чтобы вставить в таблицу Orders запись с идентификатором клиента, идентификатором продукта и текущей датой (с помощью функции GETDATE ()), введите и выполните следующий код:

USE sales

INSERT orders

VALUES (999,5,57,getdate())

3. Обратите внимание на то, что предыдущий код был успешно выполнен даже несмотря на то, что в таблице Customers нет клиента с идентификационным номером 999.

4. Чтобы удалить ошибочные записи, введите и выполните следующий код (отметим, что это потенциально опасная команда, поскольку она удаляет все записи из таблицы):

truncate table orders

Итак, вы убедились, что можно ввести заказ для несуществующего клиента, и вам нужно защитить от этого базу данных. Создайте в поле CustID таблицы Orders внешний ключ, связанный с полем CustID таблицы Customers (которое является первичным ключом таблицы Customers). С таким отношением данные в ваших таблицах будут защищены. Итак, создадим отношение.



1. Откройте SQL Server Management Studio. B Object Explorer раскройте папки
Databases=>Sales=>Tables=>Orders.

2. Щелкните правой кнопкой мыши на папке Keys и выполните команду New Key.

3. В правом блоке в разделе Identity (Name) введите имя FK_Customers_Orders.

4. В блок Description введите описание: Relate tables on CustID.

5. В разделе Tables And Columns Specification щелкните на кнопке с многоточием.

6. В раскрывающемся списке Primary Key Table выберите Customers.

7. В обоих раскрывающихся списках решетки выберите поле CustID, как показано на рисунке (рис. 20).

 

Рис. 20. Связывание таблиц

8. Щелкните на кнопке ОК. Диалоговое окно Foreign Key Relationships должно выглядеть следующим образом (рис. 21).

Рис. 21. Создание внешнего ключа

9. Чтобы создать ключ, щелкните на кнопке Close.

10. Чтобы сохранить таблицу, щелкните на кнопке [X], а затем на Yes в диалоговом окне Save.

11. В Object Explorer щелкните правой кнопкой мыши на папке Keys таблицы Orders и выполните команду Refresh.

12. Расширьте папку Keys и вы увидите новый ключ.

Обратите внимание на следующие параметры в нижней части диалогового окна, показанного на рис. 21:

♦ Check Existing Data On Creation Or Re-Enabling (эта строка находится сверху и её не видно на рисунке). Параметр указывает SQL Server проверить соответствие всех существующих данных в обеих таблицах параметрам ограничения. В случае несоответствия вы получите предупреждение.

♦ Enable Relationship For Replication. Репликация используется для копирования баз данных с одного сервера на другой. Этот параметр включает копирование связи посредством репликации на другой сервер вместе с таблицами первичных и внешних ключей.

♦ Enforce Foreign Key Constraint. Если вам больше не нужно созданное отношение, вы можете снять этот флажок и отключить отношение, не удаляя его. Таким образом, в будущем вам не нужно будет полностью воссоздавать это отношение.

Протестируйте созданное отношение. Попытайтесь добавитьв таблицу Orders несколько записей, для которых нет соответствующих данных в таблице Customers, а затем удалить из таблицы Customers запись, которая ссылается на запись в таблице Orders.

1. Попытайтесь добавить запись:

USE sales

INSERT orders

VALUES (999,5,57,getdate())

2. Как видите, добавление не было выполнено, поскольку в таблице Customers нет клиента с идентификационным номером 999 (рис. 23).

3. Чтобы окончательно убедиться, что все работает, как надо, добавьте в таблицу Orders запись с существующим номером клиента, выполнив в окне запросов следующий код:

USE sales

INSERT orders

VALUES (1,5,57,getdate())

Рис. 23. Добавление записи было отклонено

4. Как видите, код был выполнен, поскольку клиент с номером 1 существует.

5. Теперь при наличии соответствующей записи в таблице Orders попытайтесь удалить данные о клиенте 1 из таблицы Customers.

USE sales

DELETE from customers

WHERE custid = 1

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

 



<== предыдущая лекция | следующая лекция ==>
Использование ограничений на уникальность | SQL сервер. Резервное копирование и восстановление БД


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.667 сек.