Использование проверочных ограничений



Лабораторная работа №3: Создание таблиц и ограничений

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

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

Любое поле таблицы характеризуется как минимум тремя обязательными свойствами:

· Имя столбца. Реализует способ обращения к конкретному полю в таблице. Рекомендуется всегда присваивать полям смысловые имена.

· Тип данных. Определяет, информация какого типа может храниться в данном поле.

· Разрешить значения null. Определяет, допустимо ли для данного поля отсутствие фактических данных, для обозначения которого используется так называемый маркер пустого значения null.

Типы данных

При выборе типа данных для столбца следует отдавать предпочтение типу, который позволит хранить любые возможные для этого столбца значения и занимать при этом минимальное место на диске. Типы данных в MS SQL Server можно разделить на восемь категорий:

1. Целочисленные данные

· bit (1 байт). Может хранить только значения 0, 1 или null (пустое значение, сообщающее об отсутствии данных). Его удобно использовать в качестве индикатора состояния – включено/выключено, да/нет, истина/ложь.

· tinyint (1 байт).Целые значения от 0 до 255.

· smallint (2 байта). Диапазон значений от -215 (-32768) до 215 (3767).

· int (4 байта). Может содержать целочисленные данные от -231 (-2147483648) до 231 (21474833647).

· bigint (8 байт). Включает в себя данные от -263 (9223372036854775808) до 263 (9223372036854775807). Удобен для хранения очень больших чисел, не помещающихся в типе данных int.

2. Текстовые данные

· char. Содержит символьные не Unicode-данные фиксированной длины до 8000 знаков.

· varchar. Содержит символьные не Unicode-данные переменной длины до 8000 знаков.

· nchar. Содержит данные Unicode фиксированной длины до 4000 символов. Подобно всем типам данных Unicode его удобно использовать для хранения небольших фрагментов текста, которые будут считываться разноязычными клиентами.

· nvarchar. Содержит данные Unicode переменной длины до 4000 символов.

3. Десятичные данные

· decimal. Содержит числа с фиксированной точностью от -1038-1 до 1038-1. Он использует два параметра: точность и степень. Точностью называется общее количество знаков, хранящееся в поле, а степень – это количество знаков справа от десятичной запятой.

· numeric. Это синоним типа данных decimal – они идентичны.

4. Денежные типы данных

· money (8 байт). Содержит денежные значения от -263 до 263 с десятичной точностью от денежной единицы. Удобен для хранения денежных сумм, превышающих 214768,3647.

· smallmoney (4 байта). Содержит значения от -214748,3648 до 214748,3647 с десятичной точностью.

5. Данные с плавающей точкой

· float. Содержит числа с плавающей запятой от -1,79Е+38 до 1,79Е+38.

· real. Содержит числа с плавающей запятой от -3,40Е+38 до 3,40Е+38.

6. Типы данных даты и времени

· datetime (8 байт). Содержит дату и время в диапазоне от 1 января 1753 года до 31 декабря 9999 года с точностью 3,33 мс.

· smalldatetime (4 байта). Содержит дату и время, начиная от 1 января 1900 года и заканчивая 6 июнем 2079, с точностью до 1 минуты.

7. Двоичные типы данных

· binary. Содержит двоичные данные фиксированной длины до 8000 байт.

· varbinary. Содержит двоичные данные переменной длины до 8000 байт.

8. Специализированные типы данных

· sql_variant. Используется для хранения значения с различными типами данных.

· timestamp. Используется для установки временных меток записей при вставке, которые соответствующим образом обновляются. Удобен для отслеживания изменений в данных.

· uniqueidentifier. Глобальный уникальный идентификатор.

· xml. Используется для хранения целых документов или фрагментов XML.

Создание пользовательских типов данных

SQL Server позволяет на основе системных типов данных создавать пользовательские типы со всеми предварительно заданными параметрами, включая все ограничения и умолчания. В качестве примера создадим тип данных phone, который будет использоваться в таблице Customer для хранения телефонного номера клиента. Для его создания воспользуемся графическим интерфейсом утилиты Management Studio.

1. В дереве обозревателя объектов раскройте папки «Базы данных – Sales – Программирование - Типы». В контекстном меню узла «Определяемые пользователем типы данных» выберите команду «Создать определяемый пользователем тип данных».

2. В появившемся окне в текстовом поле «Имя» введите phone. В раскрывающемся списке «Тип данных» выберите nchar. В качестве длины введите 10. Отметьте параметр «Разрешить значения null», чтобы иметь возможность не указывать телефонный номер при добавлении нового клиента.

3. В секции «Привязки» оставьте пустые значения и щелкните на кнопке Ok. Созданный пользовательский тип данных должен появиться в дереве обозревателя объектов.

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

