Нижегородский Государственный Технический Университет им. Р.Е.Алексеева Кафедра «Вычислительные системы и технологии» Лабораторная работа №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