Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсач / 01_CreateStructure

.sql
Скачиваний:
0
Добавлен:
27.12.2025
Размер:
6 Кб
Скачать
USE master;
GO

-- Логирование времени начала выполнения
PRINT '=============================================================';
PRINT 'Начало выполнения скрипта создания структуры.';
PRINT 'Время запуска: ' + CONVERT(VARCHAR(30), GETDATE(), 120);
PRINT '=============================================================';
GO

/* =============================================
   1. УДАЛЕНИЕ И ПЕРЕСОЗДАНИЕ БД
   С ОПЦИЯМИ РАЗМЕЩЕНИЯ ФАЙЛОВ
   ============================================= */

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'CircuitDB')
BEGIN
    PRINT 'Обнаружена старая версия БД. Удаление...';
    -- Переводим базу в однопользовательский режим, чтобы закрыть все соединения
    ALTER DATABASE CircuitDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE CircuitDB;
END
GO

PRINT 'Создание базы данных CircuitDB с настройками файлов... ' + CONVERT(VARCHAR(30), GETDATE(), 120);
GO

-- ВАЖНО: Мы разделяем файлы данных и журнала.
CREATE DATABASE CircuitDB
ON PRIMARY 
( 
    NAME = N'CircuitDB_Data', 
    FILENAME = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\CircuitDB.mdf', 
    SIZE = 10MB, 
    MAXSIZE = UNLIMITED, 
    FILEGROWTH = 5MB 
)
LOG ON 
( 
    NAME = N'CircuitDB_Log', 
    FILENAME = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\CircuitDB_log.ldf', 
    SIZE = 5MB, 
    MAXSIZE = 2GB, 
    FILEGROWTH = 1MB 
);
GO

USE CircuitDB;
GO

/* =============================================
   2. СОЗДАНИЕ СХЕМ (LOGICAL SEPARATION)
   Ref - Справочные данные (Reference)
   Stock - Складские данные (Components)
   ============================================= */
PRINT 'Создание схем Ref и Stock... ' + CONVERT(VARCHAR(30), GETDATE(), 120);
GO

CREATE SCHEMA [Ref] AUTHORIZATION [dbo];
GO

CREATE SCHEMA [Stock] AUTHORIZATION [dbo];
GO

/* =============================================
   3. СОЗДАНИЕ СПРАВОЧНИКОВ (Схема Ref)
   ============================================= */
PRINT 'Создание таблиц справочников... ' + CONVERT(VARCHAR(30), GETDATE(), 120);
GO

-- Производители
CREATE TABLE [Ref].[Manufacturers] (
    ManufacturerID INT IDENTITY(1,1) NOT NULL,
    Name NVARCHAR(100) NOT NULL,
    Website NVARCHAR(255) NULL,
    CONSTRAINT PK_Manufacturers PRIMARY KEY (ManufacturerID)
);

-- Категории
CREATE TABLE [Ref].[Categories] (
    CategoryID INT IDENTITY(1,1) NOT NULL,
    Name NVARCHAR(100) NOT NULL,
    Description NVARCHAR(500) NULL,
    CONSTRAINT PK_Categories PRIMARY KEY (CategoryID)
);

-- Типы корпусов
CREATE TABLE [Ref].[PackageTypes] (
    PackageID INT IDENTITY(1,1) NOT NULL,
    Name NVARCHAR(50) NOT NULL,
    MountType NVARCHAR(50) NOT NULL, 
    CONSTRAINT PK_PackageTypes PRIMARY KEY (PackageID)
);

-- Типы симуляции
CREATE TABLE [Ref].[SimulationTypes] (
    SimTypeID INT IDENTITY(1,1) NOT NULL,
    Name NVARCHAR(50) NOT NULL,
    Engine NVARCHAR(50) NULL,
    CONSTRAINT PK_SimulationTypes PRIMARY KEY (SimTypeID)
);
GO

/* =============================================
   4. СОЗДАНИЕ ОСНОВНЫХ ТАБЛИЦ (Схема Stock)
   ============================================= */
PRINT 'Создание таблиц данных (Components)... ' + CONVERT(VARCHAR(30), GETDATE(), 120);
GO

CREATE TABLE [Stock].[Components] (
    ComponentID INT IDENTITY(1,1) NOT NULL,
    PartNumber NVARCHAR(100) NOT NULL,
    
    -- Ссылки на справочники из схемы Ref
    ManufacturerID INT NOT NULL, 
    CategoryID INT NOT NULL, 
    PackageID INT NOT NULL, 
    
    Description NVARCHAR(1000) NULL,
    IsActive BIT DEFAULT 1 NOT NULL,
    
    CONSTRAINT PK_Components PRIMARY KEY (ComponentID),
    
    -- FK Constraints с указанием схемы
    CONSTRAINT FK_Components_Manufacturers FOREIGN KEY (ManufacturerID) 
        REFERENCES [Ref].[Manufacturers] (ManufacturerID),
        
    CONSTRAINT FK_Components_Categories FOREIGN KEY (CategoryID) 
        REFERENCES [Ref].[Categories] (CategoryID),
        
    CONSTRAINT FK_Components_PackageTypes FOREIGN KEY (PackageID) 
        REFERENCES [Ref].[PackageTypes] (PackageID)
);
GO

/* =============================================
   5. СОЗДАНИЕ ДЕТАЛИЗАЦИИ (Схема Stock)
   ============================================= */
PRINT 'Создание таблиц параметров и моделей... ' + CONVERT(VARCHAR(30), GETDATE(), 120);
GO

-- Параметры
CREATE TABLE [Stock].[ComponentParams] (
    ParamID INT IDENTITY(1,1) NOT NULL,
    ComponentID INT NOT NULL,
    ParamName NVARCHAR(100) NOT NULL,
    ParamValue NVARCHAR(100) NOT NULL,
    Unit NVARCHAR(20) NULL,
    
    CONSTRAINT PK_ComponentParams PRIMARY KEY (ParamID),
    
    CONSTRAINT FK_ComponentParams_Components FOREIGN KEY (ComponentID) 
        REFERENCES [Stock].[Components] (ComponentID)
        ON DELETE CASCADE
);

-- Модели
CREATE TABLE [Stock].[ComponentModels] (
    ModelID INT IDENTITY(1,1) NOT NULL,
    ComponentID INT NOT NULL,
    SimTypeID INT NOT NULL, -- Ссылка на Ref
    ModelCode NVARCHAR(MAX) NULL,
    FilePath NVARCHAR(255) NULL,
    
    CONSTRAINT PK_ComponentModels PRIMARY KEY (ModelID),
    
    CONSTRAINT FK_ComponentModels_Components FOREIGN KEY (ComponentID) 
        REFERENCES [Stock].[Components] (ComponentID)
        ON DELETE CASCADE,
        
    CONSTRAINT FK_ComponentModels_SimulationTypes FOREIGN KEY (SimTypeID) 
        REFERENCES [Ref].[SimulationTypes] (SimTypeID)
);
GO

PRINT '=============================================================';
PRINT 'Скрипт 01 выполнен успешно.';
PRINT 'Время завершения: ' + CONVERT(VARCHAR(30), GETDATE(), 120);
PRINT '=============================================================';
GO
Соседние файлы в папке курсач