
- •Методические указания по выполнению лабораторной работы №2
- •Оглавление
- •Введение
- •Краткий обзор различных субд
- •Проектирование бд
- •3.1 Общие сведения о sql
- •3.2 Сведения об операторах sql
- •Insert добавляет новые данные
- •3.3 Сведения о типах данных
- •Методические указания по выполнению практической части лабораторной работы
- •4.1 На что следует обратить внимание перед началом работы
- •4.2 Начало работы с MySql
- •4.3 Рассмотрим создание бд на примере бд для Интернет-продаж
- •4.3.1 Создадим новую бд
- •4.3.2 Создадим таблицу «Интернет-Магазины»
- •4.3.3 Создадим таблицу «Товары»
- •4.3.4 Создадим таблицу «Клиенты»
- •4.3.5 Создадим таблицу «Доставка»
- •4.3.6 Заполним таблицу «Интернет-Магазины»
- •4.3.7 Заполним таблицу «Товары»
- •4.3.8 Заполним таблицу «Клиенты»
- •4.3.9 Заполним таблицу «Заказы»
- •4.3.10 Заполним таблицу «Доставка»
- •4.3.11 Отобразим графически структуру созданной таблицы с помощью программного средства MySql Workbench
- •Варианты заданий для лабораторной работы на тему «Разработка базы данных в субд MySql»
- •Список литературы
4.3.1 Создадим новую бд
IF NOT EXISTS, добавленное к команде CREATE, не позволит создать БД или таблицу, если БД или таблица с таким именем уже существует.
CREATE SCHEMA IF NOT EXISTS `Интернет-продажи`;
Командой USE мы определяем, с какой БД будем работать в данный момент.
USE `Интернет-продажи` ;
4.3.2 Создадим таблицу «Интернет-Магазины»
CREATE TABLE IF NOT EXISTS `Интернет-Магазины` -- Создадим новую таблицу.
(
`Код Магазина` INT UNSIGNED NOT NULL AUTO_INCREMENT , -- Столбец беззнаковый, ненулевой, автозаполняющийся.
`Электронный адрес` VARCHAR(45) NULL , -- Может быть *нулевым*, т.е. не иметь значения вообще.
`Оплата доставки` ENUM('да','нет') NOT NULL , -- Столбец может принимать значение только «да» или «нет».
PRIMARY KEY (`Код Магазина`) -- Объявление первичного ключа.
);
Проверим структуру созданной таблицы
DESC `Интернет-Магазины`; -- DESC сокращенно от DESCRIBE. Можно использовать оба варианта.
4.3.3 Создадим таблицу «Товары»
DROP TABLE IF EXISTS `Товары` ; -- Удалить таблицу «Товары», если такая уже существует.
CREATE TABLE IF NOT EXISTS `Товары`
(
`Код Товара` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`Название товара` VARCHAR(85) NOT NULL ,
`Фирма` VARCHAR(55) NOT NULL ,
`Цена` FLOAT NULL ,
PRIMARY KEY (`Код Товара`)
);
Модифицируем таблицу оператором ALTER.
Добавим индекс. Индекс ускоряет поиск по данному столбцу, за счет создания предварительной сортировки.
ALTER TABLE `Товары` ADD INDEX `ixFirm` (`Фирма` ASC) ; -- ASC означает, что сортировка будет происходить по возрастанию. (DESC – по убыванию). В данном случае это не принципиально.
Проверим правильность структуры таблицы.
DESC `Товары`; -- `` обязательно ставить лишь в случае наличия дополнительных символов, например тире или пробела. Но любые средства разработки, например Workbench ставит их везде по умолчанию.
4.3.4 Создадим таблицу «Клиенты»
DROP TABLE IF EXISTS `Клиенты` ;
CREATE TABLE IF NOT EXISTS `Клиенты`
(
`Код Клиента` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`ФИО клиента` VARCHAR(80) NOT NULL ,
`Телефон клиента` INT NULL , -- В дальнейшем изменим тип на строковый – VARCHAR.
`Адрес клиента` VARCHAR(150) NULL ,
PRIMARY KEY (`Код Клиента`) ,
INDEX `ixClient` (`ФИО клиента` ASC)
);
Модифицируем таблицу. Изменим столбец «Телефон клиента», сменив для него тип данных на строковый. Для номеров телефонов лучше использовать тип данных VARCHAR, т.к. в этом случае удобнее осуществлять поиск. Например, можно будет проводить поиск по трем первым цифрам номера.
Заодно сделаем ввод номера телефона обязательным.
ALTER TABLE Клиенты MODIFY `Телефон клиента` VARCHAR(7) NOT NULL; -- Семь символов для телефона в данном примере достаточно.
Проверим правильность параметров таблицы.
DESC Клиенты;
Создадим таблицу «Заказы» c лишней, ненужной колонкой.
DROP TABLE IF EXISTS `Заказы` ;
CREATE TABLE IF NOT EXISTS `Заказы`
(
`Код Заказа` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`Код магазина` INT UNSIGNED NOT NULL ,
`Код товара` INT UNSIGNED NOT NULL ,
`Количество` INT NOT NULL ,
`Код клиента` INT UNSIGNED NOT NULL ,
`Лишняя колонка` INT NOT NULL, -- Ненужная колонка, которая будет удалена далее оператором ALTER TABLE.
PRIMARY KEY (`Код Заказа`) ,
INDEX `FKShopCod` (`Код магазина` ASC) , -- Создадим индекс по столбцу «Код магазина».
INDEX `FKGoodsCod` (`Код товара` ASC) ,
INDEX `FKClient` (`Код клиента` ASC),
CONSTRAINT `FKShopCod` -- Создадим ограничение на созданный индекс,
FOREIGN KEY (`Код магазина` ) -- превратив его во внешний ключ,
REFERENCES `Интернет-Магазины` (`Код Магазина` ), -- ссылающийся на столбец «Код магазина» из таблицы «Интернет-магазины».
CONSTRAINT `FKGoodsCod`
FOREIGN KEY (`Код товара` )
REFERENCES `Товары` (`Код Товара` ),
CONSTRAINT `FKClient`
FOREIGN KEY (`Код клиента` )
REFERENCES `Клиенты` (`Код Клиента` )
);
Примечание: MySQL 5, движок InnoDB поддерживает ссылочную целостность. Это означает, что задав вышеупомянутый внешний ключ, значениями атрибута «Код магазина» таблицы «Заказы» могут являться только те значения, которые уже существуют в одноименном столбце таблицы «Интернет-магазины». Проще говоря, нельзя сделать заказ по несуществующему в БД магазину. Аналогично два других внешних ключа.
Модифицируем таблицу.
В этот удалим не нужную нам колонку, и создадим другую, содержащую дату заказа.
ALTER TABLE заказы -- Изменим таблицу «Заказы».
ADD COLUMN `Дата заказа` DATE NULL, -- Добавим колонку «Дата заказа» типа DATE, которая не обязательна для заполнения (NULL).
DROP COLUMN `Лишняя колонка`; -- Удалим «лишнюю колонку».
Проверим правильность структуры таблицы.
DESC Заказы;