Загрузка данных


USE user300_db;
GO

/* =========================================================
   1. УДАЛЕНИЕ ТАБЛИЦ
   БАЗА ДАННЫХ user300_db НЕ УДАЛЯЕТСЯ
   ========================================================= */

DROP TABLE IF EXISTS [dbo].[DocumentByService];
DROP TABLE IF EXISTS [dbo].[ProductSale];
DROP TABLE IF EXISTS [dbo].[ProductPhoto];
DROP TABLE IF EXISTS [dbo].[AttachedProduct];
DROP TABLE IF EXISTS [dbo].[ServicePhoto];
DROP TABLE IF EXISTS [dbo].[TagOfClient];
DROP TABLE IF EXISTS [dbo].[ClientService];
DROP TABLE IF EXISTS [dbo].[Product];
DROP TABLE IF EXISTS [dbo].[Client];
DROP TABLE IF EXISTS [dbo].[Service];
DROP TABLE IF EXISTS [dbo].[Manufacturer];
DROP TABLE IF EXISTS [dbo].[Gender];
DROP TABLE IF EXISTS [dbo].[Tag];
GO


/* =========================================================
   2. СОЗДАНИЕ ТАБЛИЦ ЗАНОВО
   ========================================================= */

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO


/* ---------- Gender ---------- */

CREATE TABLE [dbo].[Gender](
    [Code] [nchar](1) NOT NULL,
    [Name] [nvarchar](10) NULL,

    CONSTRAINT [PK_Gender] PRIMARY KEY CLUSTERED
    (
        [Code] ASC
    )
);
GO


/* ---------- Manufacturer ---------- */

CREATE TABLE [dbo].[Manufacturer](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](100) NOT NULL,
    [StartDate] [date] NULL,

    CONSTRAINT [PK_Manufacturer] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- Service ---------- */

CREATE TABLE [dbo].[Service](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Title] [nvarchar](100) NOT NULL,
    [Cost] [money] NOT NULL,
    [DurationInSeconds] [int] NOT NULL,
    [Description] [nvarchar](max) NULL,
    [Discount] [float] NULL,
    [MainImagePath] [nvarchar](1000) NULL,

    CONSTRAINT [PK_Service] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
GO


/* ---------- Tag ---------- */

CREATE TABLE [dbo].[Tag](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Title] [nvarchar](30) NOT NULL,
    [Color] [nchar](6) NOT NULL,

    CONSTRAINT [PK_Tag] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- Client ---------- */

CREATE TABLE [dbo].[Client](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [nvarchar](50) NOT NULL,
    [LastName] [nvarchar](50) NOT NULL,
    [Patronymic] [nvarchar](50) NULL,
    [Birthday] [date] NULL,
    [RegistrationDate] [datetime] NOT NULL,
    [Email] [nvarchar](255) NULL,
    [Phone] [nvarchar](20) NOT NULL,
    [GenderCode] [nchar](1) NOT NULL,
    [PhotoPath] [nvarchar](1000) NULL,

    CONSTRAINT [PK_Client] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- Product ---------- */

CREATE TABLE [dbo].[Product](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Title] [nvarchar](100) NOT NULL,
    [Cost] [money] NOT NULL,
    [Description] [nvarchar](max) NULL,
    [MainImagePath] [nvarchar](1000) NULL,
    [IsActive] [bit] NOT NULL,
    [ManufacturerID] [int] NULL,

    CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
GO


/* ---------- ClientService ---------- */

CREATE TABLE [dbo].[ClientService](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ClientID] [int] NOT NULL,
    [ServiceID] [int] NOT NULL,
    [StartTime] [datetime] NOT NULL,
    [Comment] [nvarchar](max) NULL,

    CONSTRAINT [PK_ClientService] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
GO


/* ---------- DocumentByService ---------- */

CREATE TABLE [dbo].[DocumentByService](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ClientServiceID] [int] NOT NULL,
    [DocumentPath] [nvarchar](1000) NOT NULL,

    CONSTRAINT [PK_DocumentByService] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- ProductPhoto ---------- */

CREATE TABLE [dbo].[ProductPhoto](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ProductID] [int] NOT NULL,
    [PhotoPath] [nvarchar](1000) NOT NULL,

    CONSTRAINT [PK_ProductPhoto] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- ProductSale ---------- */

CREATE TABLE [dbo].[ProductSale](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [SaleDate] [datetime] NOT NULL,
    [ProductID] [int] NOT NULL,
    [Quantity] [int] NOT NULL,
    [ClientServiceID] [int] NULL,

    CONSTRAINT [PK_ProductSale] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- ServicePhoto ---------- */

CREATE TABLE [dbo].[ServicePhoto](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ServiceID] [int] NOT NULL,
    [PhotoPath] [nvarchar](1000) NOT NULL,

    CONSTRAINT [PK_ServicePhoto] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )
);
GO


