Рассмотрим базу данных «Продажа цветов», состоящую из трех таблиц: «Цветок», «Продажа», «Продавец»:
Цветок | Продажа | Продавец |
Код цветка | Код цветка | Код продавца |
Название цветка | Дата продажи | Фамилия |
Сорт цветка | Цена продажи | Имя |
Средняя высота | Код продавца | Отчество |
Тип листа | Код продажи | Разряд |
Цветущий | Оклад | |
Дополнительные сведения | Дата приема на работу |
Прежде всего, отметим, что таблица «Продажа» является главной.
За сведениями о цветке она должна обращаться по внешнему ключу к таблице «Цветок» (поле «Код цветка» таблицы «Продажа» ссылается на одноименное поле таблицы «Цветок»).
За сведениями о продавце необходимо по внешнему ключу обращаться к таблице «Продавец» (поле «Код продавца» таблицы «Продажа» ссылается на поле «Код продавца» таблицы «Продавец»).
Первичным ключом таблицы «Продажа», очевидно, должно являться поле «Код продажи». Введем обозначения и выберем следующим образом типы полей таблицы «Продажа».
Продажа (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-запроса:
-- созданиетаблицы «Продажа»
CREATETABLE Purchase(
code_of_sale INTPRIMARYKEYNOTNULL, -- первичныйключ
code_flower INTNOTNULL, -- кодцветка
date_of_sale SMALLDATETIME NOTNULL, -- датапродажи
price_of_sale MONEY NOTNULL, -- цена
code_of_seller INTNOTNULL -- кодпродавца
)
В списке таблиц выберите таблицу Purchase, в контекстном меню выберите пункт «Проект». Должно получиться что-то подобное изображенному на рисунке 1.
Рисунок 1
Чтобы посмотреть SQL-код, соответствующий проекту, выберите в контекстном меню пункт «Правка». Видно, что код несколько отличается от введенного нами, особенно в части определения первичного ключа. Вначале создается таблица, затем назначается первичный ключ со множеством дополнительных атрибутов.
USE[books]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATETABLE[dbo].[Purchase1](
[code_of_sale][INT]NOTNULL,
[code_flower][INT]NOTNULL,
[date_of_sale][smalldatetime]NOTNULL,
[price_of_sale][money]NOTNULL,
[code_of_seller][INT]NOTNULL,
PRIMARYKEY 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-запроса
CREATEDATABASE DB_BOOKS USE DB_BOOKSCREATETABLE Authors(Code_author INTPRIMARYKEYNOTNULL, -- Кодавтора Name_author CHAR(30), -- Фамилияавтора Birthday DATETIME -- Датарождения) CREATETABLE Publishing_house(Code_publish INTPRIMARYKEYNOTNULL, -- Кодиздательства Publish CHAR(30), -- Название издательства City CHAR(20) -- Город издательства) CREATETABLE Books(Code_book INTPRIMARYKEYNOTNULL, -- Кодкниги Title_book CHAR(40), -- Названиекниги Code_author INTFOREIGNKEYREFERENCES Authors(Code_author), Pages INT, Code_publish INTFOREIGNKEYREFERENCES Publishing_house(Code_publish)) CREATETABLE Deliveries(Code_delivery INTPRIMARYKEYNOTNULL, -- Коддоставщика Name_delivery CHAR(30), -- Наименованиедоставщика Name_company CHAR(20), -- Наименованиекомпании Address_company VARCHAR(100), -- Адрес Phone BIGINT, -- Телефон INN CHAR(13) -- ИНН) CREATETABLE Purchases(Code_purchase INTPRIMARYKEYNOTNULL, -- Кодпродажи Code_book INTFOREIGNKEYREFERENCES Books(Code_book), Date_order SMALLDATETIME, -- Дата Code_delivery INTFOREIGNKEYREFERENCES Deliveries(Code_delivery), Type_purchase BIT, -- Типпродажи Cost FLOAT, -- Цена Amount INT -- Количество)
Задание: Определите и создайтемежтабличные связи идиаграмму для БД BOOKS.Заполните таблицы созданных двух БД не менее 5 записями.