Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Базы данных / ЛР3_2014

.pdf
Скачиваний:
23
Добавлен:
21.03.2015
Размер:
888.25 Кб
Скачать

ПМИ

БАЗЫ ДАННЫХ

2014

Лабораторная работа № 3. Создание таблиц базы данных в СУБД

MS SQL SERVER 2008 R2

Цель работы: приобретение практических навыков создания и модификации таблиц базы данных в СУБД MS SQL SERVER 2008 R2.

Задания

1.Изучите приведенный в лабораторной работе теоретический материал.

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

3.Выполните индивидуальное задание: на основании концептуальной модели предметной области, разработанной в первой лабораторной работе, постройте набор отношений, а затем выполните физическое проектирование таблиц в СУБД.

4.Постройте диаграмму базы данных.

5.Покажите результат работы преподавателю.

6.Введите в каждую таблицу 5-10 записей.

7.Ответьте на контрольные вопросы.

Краткие теоретические сведения

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

Таблица – основной объект для хранения информации в реляционной базе данных. Синтаксис команды создания таблицы сложный. Упрощенный синтаксис этой

команды имеет следующий вид:

CREATE TABLE имя_таблицы

( {имя_столбца тип_данных [(размер)] [ограничения целостности на столбец…]} ,.. [, <ограничения целостности таблицы> ,..] );

Имя_таблицы, имя_столбца – имена должны состоять из символов латинского

алфавита, цифр или символов _ , @ , #. Имена должны начинаться с символов латинского алфавита и не должны содержать пробелов. В русскоязычной версии MS SQL Server 2008 R2 допускается использование кириллицы.

Типы данных, используемые MS SQL Server 2008 R2, приведены в прил. 1.

Общий принцип выбор типа данных: выбираем тип данных, который с точки зрения размера наилучшим образом подходит под требования задачи. При этом обязательно следует исходить не только из текущей конфигурации БД, но и продумать, как БД (и ситуация, которую она моделирует) будет развиваться в будущем. Если есть вероятность, что, например, integer может не вместить все необходимые данные, возможно, есть смысл использовать вместо него bigint и т.п.

Качала Н.М.

Страница 1

ПМИ

БАЗЫ ДАННЫХ

2014

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

В SQL Server предусмотрена концепция пользовательских типов данных (user-defined types, UDF). Их можно создавать в среде Management Studio (Обозревателе объектов текущая БД Программирование Типы Определяемые пользователем типы данных) или скриптом. Пользовательские типы данных создаются на основе встроенных.

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

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

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

К ограничениям относятся:

запрет использования NULL-значений,

ограничение уникальности значений (UNIQUE);

ограничение на значение (CHECK);

значения по умолчанию (с технической точки зрения не является ограничением),

ограничение первичного ключа,

ограничения внешнего ключа.

Общий синтаксис ограничений целостности:

CONSTRAINT

[имя_ограничения]

тип_ограничения

[(столбец [,…])]

[предикат]

[откладывание_ограничения] [время_ откладывания]

CONSTRAINT [имя_ограничения] – начинает определение ограничения и задает ограничению имя. Если имя не задано, то система создаст имя автоматически. Лучше задавать ограничениям осмысленные имена. В этом случае при выдаче системой сообщения о нарушении установленного ограничения будет указано его имя, а это упрощает обнаружение ошибок.

Пояснение по элементам CONSTRAINT:

столбец [,…] связывает с ограничениями один или несколько столбцов. Столбцы перечисляются через запятую. Список столбцов следует заключать в круглые скобки;

предикат определяет предикат для ограничений типа CHECK; откладывание_ограничения определяет для ограничения тип DEFERRABLE

(допускающий откладывание) или NOT DEFERRABLE (не допускающий откладывание); время_откладывания – для ограничений с отложенной проверкой – определяется,

является ли оно изначально откладываемым (INITIALLY DEFERRED) или изначально безотлагательным. Для изначально откладываемого ограничения время проверки сдвигается до конца транзакции, даже если она состоит из множества инструкций SQL. Для изначально безотлагательного ограничения проверка ограничения производится в конце каждой инструкции SQL.

Качала Н.М.

Страница 2

ПМИ

БАЗЫ ДАННЫХ

2014

Примеры создания таблиц

1. Таблица ГРАЖДАНСТВО

CREATE TABLE Гражданство

