Как спроектировать правильную функциональную базу данных, соблюдая правила нормализации, для компании, которая предоставляет различные виды услуг? - PullRequest
0 голосов
/ 16 января 2019

Я не специалист по базам данных. До сих пор я работал только над менее сложными базами данных. Я делаю приложение 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) С другой стороны, графический дизайн оценивается по часам ... Вот схема того, что я сделал до сих пор

diagram

Конечно, это еще не конец. Позже я добавлю таблицы клиентов, заказы и т.д ... В таблице количества я оставил 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
);

Меня интересует, хорошо ли это разработано или есть лучший способ сделать это? Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...