Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИО.ЛР.2.SQL.Работа со структурой БД.doc
Скачиваний:
0
Добавлен:
04.01.2020
Размер:
566.27 Кб
Скачать

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 Заказы;