/* ---------- AttachedProduct ---------- */

CREATE TABLE [dbo].[AttachedProduct](
    [MainProductID] [int] NOT NULL,
    [AttachedProductID] [int] NOT NULL,

    CONSTRAINT [PK_AttachedProduct] PRIMARY KEY CLUSTERED
    (
        [MainProductID] ASC,
        [AttachedProductID] ASC
    )
);
GO


/* ---------- TagOfClient ---------- */

CREATE TABLE [dbo].[TagOfClient](
    [ClientID] [int] NOT NULL,
    [TagID] [int] NOT NULL,

    CONSTRAINT [PK_TagOfClient] PRIMARY KEY CLUSTERED
    (
        [ClientID] ASC,
        [TagID] ASC
    )
);
GO


/* =========================================================
   3. СОЗДАНИЕ СВЯЗЕЙ
   ========================================================= */


/* AttachedProduct -> Product */

ALTER TABLE [dbo].[AttachedProduct]
ADD CONSTRAINT [FK_AttachedProduct_Product]
FOREIGN KEY ([MainProductID])
REFERENCES [dbo].[Product] ([ID]);
GO

ALTER TABLE [dbo].[AttachedProduct]
ADD CONSTRAINT [FK_AttachedProduct_Product1]
FOREIGN KEY ([AttachedProductID])
REFERENCES [dbo].[Product] ([ID]);
GO


/* Client -> Gender */

ALTER TABLE [dbo].[Client]
ADD CONSTRAINT [FK_Client_Gender]
FOREIGN KEY ([GenderCode])
REFERENCES [dbo].[Gender] ([Code]);
GO


/* ClientService -> Client */

ALTER TABLE [dbo].[ClientService]
ADD CONSTRAINT [FK_ClientService_Client]
FOREIGN KEY ([ClientID])
REFERENCES [dbo].[Client] ([ID]);
GO


/* ClientService -> Service */

ALTER TABLE [dbo].[ClientService]
ADD CONSTRAINT [FK_ClientService_Service]
FOREIGN KEY ([ServiceID])
REFERENCES [dbo].[Service] ([ID]);
GO


/* DocumentByService -> ClientService */

ALTER TABLE [dbo].[DocumentByService]
ADD CONSTRAINT [FK_DocumentByService_ClientService]
FOREIGN KEY ([ClientServiceID])
REFERENCES [dbo].[ClientService] ([ID]);
GO


/* Product -> Manufacturer */

ALTER TABLE [dbo].[Product]
ADD CONSTRAINT [FK_Product_Manufacturer]
FOREIGN KEY ([ManufacturerID])
REFERENCES [dbo].[Manufacturer] ([ID]);
GO


/* ProductPhoto -> Product */

ALTER TABLE [dbo].[ProductPhoto]
ADD CONSTRAINT [FK_ProductPhoto_Product]
FOREIGN KEY ([ProductID])
REFERENCES [dbo].[Product] ([ID]);
GO


/* ProductSale -> ClientService */

ALTER TABLE [dbo].[ProductSale]
ADD CONSTRAINT [FK_ProductSale_ClientService]
FOREIGN KEY ([ClientServiceID])
REFERENCES [dbo].[ClientService] ([ID]);
GO


/* ProductSale -> Product */

ALTER TABLE [dbo].[ProductSale]
ADD CONSTRAINT [FK_ProductSale_Product]
FOREIGN KEY ([ProductID])
REFERENCES [dbo].[Product] ([ID]);
GO


/* ServicePhoto -> Service */

ALTER TABLE [dbo].[ServicePhoto]
ADD CONSTRAINT [FK_ServicePhoto_Service]
FOREIGN KEY ([ServiceID])
REFERENCES [dbo].[Service] ([ID]);
GO


/* TagOfClient -> Client */

ALTER TABLE [dbo].[TagOfClient]
ADD CONSTRAINT [FK_TagOfClient_Client]
FOREIGN KEY ([ClientID])
REFERENCES [dbo].[Client] ([ID]);
GO


/* TagOfClient -> Tag */

ALTER TABLE [dbo].[TagOfClient]
ADD CONSTRAINT [FK_TagOfClient_Tag]
FOREIGN KEY ([TagID])
REFERENCES [dbo].[Tag] ([ID]);
GO