Практическое занятие № 2 (часть 1)

 

Тема: "Работа с таблицами в разных СУБД"

Цель работы: получить практические навыки по созданию и обработке таблиц с помощью команд языка SQL и графической утилиты в СУБД SQL Server

 

Ход работы

 

Создайте базу данных Sklad

 

Указания: запустите утилиту "Microsoft SQL Server Management Studio", появится окно регистрации, вы котором введите данные: Параметры подлинности = Проверка подлинности SQL Server, Имя пользователя = sa, пароль=111 (у вас может быть другой пароль).

В окне утилиты  "Microsoft SQL Server Management Studio" в левой части вызовите контекстное меню папки "Базы данных" и выберите команду "Создать базу данных".

В результате в правой части откроется окно настройки параметров БД. Вверху введите имя БД "Sklad" и щелкните на кнопке ОК. Если вы все выполнили правильно, то в папке "Базы данных" отобразится значок созданной БД.

 

С помощью команды Transact-SQL в базе данных Sklad создайте таблицы в соответствии со схемой:

Таблица Tovar имеет следующие поля:

 

id_tovar - "Идентификатор товара" - ключевое, счетчик;

kod - «Код товара» – текстовое, уникальное, обязательное;

imya - «Наименование» – текстовое, обязательное;

proizv - «Производитель» – текстовое, обязательное;

dataizgot - «Дата изготовления» – дата/время, не обязательное;

edizm - «Единица измерения» – текстовое, обязательное, значение по умолчанию «шт»;

cenaopt - «Цена оптовая» – вещественное числовое с двумя знаками после запятой, обязательное, ограничение на значение от 0 до 10000.

 

Все поля кроме «Дата изготовления» обязательны для заполнения.

 

Указания:  для создания запроса щелкните на кнопке "Создать запрос" и в правой части окна введите команду:

 

use sklad --подключаем нужную БД

create table tovar

(id_tovar int primary key identity(1,1),

 kod varchar(5) not null unique,

 imya varchar(20) not null,

 proizv varchar(20) not null,

 dataizgot datetime,

 edizm varchar(5) not null default ('шт'),

 cenaopt decimal(6,2) not null check (cenaopt>=0 and cenaopt <=10000))

 

Для запуска команды щелкните на кнопке "Выполнить" . Если все сделано правильно, то в дереве объектов появится значок вашей таблицы (откройте папку вашей БД, а затем папку "Таблицы").

 

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

 

Указания: в контекстном меню таблицы  выберите команду "Изменить первые 200 строк" и заполните таблицу данными (поле id_tovar не заполнять, так как это поле-счетчик).

 

С помощью команды Transact-SQL в базе данных Sklad создайте таблицу с именем Uchet для учета поступлений и продаж товаров по датам. Таблица имеет следующие поля:

 

id_uchet - «Идентификатор учета» – ключевое, счетчик;

id_tovar - «Идентификатор товара» – целое, обязательное, внешний ключ для связывания с таблицей Tovar. Каскадное удаление данных;

data - «Дата» – дата/время, обязательное, по умолчанию заполнение текущей датой (функция getdate());

prihod - «Приход» – целые числа, не обязательное, значение по умолчанию 0, ограничение не более 500;

rashod - «Расход» – целые числа, не обязательное, значение по умолчанию 0, ограничение не более 250.

 

Указания: удалите текст предыдущего запроса и введите команду:

 

use sklad

create table uchet

(id_uchet int primary key identity (1,1),

 id_tovar int not null,

 data datetime not null default (getdate()),

 prihod int default (0) check (prihod<=500),

 rashod int default (0) check (rashod<=250),

 constraint TovarUchet foreign key(id_tovar) references tovar(id_tovar) on delete cascade) --поле для связывания

 

Выполните команду. Если все сделано правильно, то в дереве объектов появится значок вашей таблицы.

 

Откройте созданную таблицу и заполните ее 10 записями (по две записи для каждого товара из главной таблицы).

 

Указания:  таблица связана с главной таблицей по полю id_tovar поэтому при вводе кодов можно брать только такие значения, которые имеются в главной таблице. В контекстном меню таблицы  выберите команду "Изменить первые 200 строк" и заполните таблицу данными. Поле-счетчик id_uchet не заполнять. Поле id_tovar заполнять только значениями, которые имеются в таком же поле в таблице Tovar.

 

