- •Лабораторная работа №1: «Создание и редактирование таблиц с помощью команд языка sql»
- •Задание внешних ключей в среде Microsoft sql Server Management Studio
- •Редактирование таблицы при помощи sql-запросов
- •Ограничение not null
- •Ограничение уникальности
- •Операторы манипулирования данными (dml)
- •Оператор delete
Лабораторная работа №1: «Создание и редактирование таблиц с помощью команд языка sql»
Цели:
Изучение способов определения отношения между таблицами в реляционных базах данных.
Изучение способов установления ограничений на содержимое полей.
Элемент нумерованного списка. Изучение операторов манипулирования данными
Задание внешних ключей в среде Microsoft sql Server Management Studio
Рассмотрим базу данных «Продажа цветов», состоящую из трех таблиц: «Цветок», «Продажа», «Продавец»:
Цветок |
Продажа |
Продавец |
Код цветка |
Код цветка |
Код продавца |
Название цветка |
Дата продажи |
Фамилия |
Сорт цветка |
Цена продажи |
Имя |
Средняя высота |
Код продавца |
Отчество |
Тип листа |
Код продажи |
Разряд |
Цветущий |
|
Оклад |
Дополнительные сведения |
|
Дата приема на работу |
Прежде всего, отметим, что таблица «Продажа» является главной.
За сведениями о цветке она должна обращаться по внешнему ключу к таблице «Цветок» (поле «Код цветка» таблицы «Продажа» ссылается на одноименное поле таблицы «Цветок»).
За сведениями о продавце необходимо по внешнему ключу обращаться к таблице «Продавец» (поле «Код продавца» таблицы «Продажа» ссылается на поле «Код продавца» таблицы «Продавец»).
Первичным ключом таблицы «Продажа», очевидно, должно являться поле «Код продажи». Введем обозначения и выберем следующим образом типы полей таблицы «Продажа».
Продажа (Purchase) |
|||
Код продажи |
code_of_sale |
int |
Первичный ключ |
Код цветка |
code_of_flower |
int |
Ссылка на Flower(code_flower) |
Дата продажи |
date_of_sale |
smalldatetime |
|
Цена продажи |
price_of_sale |
money |
|
Код продавца |
code_of_seller |
int |
Ссылка на Seller(code_seller) |
Задание: Создать таблицу «Продажа» при помощи SQL-запроса:
-- создание таблицы «Продажа»
CREATE TABLE Purchase(
code_of_sale INT PRIMARY KEY NOT NULL, -- первичный ключ
code_flower INT NOT NULL, -- код цветка
date_of_sale SMALLDATETIME NOT NULL, -- дата продажи
price_of_sale MONEY NOT NULL, -- цена
code_of_seller INT NOT NULL -- код продавца
)
В списке таблиц выберите таблицу Purchase, в контекстном меню выберите пункт «Проект». Должно получиться что-то подобное изображенному на рисунке 1.
Рисунок 1
Чтобы посмотреть SQL-код, соответствующий проекту, выберите в контекстном меню пункт «Правка». Видно, что код несколько отличается от введенного нами, особенно в части определения первичного ключа. Вначале создается таблица, затем назначается первичный ключ со множеством дополнительных атрибутов.
USE [books]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Purchase1](
[code_of_sale] [INT] NOT NULL,
[code_flower] [INT] NOT NULL,
[date_of_sale] [smalldatetime] NOT NULL,
[price_of_sale] [money] NOT NULL,
[code_of_seller] [INT] NOT NULL,
PRIMARY KEY CLUSTERED
( [code_of_sale] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Задание: создать таблицы «Цветок» и «Продавец». Ниже предсталваены названия полей и типы данных.
Цветок(Flower) |
|||
Код цветка |
code_flower |
int |
Первичный ключ |
Название цветка |
name_flower |
varchar(40) |
NOT NULL |
Сорт цветка |
kind_flower |
varchar(40) |
|
Средняя высота |
mean_height |
int |
NOT NULL |
Тип листа |
kind_leaf |
varchar(40) |
|
Цветущий |
if_flowering |
bit |
|
Дополнительные сведения |
additional_inf |
varchar(40) |
|
Продавец(Seller) |
|||
Фамилия |
lastname |
varchar(40) |
NOT NULL |
Имя |
firstnam |
varchar(40) |
NOT NULL |
Отчество |
middlename |
varchar(40) |
|
Разряд |
category |
int |
|
Оклад |
pay |
money |
|
Дата прием на работу |
startdate |
smalldatetime |
|
Теперь необходимо задать внешние ключи для таблиц. Выбираем в «Обозревателе объектов» таблицу Purchase, в раскрывающемся списке — «Ключи», в контектстном меню — «Создать первичный ключ…» (рисунок 2).
Рисунок 2
Создадим ссылку по внешнему ключу из таблицы Purchase (поле Code_flower) на таблицу Flower (поле Code_flower):
в раскрывающемся окне (рисунок 3) в ячейке «Идентификация (Имя)» записываем FK_Purchase_Flower
открываем для редактирования пункт «Идентификация таблиц и столбцов» (после щелчка мышью по этому полю справа появляется маленький квадратик с точками; нажав на него, переходим на окно, изображенное на рисунке 4). В качестве таблицы первичного ключа выбираем Flower, поле code_flower, в качестве таблицы внешнего ключа уже выбрана таблица Purchase, надо также здесь выбрать поле code_flower. Не забываем нажать ОК.
После обновления (возможно, потребуется отключиться и заново поключиться к базе данных) среди ключей таблицы Purchase должен появиться только что созданный FK_Purchase_Flower (рисунок 5).
Аналогичным образом создадим ссылку по внешнему ключу из таблицы Purchase (поле Code_seller) на таблицу Seller (поле Code_seller).
Рисунок 3
Рисунок 4
Рисунок 5
После того, как ссылки по внешним ключам созданы, создадим диаграмму для базы данных (в «Обозревателе объектов» выбираем нашу базу данных, ниже «Диаграммы баз данных», и в контекстном меню - «Создать диаграмму базы данных»; в открывшемся окне включаем в диаграмму все таблицы). Должна получиться диаграмма, подобная изображенной на рисунке 6.
Рисунок 6
Задание: Создайте базу данных DB_BOOKS при помощи SQL-запроса
CREATE DATABASE DB_BOOKS
USE DB_BOOKS
CREATE TABLE Authors(
Code_author INT PRIMARY KEY NOT NULL, -- Код автора
Name_author CHAR(30), -- Фамилия автора
Birthday DATETIME -- Дата рождения
)
CREATE TABLE Publishing_house(
Code_publish INT PRIMARY KEY NOT NULL, -- Код издательства
Publish CHAR(30), -- Название издательства
City CHAR(20) -- Город издательства
)
CREATE TABLE Books(
Code_book INT PRIMARY KEY NOT NULL, -- Код книги
Title_book CHAR(40), -- Название книги
Code_author INT FOREIGN KEY REFERENCES Authors(Code_author),
Pages INT,
Code_publish INT FOREIGN KEY REFERENCES Publishing_house(Code_publish)
)
CREATE TABLE Deliveries(
Code_delivery INT PRIMARY KEY NOT NULL, -- Код доставщика
Name_delivery CHAR(30), -- Наименование доставщика
Name_company CHAR(20), -- Наименование компании
Address_company VARCHAR(100), -- Адрес
Phone BIGINT, -- Телефон
INN CHAR(13) -- ИНН
)
CREATE TABLE Purchases(
Code_purchase INT PRIMARY KEY NOT NULL, -- Код продажи
Code_book INT FOREIGN KEY REFERENCES Books(Code_book),
Date_order SMALLDATETIME, -- Дата
Code_delivery INT FOREIGN KEY REFERENCES Deliveries(Code_delivery),
Type_purchase BIT, -- Тип продажи
Cost FLOAT, -- Цена
Amount INT -- Количество
)
Задание: Определите и создайте межтабличные связи и диаграмму для БД BOOKS. Заполните таблицы созданных двух БД не менее 5 записями.