(код_гр tinyint PRIMARY KEY CHECK (код_гр >=1 AND код_гр <=4), наименование varchar(80) UNIQUE NOT NULL);

В результате выполнения этого скрипта в Обозревателе объектов появится таблица dbo.Гражданство с описанием столбцов, ключей, ограничений (рис. 1). Префикс «dbo» обозначает, что таблица является объектом БД (Data Base Object).

2. Объявление именованных ограничений целостности

CREATE TABLE Гражданство

(код_гр tinyint CONSTRAINT pk_гражд PRIMARY KEY CONSTRAINT код_гражд CHECK (код_гр >=1 AND код_гр <=4),

наименование varchar(80) CONSTRAINT u_гражд UNIQUE NOT NULL);

Результат выполнения этого скрипта приведен на рис. 2. Сравните имена ограничений в Обозревателе объектов с именами ограничений рис. 1.

Рис. 1

Рис. 2

3. Таблица СОТРУДНИКИ. Обратите внимание на различные способы задания ограничений внешнего ключа

CREATE TABLE Сотрудники

(таб_номер int CONSTRAINT pk_таб_ном PRIMARY KEY, фото varbinary(max),

ИНН char(12),

СНИЛС char(14) NOT NULL, Фамилия varchar(30) NOT NULL, Имя varchar(30) NOT NULL, Отчество varchar(30),

Пол char(1) CONSTRAINT огр_пол CHECK (пол in ('М', 'Ж')), Гражданство tinyint FOREIGN KEY REFERENCES Гражданство(код_гр),

Качала Н.М.

Страница 3

ПМИ

БАЗЫ ДАННЫХ

2014

Семейное_полож tinyint CONSTRAINT сотруд_сем_пол

FOREIGN KEY REFERENCES Состояние_брак, Место рождения varchar (80) NOT NULL,

Номер_пасп char(12) CONSTRAINT паспорт UNIQUE NOT NULL, Кем_выдан varchar(80) NOT NULL,

Дата_выдачи date NOT NULL);

4. Таблица РОДСТВО

CREATE TABLE Родство

(код_родств tinyint CONSTRAINT pk_родств PRIMARY KEY

CONSTRAINT огр_код_родст CHECK (код_родств>=1 AND код_родств <=10), Наименование varchar(80) CONSTRAINT uniq_родст UNIQUE NOT NULL);

5. Таблица РОДСТВЕННИКИ

CREATE TABLE Родственники

(код_родств tinyint CONSTRAINT fk_родств FOREIGN KEY REFERENCES Родство, таб_номер int CONSTRAINT fk_таб_ном FOREIGN KEY REFERENCES Сотрудники,

Фамилия varchar(30) NOT NULL, Имя varchar(30) NOT NULL, Отчество varchar(30), Дата_рожд date NOT NULL,

CONSTRAINT pk_родственник PRIMARY KEY (код_родств, таб_номер));

Изменение созданных таблиц

ALTER TABLE – оператор изменения определений существующих таблиц. Этот оператор используется для следующих действий:

добавление столбца к таблице,

удаление столбца из таблицы,

добавление ограничений к таблице,

удаление ограничений из таблицы,

добавление к столбцу значение по умолчанию,

удаление из столбца значение по умолчанию,

добавление /удаление ограничений уникальности.

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

Примеры изменения таблиц

1. Назначить по умолчанию сотрудникам Гражданство=1, что соответствует «гражданин Российской Федерации»:

ALTER TABLE Сотрудники ADD DEFAULT 1 FOR Гражданство;

2. Добавить ограничение уникальности значений для столбцов ИНН и СНИЛС таблицы Сотрудники:

Качала Н.М.

Страница 4

ПМИ

БАЗЫ ДАННЫХ

2014

ALTER TABLE Сотрудники ADD CONSTRAINT un_ИНН UNIQUE (ИНН);

ALTER TABLE Сотрудники ADD CONSTRAINT un_СНИЛС UNIQUE (СНИЛС);

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

ALTER TABLE Сотрудники

ADD Дата_заполнения Date DEFAULT GETDATE() NOT NULL;

4. Удалить из таблицы Родственники ограничение целостности внешнего ключа: ALTER TABLE Родственники

DROP CONSTRAINT fk_таб_ном;

5. Добавить ограничения внешнего ключа: обеспечить каскадное обновление табельного номера (таб_номер) в таблицах Сотрудники и Родственники и каскадное удаление связанных записей в этих таблицах

ALTER TABLE Родственники

