Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_ресторан_5семестр.doc
Скачиваний:
0
Добавлен:
23.01.2026
Размер:
1.76 Mб
Скачать
  1. Создание таблиц и ограничений целостности

    1. Таблица “Staff”

Таблица 1. Структура таблицы «Staff»

Описание структуры таблицы БД

Наименование таблицы БД:

Таблица сотрудников

Имя таблицы:

Staff

Дата разработки:

20.10.2025

Порядковый номер таблицы: 1

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

StaffID

INT

P

PRIMARY KEY

2

Имя

FirstName

nvarchar(50)

NOT NULL

3

Фамилия

LastName

nvarchar(50)

NOT NULL

4

Отчество

Patronymic

nvarchar(50)

5

Должность

Position

nvarchar(30)

NOT NULL, CHECK (Position IN ('Официант', 'Повар', 'Администратор', 'Бармен'))

6

Номер телефона

Phone

nvarchar(20)

NULL

7

Дата найма

HireDate

DATE

DEFAULT GETDATE()

8

Зарплата

Salary

DECIMAL(10,2)

CHECK (Salary >= 0)

9

Статус

IsActive

BIT

NOT NULL, DEFAULT 1

Запрос для создания таблицы сотрудников:

CREATE TABLE rest.Staff (

StaffID INT IDENTITY(1,1) PRIMARY KEY,

FirstName NVARCHAR(50) NOT NULL,

LastName NVARCHAR(50) NOT NULL,

Patronymic NVARCHAR(50),

Position NVARCHAR(30) NOT NULL CHECK (Position IN ('Официант', 'Повар', 'Администратор', 'Бармен')),

Phone NVARCHAR(20),

HireDate DATE DEFAULT GETDATE(),

Salary DECIMAL(10,2) CHECK (Salary >= 0),

IsActive BIT DEFAULT 1

);

GO

Проверим наличие созданной таблицы (рис. 4).

Рисунок 4. Созданная таблица «Staff»

    1. Таблица “Categories”

Таблица 2. Структура таблицы «Categories»

Описание структуры таблицы БД

Наименование таблицы БД:

Таблица категорий меню

Имя таблицы:

Categories

Дата разработки:

20.10.2025

Порядковый номер таблицы: 2

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

CategoryID

INT

P

PRIMARY KEY

2

Название

CategoryName

nvarchar(50)

NOT NULL UNIQUE

3

Описание

Description

nvarchar(255)

NULL

4

Порядок

DisplayOrder

INT

DEFAULT 0

5

Статус

IsActive

BIT

DEFAULT 1

Выполним запрос для создания таблицы категорий меню.

CREATE TABLE rest.Categories (

CategoryID INT IDENTITY(1,1) PRIMARY KEY,

CategoryName NVARCHAR(50) NOT NULL UNIQUE,

Description NVARCHAR(255),

DisplayOrder INT DEFAULT 0,

IsActive BIT DEFAULT 1

);

GO

Таблица успешно создана (рис. 5).

Рисунок 5. Созданная таблица «Categories»

    1. Таблица “Tables”

Таблица 3. Структура таблицы «Tables»

Описание структуры таблицы БД

Наименование таблицы БД:

Таблица столов

Имя таблицы:

Tables

Дата разработки:

20.10.2025

Порядковый номер таблицы: 3

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

TableID

INT

P

PRIMARY KEY

2

Номер стола

TableNumber

nvarchar(10)

U

NOT NULL UNIQUE

3

Вместимость

Capacity

INT

CHECK (Capacity > 0 AND Capacity <= 20)

4

Статус

Status

nvarchar(20)

DEFAULT 'Свободен'

CHECK (Status IN ('Свободен', 'Занят'))

Запрос для создания таблицы столов:

CREATE TABLE rest.Tables (

TableID INT IDENTITY(1,1) PRIMARY KEY,

TableNumber NVARCHAR(10) NOT NULL UNIQUE,

Capacity INT NOT NULL CHECK (Capacity > 0 AND Capacity <= 20),

Status NVARCHAR(20) DEFAULT 'Свободен'

CHECK (Status IN ('Свободен', 'Занят'))

);

GO

Таблица успешно создана (рис. 6).

Рисунок 6. Созданная таблица «Tables»

    1. Таблица “MenuItems”

Таблица 4. Структура таблицы «MenuItems»

Описание структуры таблицы БД

Наименование таблицы БД:

Таблица блюд

Имя таблицы:

MenuItems

Дата разработки:

20.10.2025