Создадим в базе данных Sales пять таблицы. Первая таблица, Customer, будет хранить информацию о клиентах, вторая таблица City – справочник городов, третья, Product, - информацию о товарах, четвертая, Order, будет содержать подробную информацию о заказах и пятая, OrdItem, - о составе заказа (перечне товаров входящих в заказ). Ниже представлены все поля этих таблиц и их основные свойства.

Имя столбца Тип данных Разрешить null Описание

Customer

IdCust int, identity нет Уникальный идентификационный номер клиента, на который можно ссылаться в других таблицах
FName nvarchar(20) нет Имя клиента
LName nvarchar(20) нет Фамилия клиента
IdCity int нет Ссылка на номер города
Address nvarchar(50) нет Адрес клиента
Zip nchar(5) нет Почтовый индекс клиента
Phone phone да Телефонный номер клиента

City

IdCity int, identity нет Уникальный идентификационный номер города
CityName nvarchar(20) нет Название города

Product

IdProd int, identity нет Уникальный идентификационный номер для каждого товара
Description nvarchar(100) нет Короткое текстовое описание товара
InStock int нет Количество единиц продукта на складе

Order

IdOrd int, identity нет Уникальный идентификационный номер заказа
IdCust int нет Ссылка на номер клиента
OrdDate smalldatetime нет Дата и время размещения заказа

OrdItem

IdOrd int нет Ссылка на номер заказа
IdProd int нет Ссылка на номер товара
Qty int нет Количество единиц товара в заказе
Price money нет Цена товара

 

Таблицы можно создавать как в графическом интерфейсе (в утилите Management Studio), так и с помощью кода T-SQL. Воспользуемся самым простым, графическим способом. Сначала создадим таблицу Customer:

1. В дереве обозревателя объектов в базе данных Sales в контекстном меню узла «Таблицы» выберите команду «Создать таблицу…». В рабочей области должна появиться вкладка с конструктором таблиц.

2. В первую строку в столбце «Имя столбца» введите IdCust, в столбце «Тип данных» выберите int. Убедитесь что параметр «Разрешить значения null» отключен.

3. В нижней половине экрана в разделе «Свойства столбцов» введите описание поля и измените значение параметра «Спецификация идентификатора / (Идентификатор)» на «Да» для того чтобы значения номера клиента формировались автоматически. Свойство «Идентифицирующий столбец» (Identity), обычно используемое совместно с типом данных int, предназначено для автоматического приращения значения на единицу при добавлении каждой новой записи. К примеру, клиент, добавленный в таблицу первым, будет иметь значение идентификатора 1, вторым – 2, третьим – 3, и т.д.

4. Аналогичным образом введите описания всех остальных полей и закройте окно конструктора таблиц. Введите в качестве имени таблицы Customer. Вновь созданная таблица должна появиться в дереве обозревателя объектов в папке «Таблицы».

Задание для самостоятельной работы: В соответствие с вышеприведенным описанием создайте оставшиеся четыре таблицы: City, Product, Order и OrdItem.

Создание ограничений

Перед тем как начать работать с таблицами следует ограничить вводимые в них данные в целях обеспечения так называемой целостности данных, т. е. ограничить возникновение в базе данных некорректных или противоречивых данных вследствие добавления, изменения или удаления какой-либо записи, например, ввод отрицательной цены или количества товара. Существует четыре типа целостности данных: доменная, сущностная, ссылочная и пользовательская (или бизнес-правила). Рассмотрим основные инструменты, предоставляемые в SQL Server для их реализации.

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

Использование проверочных ограничений

Ограничения на проверку используются для ограничения данных, принимаемых полем, даже если они имеют корректный тип. Например, поле Zip (почтовый индекс) имеет тип nchar(5), т.е. чисто теоретически оно может принимать буквы. Это может стать проблемой, поскольку не существует почтовых индексов с буквами. Рассмотрим, как создать ограничение на проверку, запрещающее вводить в это поле буквы.

1. В контекстном меню папки «Ограничения» таблицы Customer выберите команду «Создать ограничение».

2. В открывшемся окне «Проверочные ограничения» заполните следующие поля:

· Имя: CK_Zip

· Выражение: ([zip] like '[0-9][0-9][0-9][0-9][0-9]'). Данное выражение описывает ограничение, принимающее пять символов, которыми могут быть только цифры от 0 до 9.

· Описание: Ограничение на значения почтового индекса

3. Щелкните на кнопке «Закрыть» и закройте конструктор таблиц (он был открыт, когда вы начали создавать ограничение) с сохранением изменений.

Задание для самостоятельной работы: Создайте ограничения для полей InStock таблицы Product и Qty, Price таблицы OrdItem, запрещающие ввод в них отрицательных значений. В данном случае выражение проверки будет иметь вид (Имя поля > 0) для полей Qty, Price и (Instock>=0) для столбца InStock.


Дата добавления: 2019-01-14; просмотров: 178; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!