Добавил:
hiiamfool
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:курсач / 01_CreateStructure
.sql 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
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
Соседние файлы в папке курсач
