bd_lab3

advertisement
Нижегородский Государственный Технический Университет
им. Р.Е.Алексеева
Кафедра «Вычислительные системы и технологии»
Лабораторная работа №3
MySQL
Выполнили:
студенты группы 10-В
Кульнев Андрей
Сидоренко Олег
Блажнов Илья
Проверил:
Супруненко А.В.
Нижний Новгород
2014 год
1. Спроектируйте базу данных по приведённому заданию. Составить ERдиаграмму.
Таблица goods (товары)
id – идентификатор товара, первичный ключ
category – категория товара
brand – бренд
product – наименование товара
cnt – количество товара на складе
cost – цена за единицу товара
Таблица sellers (продавцы)
id – идентификатор продавца, первичный ключ
name – ФИО продавца
phone - контактный телефон продавца
address – адрес продавца
Таблица orders (заказы)
id – идентификатор заказа, первичный ключ
goodId – идентификатор заказанного товара (внешний ключ к goods.id)
sellerId – идентификатор продавца оформившего продажу товара (внешний ключ к sellers.id)
orderDate – дата оформления заказа
count – количество приобретаемого товара
2
2. Реализация БД в MySQL: используя таблицы InnoDB, внешние ключи.
2.1 Создание базы данных магазина бытовой техники
CREATE DATABASE appliance_store;
2.2 Создание таблицы
USE appliance_store;
CREATE TABLE goods
(id INT PRIMARY KEY, category VARCHAR(45), brand VARCHAR(45), product VARCHAR(50), cnt
TINYINT, cost INT)
ENGINE=InnoDB CHARSET = cp1251;
CREATE TABLE sellers
(id INT PRIMARY KEY, name VARCHAR(45), address VARCHAR(255), phone VARCHAR(11))
ENGINE=InnoDB CHARSET = cp1251;
CREATE TABLE orders
(id INT PRIMARY KEY, goodId INT, sellerId INT, orderDate DATETIME, count TINYINT,
FOREIGN KEY (goodId) REFERENCES goods(Id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (sellerId) REFERENCES sellers(Id)
ON DELETE RESTRICT
ON UPDATE CASCADE
)
ENGINE=InnoDB CHARSET = cp1251;
3
3. Заполнение таблицы данными.
USE appliance_store;
INSERT INTO goods
(id, category, brand, product, cnt, cost)
VALUES
(1,'Стиральные машины','INDESIT','WISE 10 CSI',6, 8499),
(2,'Стиральные машины','INDESIT','IWSC 5085 SL',4, 9509),
(3,'Стиральные машины','BOSCH','WLG 20060 OE',4, 12359),
(4,'Стиральные машины','BOSCH','WAE 20444 OE',3, 16719),
(5,'Холодильники','INDESIT','BIA 20 X',5, 16999),
(6,'Холодильники','SIEMENS','KG39EAI20R',4, 31989),
(7,'Холодильники','ELECTROLUX','EN3600AOX',1, 26689),
(8,'Ноутбуки','LENOVO','IdeaPad Z580',10, 24990),
(9,'Ноутбуки','LENOVO','ThinkPad X1 Carbon',5, 46079),
(10,'Телевизоры','LG','42LN613V',5, 22989),
(11,'Телевизоры','LG','42LA741V',2, 32999),
(12,'Телевизоры','SAMSUNG','UE46F5020AK',4, 24999),
(13,'Телевизоры','SAMSUNG','UE50F5020AK',1, 35989);
INSERT INTO sellers
(id, name, address, phone)
VALUES
(1, 'Белов Дмитрий Викторович', 'г. Нижний Новгород ул. Пролетарская д. 7 кв. 29', '89073552152'),
(2, 'Панов Антон Васильевич', 'г. Москва ул. Новикова д. 5 кв. 21', '89013552632'),
(3, 'Котов Александр Петрович', 'г. Владимир ул. Ленина д. 12 кв. 2', '89083558374'),
(4, 'Слёзкин Константин Андреевич', 'г. Нижний Новгород ул. Рабочая д. 5 кв. 29', '89023536152');
INSERT INTO orders
(id, goodId, sellerId, orderDate, count)
VALUES
(1,1,1,'2014-03-01',2),
(2,12,1,'2014-02-26',1),
(3,4,1,'2014-02-27',3),
(4,2,2,'2014-02-20',1),
(5,5,2,'2014-02-10',1),
(6,12,3,'2014-03-01',2),
(7,7,4,'2014-03-01',3),
(8,1,3,'2014-02-20',2),
(9,11,2,'2014-03-01',1),
(10,10,1,'2014-02-19',1),
(11,9,4,'2014-02-24',4);
Выполним проверку целостности данных, изменив идентификатор товара в таблице goods. В
результате должен измениться и идентификатор товара в таблице orders.
goods
orders
4
4. Создание представлений для запросов выборки
4.1 Список всех брендов с количеством товаров по категориям;
CREATE OR REPLACE VIEW view_1 AS
SELECT brand, category, count(goods.id)
FROM goods
GROUP BY category, brand
ORDER BY category
4.2 Список всех продавцов с количеством сделанных каждым из них заказов за прошлую
неделю
CREATE OR REPLACE VIEW view_2 AS
SELECT sellers.name,count(orders.id)
FROM sellers,orders
WHERE orders.sellerId=sellers.id AND date(orders.orderDate)>date_sub(now(), INTERVAL 8 DAY)
GROUP BY sellers.id
UNION
SELECT ' ', NULL
UNION
SELECT now(), NULL
4.3 Вывести самых неуспешных продавцов — оформивших наименьшее число заказов
CREATE OR REPLACE VIEW view_3 AS
SELECT sellers.name, count(orders.id) AS cnt
FROM sellers,orders
WHERE orders.sellerId=sellers.id
GROUP BY orders.sellerId
HAVING count(orders.id)<=ALL(
SELECT count(orders.id)
FROM orders
GROUP BY orders.sellerId
)
5
Download