ADD CONSTRAINT fk_таб_номер

FOREIGN KEY (таб_номер) REFERENCES Сотрудники ON UPDATE CASCADE ON DELETE CASCADE;

Методические указания

1.Запустить среду MS SQL Server Management Studio.

2.Активизировать ранее созданную Вами БД, например, USE AccountPersonal;

3.Одну из родительских таблиц (по согласованию с преподавателем) создать с помощью графического редактора:

в Обозревателе объектов установите курсор на объекте Таблицы БД

AccountPersonal и нажмите ПКМ;

из контекстного меню выберите пункт Создать таблицу – появиться окно определения полей новой таблицы, под которой располагается таблица свойств выделенного поля (рис. 3);

перейдите к созданию полей и настройке их свойств: необходимо указать имя поля, тип данных поля и допустимость NULL значений. Пример экрана определения полей таблицы ОБРАЗОВАНИЕ приведен на рис. 3;

отметьте поле Код_Образования как первичный ключ: выделите поле, а затем на панели инструментов нажмите кнопку с изображением ключа (или воспользуйтесь контекстным меню этого поля) – в таблице определения полей, рядом с полем Код_Образование появиться изображение ключа;

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

в появившемся окне с запросом о сохранении таблицы нажмите кнопку Да;

в окне «Выбор имени» введите имя таблицы и нажмите кнопку ОК.

Качала Н.М.

Страница 5

ПМИ

БАЗЫ ДАННЫХ

2014

В Обозревателе

объектов таблица ОБРАЗОВАНИЕ

отображается как

«dbo.ОБРАЗОВАНИЕ».

 

 

Рис. 3

4.Остальные таблицы создайте с помощью SQL-команд:

нажмите на панели инструментов кнопку Создать запрос;

в правой части окна введите команду создания таблицы с явным объявлением всех ограничений (Constraint);

при определении внешних ключей проанализируйте действия по ссылке для опций ON UPDATE {CASCADE|NO ACTION} и ON DELETE {CASCADE|NO ACTION}

нажмите на панели инструментов кнопку Выполнить;

в случае успешного завершения команды сохраните SQL-код в текстовом файле;

для отображения таблицы в Обозревателе объектов – установите курсор на объект Таблицы и в контекстном меню нажмите пункт Обновить.

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

6.Постройте диаграмму базы данных:

в проектируемой БД из контекстноого меню объекта Диаграммы базы данных

выберите пункт Создать диаграмму базы данных;

в окне с сообщением (рис. 4) нажмите кнопку Да;

в окне Добавление таблицы выделите все таблицы и нажмите кнопку Добавить, а затем закройте это окно;

Качала Н.М.

Страница 6

ПМИ

БАЗЫ ДАННЫХ

2014

Рис. 4

в правой части окна среды разработки Management Studio появиться диаграмма (рис. 5);

сохраните диаграмму.

Рис. 5.

7. Введите в каждую таблицу 5-10 записей: в Обозревателе объектов из контекстного меню таблицы выберите пункт Изменить первые 200 строк.

Ввод данных начните с родительских таблиц.

Контрольные вопросы

1.Как объявляется составной первичный ключ?

2.Укажите различные способы объявления внешнего ключа?

3.Если Вы забыли создать в таблице первичный ключ, то какая структура SQLоператора должна быть при этом?

4.Как изменить тип данных в столбце?

5.Как изменить в определении столбца значение по умолчанию?

6.В каком случае целесообразно использовать пользовательские типы данных?

7.Как добавить новый столбец в таблицу, в которую уже внесены данные?

Качала Н.М.

Страница 7

ПМИ

БАЗЫ ДАННЫХ

2014

Качала Н.М.

Страница 8

ПМИ

 

БАЗЫ ДАННЫХ

2014

 

ПРИЛОЖЕНИЕ 1: Типы данных

 

 

 

 

 

 

 

Категории

Тип данных

Комментарии

 

 

типов данных

 

 

 

 

 

 

 

bigint

(8 байт). 64-разрядное целое число, позволяет хранить числа от –

 

 

 

263 до +263–1

 

 

 

bit

(1 байт). На самом деле первый бит в таблице будет занимать один

 

Целые числа

 

байт, однако следующие семь бит в этой таблице будут храниться

 

 

в том же байте.

 

 

 

 

 

 

 

int

(4 байта). Диапазон значений от –2 147 483 648 до +2 147 483 647

 

 