Порядковый номер таблицы: 4

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

ItemID

INT

P

PRIMARY KEY

2

Название

ItemName

nvarchar(100)

NOT NULL

3

Описание

Description

nvarchar(255)

NULL

4

Идентификатор категории

CategoryID

INT

F

NOT NULL, FOREIGN KEY REFERENCES Categories(CategoryID)

5

Цена

Price

DECIMAL(10,2)

NOT NULL, CHECK (Price >= 0)

6

Себестоимость

CostPrice

DECIMAL(10,2)

CHECK (CostPrice >= 0)

7

Время приготовления

CookingTime

INT

CHECK (CookingTime >= 0)

8

Доступность

IsAvailable

BIT

DEFAULT 1

9

Запас

Stock

INT

NOT NULL

Запрос для создания таблицы позиций меню:

CREATE TABLE rest.MenuItems (

ItemID INT IDENTITY(1,1) PRIMARY KEY,

ItemName NVARCHAR(100) NOT NULL,

Description NVARCHAR(255),

CategoryID INT NOT NULL,

Price DECIMAL(10,2) NOT NULL CHECK (Price >= 0),

CostPrice DECIMAL(10,2) CHECK (CostPrice >= 0),

CookingTime INT CHECK (CookingTime >= 0),

IsAvailable BIT DEFAULT 1,

Stock INT NOT NULL DEFAULT 0,

FOREIGN KEY (CategoryID) REFERENCES rest.Categories(CategoryID)

);

GO

Таблица успешно создана (рис. 7).

Рисунок 7. Созданная таблица «MenuItems»

    1. Таблица “Orders”

Таблица 5. Структура таблицы «Orders»

Описание структуры таблицы БД

Наименование таблицы БД:

Таблица заказов

Имя таблицы:

Orders

Дата разработки:

20.10.2025

Порядковый номер таблицы: 5

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

OrderID

INT

P

PRIMARY KEY

2

Идентификатор стола

TableID

INT

F

NOT NULL, FOREIGN KEY REFERENCES Tables(TableID)

3

Идентификатор официанта

WaiterID

INT

F

NOT NULL, FOREIGN KEY REFERENCES Staff(StaffID)

4

Дата и время заказа

OrderDateTime

DATETIME2

DEFAULT GETDATE()

5

Статус заказа

Status

nvarchar(20)

DEFAULT 'Принят'

CHECK (Status IN ('Принят', 'Оплачен', 'Ожидает оплаты'))

6

Общая сумма

TotalAmount

DECIMAL(10,2)

DEFAULT 0 CHECK (TotalAmount >= 0)

7

Примечания

Notes

nvarchar(500)

NULL

8

Дата завершения

CompletedDate

DATETIME2

NULL

Запрос для создания таблицы заказов:

CREATE TABLE rest.Orders (

OrderID INT IDENTITY(1,1) PRIMARY KEY,

TableID INT NOT NULL,

WaiterID INT NOT NULL,

OrderDateTime DATETIME2 DEFAULT GETDATE(),

Status NVARCHAR(20) DEFAULT 'Принят'

CHECK (Status IN ('Принят', 'Оплачен', 'Ожидает оплаты')),

TotalAmount DECIMAL(10,2) DEFAULT 0 CHECK (TotalAmount >= 0),

Notes NVARCHAR(500),

CompletedDate DATETIME2,

FOREIGN KEY (TableID) REFERENCES rest.Tables(TableID),

FOREIGN KEY (WaiterID) REFERENCES rest.Staff(StaffID)

);

GO

Таблица успешно создана (рис. 8).

Рисунок 8. Созданная таблица «Orders»

    1. Таблица “OrderItems”

Таблица 6. Структура таблицы «OrderItems»

Описание структуры таблицы БД

Наименование таблицы БД:

Позиции заказа

Имя таблицы:

OrderItems

Дата разработки:

20.10.2025

Порядковый номер таблицы: 6

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

OrderItemID

INT

P

PRIMARY KEY

2

Идентификатор заказа

OrderID

INT

F

NOT NULL, FOREIGN KEY REFERENCES Orders(OrderID) ON DELETE CASCADE

3

Идентификатор блюда

ItemID

INT

F

NOT NULL, FOREIGN KEY REFERENCES MenuItems(ItemID)

4

Количество

Quantity

INT

NOT NULL, DEFAULT 1, CHECK (Quantity > 0)

5

Цена

UnitPrice

DECIMAL(10,2)

NOT NULL, CHECK(UnitPrice >= 0)

6

