- •Аннотация
- •Содержание
- •Введение
- •1. Формулировка задания
- •1.1. Задание
- •1.2. Структура идз
- •Описание предметной области
- •Проектирование базы данных
- •Создание бАзы данных
- •Создание таблиц и ограничений целостности
- •Заполнение таблиц данными
- •Заполнение таблицы «Staff» (Сотрудники)
- •Заполнение таблицы «Tables» (Столы):
- •Заполнение таблицы «Categories» (Категории)
- •Заполнение таблицы «MenuItems» (Меню)
- •Заполнение таблицы «Orders» (Заказы)
- •Заполнение таблицы «OrderItems» (Позиции заказа)
- •Заполнение таблицы «Payments» (Платежи)
- •Разработка объектов промежуточного слоя
- •Хранимые процедуры
- •Процедура «CreateOrder» для создания нового заказа
- •Процедура «AddItemToOrder» для добавления позиций в заказ
- •Процедура «SetOrderWaitingForPayment» для перевода заказа в статус ожидания оплаты
- •Процедура «PayOrder» для оплаты заказа
- •Представления
- •Представление «ActiveOrders» для просмотра активных заказов
- •Представление «WaiterDailyRevenue», показывающее выручку, принесённую каждым из официантов
- •Представление «DailyOrderStats», показывающее по дням заработок ресторана, оплаченные заказы, средний чек
- •Представление «OrdersByWaiterStatus», показывающее количество заказов, обслуженных каждым из официантов по статусам заказа
- •Функции
- •Скалярная функция «OrderTotal» для подсчета стоимости заказа
- •Табличная функция «GetOrdersWithTotal», которая возвращает блюда по заказам
- •Табличная функция «GetMenuItemsByAvailability», показывающая оставшиеся блюда
- •Табличная функция «GetLastOrderItems» возвращающая последние блюда в заказах
- •Скалярная функция «MenuItemSalesPaid» для подсчета проданных позиций блюд в день
- •Разработка триггеров
- •Триггер «InsertWaiterTable» для вставки в таблицу WaiterTables, когда происходит заказ
- •Триггер «CheckStock», уменьшающий количество блюд в MenuItems и предупреждающий, если блюда закончились
- •Триггер «PreventWaitingPaymentWithoutItems», проверяющий пустой заказ
- •Разработка стратегии резервного копирования и восстановления
- •Процедура полного резервного копирования
- •Процедура дифференциального резервного копирования
- •Процедура резервного копирования журнала транзакций
- •Процедура тестирования всех бэкапов
- •Автоматизация через sql server agent
- •Процедура восстановления
- •Заключение
- •Список использованных источников
Заполнение таблиц данными
Заполнение таблицы «Staff» (Сотрудники)
Запрос для внесения данных в таблицу:
INSERT INTO rest.Staff (FirstName, LastName, Patronymic, Position, Phone, Salary)
VALUES
('Иван', 'Сидоров', 'Александрович', 'Официант', '+79161234501', 50000),
('Мария', 'Петрова', 'Сергеевна', 'Официант', '+79161234502', 52000),
('Алексей', 'Смирнов', 'Алексеевич', 'Официант', '+79161234503', 60000),
('Елена', 'Кузнецова', 'Игоревна', 'Официант', '+79161234504', 55000),
('Дмитрий', 'Соколов', 'Петрович', 'Бармен', '+79161234505', 48000),
('Наталья', 'Морозова', 'Викторовна', 'Администратор', '+79161234506', 51000);
Проверим выполнение запроса (рис. 12).
Рисунок 12. Данные в таблице сотрудников
Заполнение таблицы «Tables» (Столы):
Запрос для внесения данных в таблицу:
INSERT INTO rest.Tables (TableNumber, Capacity, Status)
VALUES
('T1', 2, 'Свободен'),
('T2', 4, 'Свободен'),
('T3', 6, 'Свободен'),
('T4', 2, 'Свободен'),
('T5', 4, 'Свободен');
Проверим выполнение запроса (рис. 13).
Рисунок 13. Данные в таблице столов
Заполнение таблицы «Categories» (Категории)
Запрос для внесения данных в таблицу:
INSERT INTO rest.Categories (CategoryName, Description)
VALUES
('Салаты', 'Свежие овощные и мясные салаты'),
('Закуски', 'Легкие блюда к напиткам'),
('Горячие блюда', 'Мясные, рыбные и вегетарианские блюда'),
('Десерты', 'Сладкие блюда'),
('Напитки', 'Алкогольные и безалкогольные напитки');
Проверим выполнение запроса (рис. 14).
Рисунок 14. Данные в таблице категорий меню
Заполнение таблицы «MenuItems» (Меню)
Запрос для внесения данных в таблицу:
INSERT INTO rest.MenuItems (ItemName, Description, CategoryID, Price, CostPrice, CookingTime, IsAvailable, Stock)
VALUES
('Цезарь с курицей', 'Подается с соусом', 1, 320, 150, 15,1,8),
('Греческий салат', 'Салат с фетой и оливками', 1, 300, 130, 10,1,8),
('Брускетта', 'Итальянская закуска с помидорами', 2, 200, 80, 10,1,8),
('Карпаччо', 'Мясное карпаччо с соусом', 2, 350, 150, 15,1,8),
('Стейк рибай', 'Мраморный стейк', 3, 1200, 700, 25,1,8),
('Курица гриль', 'Курица на гриле с травами', 3, 650, 350, 30,1,8),
('Рыба на пару', 'Филе рыбы с овощами на пару', 3, 700, 400, 20,1,8),
('Медовик', 'Слоёный медовый торт', 4, 350, 150, 0,1,8),
('Шоколадный фондан', 'Теплый десерт', 4, 400, 200, 10,1,8),
('Капучино', 'Можно добавить сироп', 5, 180, 50, 5,1,8),
('Чай черный', 'Черный чай с лимоном', 5, 100, 20, 5, 1 ,8),
('Апельсиновый сок', 'Свежевыжатый сок', 5, 150, 50, 0, 1 ,8);
Проверим выполнение запроса (рис. 15).
Рисунок 15. Данные в таблице меню
Заполнение таблицы «Orders» (Заказы)
Запрос для внесения данных в таблицу:
INSERT INTO rest.Orders (TableID, WaiterID, Status, Notes)
VALUES
(1, 1, 'Принят', NULL),
(2, 2, 'Принят', NULL),
(3, 1, 'Принят', NULL),
(4, 3, 'Принят', NULL),
(5, 4, 'Принят', NULL);
Проверим выполнение запроса (рис. 16).
Рисунок 16. Данные в таблице заказов
