- •Аннотация
- •Содержание
- •Введение
- •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
- •Процедура восстановления
- •Заключение
- •Список использованных источников
1.2. Структура идз
1) Краткое описание предметной области
2) Проектирование БД
3) Создание БД
4) Создание таблиц и ограничений целостности
5) Заполнение таблиц данными
6) Разработка объектов промежуточного слоя (представлений, хранимых процедур, UDF)
7) Разработка триггеров
8) Разработка стратегии резервного копирования
Описание предметной области
В данной работе объектом рассмотрения является предприятие общественного питания - ресторан, предоставляющий услуги по организации обслуживания посетителей.
База данных хранит сведения о сотрудниках: идентификатор сотрудника, фамилию, имя, отчество, должность, контактный телефон, дату приема на работу, заработную плату, статус работы; сведения о категориях меню: идентификатор категории, название категории, описание, порядок отображения, статус активности; сведения о столах: идентификатор стола, номер стола, вместимость, текущий статус; сведения о блюдах и напитках: идентификатор блюда, название, описание, категорию, цену для гостя, себестоимость, время приготовления, доступность для заказа; сведения о заказах: идентификатор заказа, стол, обслуживающий официант, дата и время создания, статус заказа, общая сумма, дата завершения; сведения о позициях заказа: идентификатор позиции, заказ, блюдо, количество, цена на момент заказа, сумма по позиции; сведения о платежах: идентификатор платежа, заказ, способ оплаты, дата и время платежа, сумма.
База данных проектировалась при условии, что:
Официанты принимают у гостей заказы, один официант может обслужить несколько столов и один стол может быть обслужен несколькими официантами;
Блюда относятся к определенным категориям меню. Каждое блюдо должно быть отнесено к одной из категорий (завтраки, салаты, основные блюда, напитки, десерты) для структурирования меню;
Заказы проходят цикл: от принятия до окончательной оплаты;
Один заказ может содержать несколько позиций: гость может заказать несколько различных блюд и напитков в рамках одного заказа;
Оплата может производиться различными способами - наличными средствами, банковской картой или через онлайн-платежи;
Проектирование базы данных
На рис. 1 представлена диаграмма «Сущность-связь»
Рисунок 1. Диаграмма «Сущность-связь»
Создание бАзы данных
Запрос для создания БД с названием «DataBase_Restaurant»:
CREATE DATABASE DataBase_Restaurant
ON PRIMARY
(
NAME = N'Restaurant_MainFile',
FILENAME = N'C:\SQLData\rs_datafile_983hf9hdn12.mdf',
SIZE = 50MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10MB
)
LOG ON
(
NAME = N'Restaurant_LogFile',
FILENAME = N'D:\SQLLogs\rs_logfile_55gf92bf2.ldf',
SIZE = 25MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 5MB
)
COLLATE Cyrillic_General_CI_AS;
GO
Блок ON PRIMARY определяет главный файл, хранящий все данные. Начальный размер файла - 50 МБ. Блок LOG ON содержит файл журнала транзакций, который хранится на другом диске. Начальный размер файла - 25 МБ. Также есть настройка в виде Cyrillic_General_CI_AS для работы с русским языком, при этом регистр букв не учитывается.
Выполним запрос для создания БД (рис. 2).
Рисунок 2. Выполнение запроса для создания БД
Создадим новую схему «rest» для последующей работы с таблицами:
USE DataBase_Restaurant;
GO
CREATE SCHEMA rest AUTHORIZATION dbo;
GO
Выполним запрос для создания схемы(рис. 3).
Рисунок 3. Выполнение запроса для создания схемы
