Связи между сущностями:
• Каждый клиент может купить товары, если они есть на складе в любом количестве и в любом сочетании.
• Каждый клиент может быть "постоянным", т.е. при любой покупке он получает скидку на стоимость сделки 5%.
• Каждому заказу соответствует суммарная стоимость, в зависимости от которой вычисляется дополнительная скидка.
Исполнители:
Сущность |
Описание |
Клиент магазина |
Каждый покупатель, который зарегистрировался в нашем интернет-магазине |
Работник магазина |
Работник магазина фиксирующий данные о пользователях и сделках. |
Действия:
Название |
Описание |
Покупка товара |
Покупка товара |
Запрос о скидке |
Клиент узнает о наличии персональной скидки |
Запрос наличия на складе |
Клиент или работник магазина узнают о наличии неоторого товара на складе |
Ввод личных данных |
Заполнение пользователем личных данных |
Запрос данных пользователя |
Запрос пользовательских данных работником магазина |
Фиксирование данных от сделки |
Фиксирование работником даннных о проведенной сделке |
Поиск информации |
Поиск информации о приобретаемых товарах по клиенту, и о клиентах по товару и т.п. |
Были определены следующие домены:
Название |
Описание |
Тип |
CustomerID |
Номер клиента |
int |
PhoneNum |
Телефон клиента |
int |
Почтовый адрес |
varchar(50) |
|
Name |
Имя |
varchar(30) |
Surname |
Фамилия |
varchar(40) |
Address |
Адрес |
varchar(60) |
IsFriend |
Постоянный ли клиент |
bit |
PurchasementID |
Номер сделки |
int |
PurchasementDate |
Дата сделки |
datetime |
DeliveryDate |
Дата доставки |
datetime |
BeginningCost |
Начальная цена |
int |
FinalCost |
Цена с учетом скидок |
int |
PurchProdID |
Номер промежуточной сделки |
int |
Quantity |
Количество этого вида товара в промежуточной сделке |
int |
TotalCost |
Цена всех единиц товара в промежуточной сделке |
int |
ShopID |
Номер магазина |
int |
ShopName |
Название магазина |
varchar(50) |
ProductID |
Номер товара |
int |
Quantity |
Количество товара на складе |
int |
Price |
Цена единицы товара |
int |
ProductName |
Название товара |
varchar(50) |
Структуры базы данных:
Концептуальная ER-диаграмма
Физическая ER-диаграмма
Структура базы данных в виде полного описания всех таблиц с их полями и командами их создания:
Таблица Клиентов:
В таблице хранится информация о клиенте: имя, фамилия, телефон, адрес, почтовый адрес, является ли он постоянным клиентом.
Команда создания:
CREATE TABLE [dbo].[customer](
[CustomerID] [int] IDENTITY(1,1) NOT NULL,
[PhoneNum] [int] NOT NULL,
[Email] [varchar](40) COLLATE Cyrillic_General_CI_AS NOT NULL,
[Name] [varchar](30) COLLATE Cyrillic_General_CI_AS NOT NULL,
[Surname] [varchar](50) COLLATE Cyrillic_General_CI_AS NOT NULL,
[Address] [varchar](50) COLLATE Cyrillic_General_CI_AS NOT NULL,
[IsFriend] [bit] NOT NULL,
CONSTRAINT [PK_customer] PRIMARY KEY CLUSTERED
(
[CustomerID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Таблица Сделок:
В таблице хранится информация о сделках: номер килента, номер магазина, дата сделки, дата доставки, начальная стоимость, стоимость со скидками.
Команда создания:
CREATE TABLE [dbo].[Purchasement](
[PurchasementID] [int] IDENTITY(1,1) NOT NULL,
[CustomerID] [int] NOT NULL,
[ShopID] [int] NOT NULL,
[PurchasementDate] [datetime] NOT NULL,
[DeliveryDate] [datetime] NOT NULL,
[BeginningCost] AS ([dbo].[BegCost]([PurchasementID])),
[FinalCost] AS ([dbo].[FinCost]([PurchasementID],[CustomerID])),
CONSTRAINT [PK__Purchasement__145C0A3F] PRIMARY KEY CLUSTERED
(
[PurchasementID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Purchasement] WITH CHECK ADD CONSTRAINT [FK__Purchasem__Custo__15502E78] FOREIGN KEY([CustomerID])
REFERENCES [dbo].[customer] ([CustomerID])
GO
ALTER TABLE [dbo].[Purchasement] WITH CHECK ADD CONSTRAINT [FK__Purchasem__ShopI__164452B1] FOREIGN KEY([ShopID])
REFERENCES [dbo].[Shop] ([ShopID])
GO
Таблица Промежуточной сделки:
В таблице хранится информация о промежуточной сделке: номер товара, приобретаемое количество, суммарная стоимость, номер основной сделки.
Команда создания:
CREATE TABLE [dbo].[PurchProd](
[PurchProdID] [int] IDENTITY(1,1) NOT NULL,
[ProductID] [int] NOT NULL,
[Quantity] [int] NOT NULL,
[TotalCost] AS ([dbo].[CostOfCouple]([ProductID],[Quantity])),
[PurchasementID] [int] NULL,
CONSTRAINT [PK__PurchProd__0AD2A005] PRIMARY KEY CLUSTERED
(
[PurchProdID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [Labs]
GO
ALTER TABLE [dbo].[PurchProd] WITH CHECK ADD CONSTRAINT [FK__PurchProd__Produ__0BC6C43E] FOREIGN KEY([ProductID])
REFERENCES [dbo].[Warehouse] ([ProductID])
GO
ALTER TABLE [dbo].[PurchProd] WITH CHECK ADD CONSTRAINT [FK__PurchProd__Purch__3F466844] FOREIGN KEY([PurchasementID])
REFERENCES [dbo].[Purchasement] ([PurchasementID])
Таблица Магазинов:
В случае если понадобится введение нескольких магазинов; содержит информацию название магазина.
Команда создания:
CREATE TABLE [dbo].[Shop](
[ShopID] [int] IDENTITY(1,1) NOT NULL,
[ShopName] [varchar](50) COLLATE Cyrillic_General_CI_AS NOT NULL,
CONSTRAINT [PK_Shop] PRIMARY KEY CLUSTERED
(
[ShopID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Таблица Товаров на складе:
В таблице хранится информация о товарах на складе: название, количество на складе, стоимость единицы товара.
Команда создания:
CREATE TABLE [dbo].[Warehouse](
[ProductID] [int] IDENTITY(1,1) NOT NULL,
[Quantity] [int] NULL,
[Price] [int] NOT NULL,
[ProductName] [varchar](50) COLLATE Cyrillic_General_CI_AS NOT NULL,
CONSTRAINT [PK_Warehouse] PRIMARY KEY CLUSTERED
(
[ProductID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]