Проверьте работу каскадного удаления данных.

 

Указания: откройте таблицу Tovar, удалите любой товар. Для этого щелкните правой кнопкой на сером квадрате слева от нужной записи и в контекстном меню выберите команду "Удалить" . Откройте таблицу Uchet и убедитесь, что в таблице произошло каскадное удаление подчиненных записей.

 

C помощью команды Transact SQL добавьте в таблицу Tovar вычисляемое поле «Скидка» как 3% от цены.

 

Указания:  для добавления в таблицу Tovar поля «Дата использования» удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

add

skidka as cena*0.03

 

Выполните эту команду.

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

 

C помощью команды Transact SQL в таблице Tovar для поля imya измените длину в символах до 50 (изначально задано 20).

 

Указания: удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

alter column imya varchar(50) not null

 

C помощью команды Transact SQL добавьте в таблицу Tovar поле «Дата употребления» типа дата/время, не обязательное для заполнения. Откройте таблицу и заполните это поле для всех товаров.

 

Указания:  для добавления в таблицу Tovar поля «Дата употребления» удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

add

dataupotr datetime

 

Выполните эту команду.

Откройте таблицу Tovar и для всех товаров заполните это поле данными.

 

С помощью команд Transact SQL для добавленного поля dataupotr задайте ограничение not null

 

Указания:  поле dataupotr мы добавили в предыдущей команде. Если вы не заполнили это поле для каждой записи, то рассматриваемая ниже команда не выполнится. Если мы хотим, чтобы поле dataupotr было обязательным для заполнения, нельзя, чтобы в нем были пустые значения. Поэтому еще раз убедитесь, что данное поле заполнено для каждой записи.

Удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

alter column dataupotr datetime not null

 

С помощью команд Transact SQL для поля imya таблицы Tovar добавьте ограничение unique

 

Указания:  для выполнения команды необходимо, чтобы в поле imya не было одинаковых значений. Иначе условие уникальности не выполняется и ограничение не будет создано.

Удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

add constraint Uimya unique(imya) --создаем ограничение с именем Uimya для поля imya

 

С помощью команд Transact SQL удалите для поля imya ограничение unique

 

Указания:  удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

drop constraint Uimya --удаляем ограничение с именем Uimya

 

С помощью команд Transact SQL для поля proizv таблицы Tovar добавьте ограничение default ('отечественный')

 

Указания:  удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

add constraint Dproisv default('отечественный') for proizv --создаем ограничение с именем Dproizv для поля proizv

 

С помощью команд Transact SQL удалите для поля proizv ограничение default

 

Указания:  удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

drop constraint Dproizv --удаляем ограничение с именем Dproizv

 

С помощью команды Transact SQL удалите из таблицы добавленное поле dataupotr. Откройте таблицы и убедитесь в правильности выполненных операций.

 

Указания: для удаления из таблицы Tovar поля dataupotr удалите текст предыдущего запроса и введите команду:

 

use sklad

alter table tovar

drop column dataupotr

 

Откройте таблицу Tovar и убедитесь, что поле удалено.

 

С помощью команды Transact SQL выполните удаление обеих таблиц из базы данных Sklad.

 

Указания: для удаления таблицы Tovar в начале нужно удалить подчиненную таблицу Uchet. Введите команду:

 

use sklad

drop table uchet

drop table tovar

 

Использование утилиты "Microsoft SQL Server Management Studio"

 

Повторите все выполненные ранее пункты с помощью утилиты.

 

Указания: для создания таблицы в дереве объектов раскройте папку БД sklad и в контекстном меню папки "Таблицы" выберите команду "Создать таблицу".

В появившемся окне введите параметры всех полей: имя поля, тип, размер (для текстовых полей), если в поле не обязательное, то отметьте флажок в столбце "Разрешить значения Null".

 

 

Для создания  ключевого поля встаньте на поле курсором и щелкните на кнопке "Задать первичный ключ".

Для задания значения по умолчанию для поля встаньте на поле и в нижней части окна в поле "Значение по умолчанию" введите нужное значение.

 

Для задания ограничений для полей таблицы щелкните на кнопке панели инструментов "Управление проверочными ограничениями". В окне щелкните на кнопке Добавить,в поле "Выражение" введите текст ограничения, в поле "(Имя)" введите имя ограничения.

 

