-- 02_create_tables.sql -- Скрипт для создания таблиц USE [AdoNetShop]; GO -- Таблица Categories IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Categories') BEGIN CREATE TABLE Categories ( Id INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(100) NOT NULL ); END GO -- Таблица Products IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Products') BEGIN CREATE TABLE Products ( Id INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(200) NOT NULL, Description NVARCHAR(MAX) NULL, Price DECIMAL(18, 2) NOT NULL CHECK (Price > 0), StockQuantity INT NOT NULL DEFAULT 0 CHECK (StockQuantity >= 0), CategoryId INT NOT NULL, FOREIGN KEY (CategoryId) REFERENCES Categories(Id) ); END GO -- Таблица Customers IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Customers') BEGIN CREATE TABLE Customers ( Id INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(100) NOT NULL, Email NVARCHAR(100) NOT NULL UNIQUE, Phone NVARCHAR(20) NULL ); END GO -- Таблица Orders IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Orders') BEGIN CREATE TABLE Orders ( Id INT IDENTITY(1,1) PRIMARY KEY, CustomerId INT NOT NULL, OrderDate DATETIME2 NOT NULL DEFAULT GETDATE(), Status NVARCHAR(50) NOT NULL DEFAULT 'New', TotalAmount DECIMAL(18, 2) NOT NULL DEFAULT 0 CHECK (TotalAmount >= 0), FOREIGN KEY (CustomerId) REFERENCES Customers(Id) ); END GO -- Таблица OrderItems IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'OrderItems') BEGIN CREATE TABLE OrderItems ( Id INT IDENTITY(1,1) PRIMARY KEY, OrderId INT NOT NULL, ProductId INT NOT NULL, Quantity INT NOT NULL CHECK (Quantity > 0), Price DECIMAL(18, 2) NOT NULL CHECK (Price > 0), FOREIGN KEY (OrderId) REFERENCES Orders(Id) ON DELETE CASCADE, FOREIGN KEY (ProductId) REFERENCES Products(Id) ); END GO -- Индексы для внешних ключей (улучшают производительность JOIN'ов) IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_Products_CategoryId') CREATE INDEX IX_Products_CategoryId ON Products(CategoryId); IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_Orders_CustomerId') CREATE INDEX IX_Orders_CustomerId ON Orders(CustomerId); IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_OrderItems_OrderId') CREATE INDEX IX_OrderItems_OrderId ON OrderItems(OrderId); IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_OrderItems_ProductId') CREATE INDEX IX_OrderItems_ProductId ON OrderItems(ProductId); GO