Стоимость по позиции

ItemTotal

DECIMAL(10,2)

AS (Quantity * UnitPrice)

7

Особые пожелания

SpecialInstructions

nvarchar(200)

NULL

Запрос для создания таблицы позиций заказа:

CREATE TABLE rest.OrderItems (

OrderItemID INT IDENTITY(1,1) PRIMARY KEY,

OrderID INT NOT NULL,

ItemID INT NOT NULL,

Quantity INT NOT NULL DEFAULT 1 CHECK (Quantity > 0),

UnitPrice DECIMAL(10,2) NOT NULL CHECK (UnitPrice >= 0),

ItemTotal AS (Quantity * UnitPrice),

SpecialInstructions NVARCHAR(200),

FOREIGN KEY (OrderID) REFERENCES rest.Orders(OrderID) ON DELETE CASCADE,

FOREIGN KEY (ItemID) REFERENCES rest.MenuItems(ItemID)

);

GO

Таблица успешно создана (рис. 9).

Рисунок 9. Созданная таблица «OrderItems»

    1. Таблица “Payments”

Таблица 7. Структура таблицы «Payments»

Описание структуры таблицы БД

Наименование таблицы БД:

Платежи

Имя таблицы:

Payments

Дата разработки:

20.10.2025

Порядковый номер таблицы: 7

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

PaymentID

INT

P

PRIMARY KEY

2

Идентификатор заказа

OrderID

INT

F

NOT NULL, FOREIGN KEY REFERENCES Orders(OrderID)

3

Способ оплаты

PaymentMethod

NVARCHAR(20)

NOT NULL, CHECK (PaymentMethod IN ('Наличные', 'Карта', 'Онлайн'))

4

Сумма платежа

Amount

DECIMAL(10,2)

NOT NULL,CHECK(Amount> 0)

5

Чаевые

TipAmount

DECIMAL(10,2)

DEFAULT 0 CHECK (TipAmount>=0)

6

Оплата

TotalAmount

AS (Amount + TipAmount)

7

Дата и время платежа

PaymentDateTime

DATETIME2

DEFAULT GETDATE()

Запрос для создания таблицы платежей:

CREATE TABLE rest.Payments (

PaymentID INT IDENTITY(1,1) PRIMARY KEY,

OrderID INT NOT NULL,

PaymentMethod NVARCHAR(20) NOT NULL

CHECK (PaymentMethod IN ('Наличные', 'Карта', 'Онлайн')),

Amount DECIMAL(10,2) NOT NULL CHECK (Amount > 0),

TipAmount DECIMAL(10,2) DEFAULT 0 CHECK (TipAmount >= 0),

TotalAmount AS (Amount + TipAmount) PERSISTED,

PaymentDateTime DATETIME2 NOT NULL DEFAULT GETDATE(),

FOREIGN KEY (OrderID) REFERENCES rest.Orders(OrderID)

);

GO

Таблица успешно создана (рис. 10).

Рисунок 10. Созданная таблица «Payments»

    1. Таблица “WaiterTables”

Таблица 8. Структура таблицы «WaiterTables»

Описание структуры таблицы БД

Наименование таблицы БД:

Таблица привязки официанта к столу

Имя таблицы:

WaiterTables

Дата разработки:

20.10.2025

Порядковый номер таблицы: 8

№ п/п

Наименование поля

Спецификация данных

Имя поля

Тип данных

Ключ

Ограничения целостности

1

Идентификатор

WaiterTableID

INT

P

PRIMARY KEY

2

Официант

StaffID

INT

F

NOT NULL

FOREIGN KEY

REFERENCES Staff(StaffID)

3

Стол

TableID

INT

F

NOT NULL

FOREIGN KEY

REFERENCES Tables(TableID)

4

Начало работы

StartTime

DATETIME

NOT NULL

5

Конец работы

EndTime

DATETIME

NULL

Запрос для создания таблицы официантов и привязанных к ним столов:

CREATE TABLE rest.WaiterTables (

WaiterTableID INT IDENTITY(1,1) PRIMARY KEY,

StaffID INT NOT NULL,

TableID INT NOT NULL,

StartTime DATETIME NOT NULL DEFAULT GETDATE(),

EndTime DATETIME NULL,

FOREIGN KEY (StaffID) REFERENCES rest.Staff(StaffID),

FOREIGN KEY (TableID) REFERENCES rest.Tables(TableID)

);

GO

Таблица успешно создана (рис. 11).

Рисунок 11. Созданная таблица «WaiterTables»