После создания таблицы щелкните на кнопке Сохранить и введите имя таблицы Tovat.

 

Для открытия таблицы в ее контекстном меню выберите команду "Изменить первые 200 строк". Введите 5 произвольных записей.

 

Для создания таблицы Uchet используйте тот же подход, который описан Ранее.

Для создания счетчика встаньте на нужное поле и справа в окне свойств таблицы в свойстве "Столбец идентификаторов" укажите поле id_uchet (если окно свойств не отображается, то нажмите F4) .

 

 

Сохраните таблицу под именем Uchet.

 

Для создания внешнего ключа и связи с главной таблицей вызовите контекстное меню папки "Диаграммы баз данных" и выберите команду ""Создать диаграмму баз данных". В новом окне выберите нужные таблицы. Перетащите ключевое поле главной таблицы на внешний ключ подчиненной таблицы.  Появится окно, в котором еще раз проверьте поля, по которым устанавливается связь и щелкните на кнопке ОК. В поле "Спецификация INSERT и UPDATE" задайте параметры каскадного удаления данных.

 

При заполнении таблицы Uchet учтите, что поле «Идентификатор товара» можно заполнять только теми значениями, которые имеются в этом же поле в таблице Tovar.

 

Для добавления в таблицу Tovar нового вычисляемого поля в контекстном меню таблицы выберите команду Проект, введите имя нового поля и в низу окна в поле "Спецификация вычисляемого столбца - Формула" укажите формулу для расчета.

 

 

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

 

Для удаления поля в контекстном меню таблицы выберите команду Проект. Щелкните правой кнопкой на сером квадрате слева от имени ненужного поля и в контекстном меню выберите команду "Удалить столбец".

 

Для удаления таблицы в ее контекстном меню выберите команду Удалить. При этом вначале нужно удалить подчиненную таблицу Uchet, а затем главную таблицу Tovar.

 

Работа с индексами

 

Для таблицы Tovar создайте индексы по полям "imya" и "proizv"  с сортировкой по возрастанию и индекс по полю "dataizgot" с  сортировкой по убыванию.

 

Для таблицы Uchet создайте индекс по полю "data" с сортировкой по возрастанию.

 

Удалите созданные индексы.

 

Для таблицы Tovar создайте уникальный индексы по полю "imya".

 

Удалите уникальный индекс.

 

Указания: для создания индексов для таблицы Tovar введите команды:

 

--по полю imya

create index iimya

on tovar (imya)

 

--по полю proizv

create index iproizv

on tovar (proizv)

 

--по полю dataizgot по убыванию

create index idataizgot

on tovar(dataizgot DESC)

 

Для создания индекса для таблицы Uchet введите команду:

 

--по полю data

create index idata

on uchet(data)

 

Для просмотра информации об имеющихся индексах в контекстном меню таблицы Tovar выберите команду "Проект" для открытия структуры таблицы. Щелкните на кнопку "Управление индексами и ключами" и увидите список индексов. В этом окне можно создавать и удалять индексы.

 

Для удаления индексов введите команды:

 

drop index iimya on tovar

 

drop index iproizv on tovar

 

drop index idata on uchet

 

Для создания уникального индекса введите команду:

 

create unique index iimya

on tovar (imya)

 

Откройте таблицу Tovar для редактирования и попробуйте ввести в  поле imya два одинаковых значения (это у вас не получится).

 

Для удаления уникального индекса введите команду:

 

drop index iimya on tovar

 

Повторите действия по созданию и удалению индексов с помощью утилиты реда SQL Server Management Studio".

 

Указания: в контекстном меню таблицы Tovat выберите команду "Проект" для открытия структуры таблицы. Для создания индекса щелкните на кнопку "Управление индексами и ключами"

 

В появившемся окне щелкните на кнопке "Добавить", в поле "Столбцы" укажите нужные поля таблицы и направление сортировки для каждого из полей, в поле "Уникальный" признак уникальности индексов, в поле "Имя" укажите имя индекса, .

 

 

 После задания параметров закройте окно с индексами и сохраните таблицу.

Для удаления индекса откройте окно с индексами, выберите не нужный и щелкните на кнопке "Удалить". Закройте окно и сохраните таблицу.