smallint

(2 байта). Диапазон значений от –32768 до +32767

 

 

 

tinyint

(1 байт). Диапазон значений от 0 до 255

 

 

 

decimal / numeric

Диапазон значений от –1038–1 до +1038–1

 

 

Числа с

money

(8 байт). Денежный формат, диапазон значений

 

 

фиксированн

 

от –263 до +263 с четырьмя знаками после запятой

 

 

ой запятой

smallmoney

(4 байта). Денежный формат, диапазон значений

 

 

 

 

от –214748,3648 до +214748,3647

 

 

Числа с

float

(8 байт). Точность до 15 цифр. Диапазон значений

 

 

 

от –1,79E +308 до +1,79E +308

 

 

плавающей

 

 

 

real

(4 байта). Точность до 7 цифр. Диапазон значений

 

 

запятой

 

 

 

от -3.40E + 38 до 3.40E + 38

 

 

 

 

 

 

 

date

(3 байта). Хранит только дату. Диапазон значений от 1 января

 

 

 

0001 года до 31 декабря 9999 года

 

 

 

datetime

(8 байт). Диапазон значений от 1 января 1753 года до 31 декабря

 

 

 

9999 года с точностью до трех сотых секунды

 

 

 

datetime2

(6-8 байт). Диапазон значений от 1 января 0001 года до 31 декабря

 

Дата и

 

9999 года точность до 0,1 мс.

 

 

время

datetimeoffset

(8-10 байт). Аналогичен типу datetime, но хранит ещё сдвиг

 

 

 

относительно времени UTC (Universal Time Coordinated –

 

 

 

универсальное синхронизированное время)

 

 

 

smalldatetime

(4 байта). Диапазон значений от 1 января 1900 года до 6 июня

 

 

 

2079 года с точностью одна минута

 

 

 

time

(3-5 байт). Хранит только время с точностью до 0,1 мс

 

 

 

char

Строка фиксированной длины. Максимальная длина строки 8000

 

 

 

символов

 

 

 

text

Применялся для хранения больших строк, сейчас рекомендуется

 

Символьные

 

использование varchar(max) вместо text. Оставлен для обратной

 

строки

 

совместимости

 

 

 

varchar

Строка переменной длины. Максимальная длина строки 8000, но

 

 

 

при использовании ключевого слова «max» может хранить до 231

 

 

 

байт.

 

 

 

nchar

Строка фиксированной длины. Максимальная длина строки 4000

 

Символьные

 

символов.

 

 

ntext

Аналогичен типу text. Рекомендуется использовать nvarchar(max).

 

строки в

 

nvarchar

Строка переменной длины. Максимальная длина строки

4000

 

Юникоде

 

 

символов, но при использовании ключевого слова «max» может

 

 

 

 

 

 

хранить до 231 байт

 

 

 

binary

Позволяет хранить двоичные данные размером до 8000 байт.

 

 

 

Image

Использовался для хранения больших объемов данных, сейчас

 

Двоичные

 

рекомендуется использовать varbinary(max). Оставлен для

 

данные

 

обратной совместимости

 

 

 

varbinary

Тип данных переменной длины, позволяет хранить до 8000 байт,

 

 

 

но при использовании ключевого слова «max» до 231 байт

 

 

 

cursor

(1 байт). Тип данных для переменных или выходных параметров

 

Прочие

 

хранимых процедур, которые содержат ссылку на курсор.

 

 

типы

hierarchyid

Используется для представления положения в иерархической

 

данных

 

структуре.

 

 

 

sql_variant

Тип данных, хранящий значения различных типов данных,

 

 

 

 

 

 

 

 

 

Качала Н.М.

 

Страница 9

ПМИ

БАЗЫ ДАННЫХ

2014

 

 

 

 

 

 

 

 

поддерживаемых MS SQL Server.

 

 

 

table

Тип данных, используемый в основном для временного хранения

 

 

 

таблиц и для передачи в качестве параметра в функции.

 

 

 

timestamp

(8 байт). Автоматически генерируемые БД уникальные двоичные

 

 

 

числа в БД при вставке или изменении записи.

 

 

 

uniqueidentifier

(16 байт). Представляет собой GUID (Special Globally Unique

 

 

 

Identifier). Гарантируется уникальность данного значения.

 

 

 

xml

Позволяет хранить XML-данные.

 

Качала Н.М.

Страница 10

Соседние файлы в папке Базы данных