Я не специалист по базам данных. До сих пор я работал только над менее сложными базами данных.
Я делаю приложение asp.net MVC, для компании, которая предоставляет различные услуги. Основными категориями услуг являются: Цифровая печать, Графический дизайн, Веб-дизайн, Фотография. Проблема возникает при определении цены. Цена цифровой печати зависит от того, является ли она односторонней или двухсторонней, черно-белой или цветной, она зависит от бумаги, цена которой меняется в зависимости от формата, также зависит от количества.
- Бумага: Mondy 80 г в формате А4, цена 0,008 евро за штуку
- Бумага: Mondy 80 г в формате А3, цена 0,02 евро за штуку
и т.д ...
- Печать: односторонняя черно-белая в формате А4, количество от 1-20, цена 0,08 евро за штуку
- Печать: односторонняя, черно-белая на Формат А4, количество от 21-100, цена 0,04 евро за штуку
и т.д ...
Поэтому, если я решу напечатать 52 страницы одностороннего черно-белого изображения на бумаге Mondy 80g формата A4, окончательная цена составит 2,5 евро ... (52x0,008) + (52x0,04)
С другой стороны, графический дизайн оценивается по часам ...
Вот схема того, что я сделал до сих пор

Конечно, это еще не конец. Позже я добавлю таблицы клиентов, заказы и т.д ...
В таблице количества я оставил minValue в качестве поля Null из-за графического дизайна и т. Д., Поскольку они взимаются за час, поэтому я могу создать единицу количества за час и указать максимальное количество часов, скажем, для создание логотипа
Это T-Sql базы данных
USE [master]
GO
CREATE DATABASE [Infinity]
GO
USE [Infinity]
GO
CREATE SCHEMA [Services]
GO
CREATE SCHEMA [Materials]
GO
CREATE SCHEMA [Sales]
GO
CREATE TABLE [Services].[Category]
(
CategoryId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
CategoryName nvarchar(50) NOT NULL,
CategoryDescription nvarchar(300) NULL
);
CREATE TABLE [Materials].[Format]
(
FormatId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
FormatName nvarchar(50) NOT NULL,
FormatHeight nvarchar(20) NOT NULL,
FormatWidth nvarchar(20) NOT NULL
);
CREATE TABLE [Materials].[Paper]
(
PaperId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
PaperName nvarchar(50) NOT NULL
);
CREATE TABLE [Materials].[Quantity]
(
QuantityId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
QuantityName nvarchar(30) NOT NULL,
QuantityUnit nvarchar(30) NOT NULL,
QuantityMinValue int NULL,
QuantityMaxValue int NOT NULL
);
CREATE TABLE [Services].[Service]
(
ServiceId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ServiceName nvarchar(50) NOT NULL,
ServiceDescription nvarchar(300) NULL,
CategoryId int FOREIGN KEY REFERENCES [Services].[Category]
(CategoryId) NOT NULL
);
CREATE TABLE [Sales].[ServicePrice]
(
ServicePriceId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ServiceId int FOREIGN KEY REFERENCES [Services].[Service](ServiceId)
NOT NULL,
QuantityId int FOREIGN KEY REFERENCES [Materials].[Quantity]
(QuantityId) NOT NULL,
FormatId int FOREIGN KEY REFERENCES [Materials].[Format](FormatId)
NULL,
PaperId int FOREIGN KEY REFERENCES [Materials].[Paper](PaperId) NULL,
Price decimal(12,2) NOT NULL
);
Меня интересует, хорошо ли это разработано или есть лучший способ сделать это? Есть предложения?