Лабораторная работа № 4. Объекты SQL Server.
Задание ограничений.
Данные, хранимые в БД должны быть целостны, то есть непротиворечивы. Для этого данные должны быть проверены перед вводом в БД на корректность. В клиент-серверных приложениях это можно сделать в двух местах: на клиенте и на сервере.
Выделяют 4 вида целостности данных:
1. Сущностная целостность – каждая сущность должна быть уникальна, то есть отличима от любой другой сущности в БД. Основным механизмом поддержки этого вида целостности является механизм первичного ключа.
2. Ссылочная целостность – основным механизмом поддержки ссылочной целостности является связь таблиц по внешнему ключу.
3. Доменная целостность – область допустимых значений для атрибута (тип данных и дополнительные ограничения).
4. Пользовательская целостность – бизнес-правила предметной области и другие ограничения, не попадающие в предыдущие категории.
Различные виды целостности могут поддерживаться с помощью различных механизмов. Рассмотрим механизм ограничений (CHECK), который рекомендуется использовать для задания обеспечения доменной целостности.
Ограничения определяются для таблицы и находятся соответственно в ветке каждой таблицы БД:
На этапе концептуального моделирования уже должны быть определены ограничения, которые накладываются на атрибуты каждой сущности. Если эти ограничения можно реализовать средствами БД, то это необходимо сделать.
Ограничения (CHECK) могут быть определены как для конкретного столбца, так и для таблицы в целом. Ограничения для столбца накладываются на значения конкретного столбца, а для таблицы позволяют задать выражение проверки, основанное на значениях нескольких столбцов. Например, если в таблице есть два столбца: Price и DiscountedPrice, то можно задать ограничение, не допускающее ввод цены со скидкой больше, чем обычной цены – «Price >= DiscountedPrice». Проверочное ограничение можно создать с любым логическим выражением, возвращающим значение TRUE или FALSE на основе логических операторов.
Рассмотрим создание ограничений.
Логичным выглядит задание для поля Price таблицы NakladnayaDet значения больше 0 (цена единицы товара не может быть отрицательной). Создадим соответствующее ограничение:
1. Контекстное меню на ветке «Ограничения» - «Создать ограничение…».
2. В диалоговом окне «Проверочные ограничения» задаем параметры создаваемого ограничения – «Выражение» и при необходимости «Имя» ограничения:
3. Для данного ограничения подойдет выражение “Price > 0”.
4. Сохраним сделанные в таблице изменения.
Теперь в поле Price SQL Server не даст ввести в поле значение, противоречащее созданному ограничению.
Еще одно логичное ограничение связано с тем паспортными данными работников. Например, серия паспорта – это 4 цифровых символа. Выражение для проверки серии паспорта будет выглядеть следующим образом «PasportSeria LIKE ‘[0-9][0-9][0-9][0-9]’». В этом выражении [0-9] означает диапазон символов от 0 до 9.
Задание.
1. Создайте в этой же таблице еще одно ограничение, запрещающее вводить в поле Kolvo значения меньшие 0.
2. Задайте соответствующие ограничения для полей Kolvo и Price таблицы OrderDet и CurrentPrice таблицы Tovar.
3. Задайте ограничение для номера паспорта – 6 цифровых символов.
4. Задайте выражение для следующего ограничения в таблице Prodavec: Дата принятия сотрудника на работу (HireDate) не может превышать дату его увольнения (LeaveDate), в то же время дата увольнения может принимать значение NULL.
5. Сформулируйте правило, запрещающее прием сотрудников (ввод в БД данных о нем) моложе 18 лет.
Основные объекты SQL Server 2005.
Таблицы – это объекты, которые непосредственно хранят пользовательские данные и реализуют, собственно, логическую модель, абстрагирующие физическое хранение данных от их восприятия пользователем. В принципе, клиентским приложениям можно давать доступ непосредственно к ним, однако, полезнее вместо этого реализовать еще один уровень абстракции, реализовав еще один слой – слой внешних представлений. Этот слой дает еще ряд преимуществ, разделяя ИЛМ и то, что представляется пользователю, так как пользователю зачастую сложно работать с нормализованной БД.
Представления (VIEWS).
Представления – это виртуальные таблицы, которые не хранят данные непосредственно, а выдают их по запросу. Можно сказать, что представления – это сохраненный запрос, который вызывается каждый раз, когда происходит обращение к нему. Физически представления данные не хранят (хотя существуют индексируемые, материализованные представления, которые хранят данные), а переводят в запросы на выборку к базовым таблицам.
Все представления находятся в соответствующей ветке БД – «Представления»:
Для создания представления доступен конструктор, который позволяет создавать представления достаточно просто. Для примера составим представление, которое позволяет просматривать данные в таблице «Tovar» при этом добавим столбец «GrupName».
1. Контекстное меню на пункте «Представления»» - «Создать представление».
2. Добавим две таблицы: «Tovar» и «Grup»
3. В окне создания запроса выберем нужные столбцы: все столбцы из таблицы «Tovar» и столбца «GrupName» таблицы «Grup». Так для таблиц были установлены ограничения внешнего ключа, то связь между таблицами устанавливается автоматически. Также мастер создал необходимый запрос для этих таблиц с использованием INNER JOIN (при необходимости это можно изменить).
4. Протестируйте созданный запрос, нажав кнопку «Выполнить» панели инструментов и сохраните под названием «vTovar».