Lab5_SQL (1059123), страница 4

Файл №1059123 Lab5_SQL (Лабораторная №5) 4 страницаLab5_SQL (1059123) страница 42017-12-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Обеспечение целостности ссылок

Сейчас в базе данных Sales находится три таблицы: по одной для данных о клиентах, товарах и заказах. Каждая из этих трех таблиц содержит данные, на которые влияют данные, содержащиеся в других двух таблицах. Например, на данные табли­цы Orders влияют данные таблицы Customers, т.е. вы не должны создавать заказ для клиента, данные о котором отсутствуют в таблице Customers. На таблицу Orders также влияют данные таблицы Products, т.е. вы не станете создавать заказ отсутствующего продукта. Чтобы обеспечить гарантию наличия записи о клиенте в таблице Customers перед тем, как продать ему что-нибудь, или чтобы не продавать несущест­вующую продукцию, вам нужно обеспечить целостность ссылок.

Суть обеспечения целостности ссылок очевидна из названия: данные в одной

таблице, ссылающиеся на данные из другой таблицы, защищены от некорректного

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

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

Внешний ключ используется в комбинации с первичным для связывания двух таблиц по общему столбцу. Вы, к примеру, можете связать таблицы 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.

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 (рис. 17).

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

USE sales

INSERT orders

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

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

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

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

USE sales

DELETE from customers

WHERE custid = 1

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

Характеристики

Тип файла
Документ
Размер
2,55 Mb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Лабораторная №5
Sales.mdf
Sales_log.ldf
lab5.sql
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6274
Авторов
на СтудИзбе
316
Средний доход
с одного платного файла
Обучение Подробнее