184 lines
6.7 KiB
Transact-SQL
184 lines
6.7 KiB
Transact-SQL
-- ============================================================================
|
|
-- AdenTestDB Database Initialization Script
|
|
-- ============================================================================
|
|
-- Purpose: Create a professional testing database for Aden Hive MSSQL tool
|
|
-- Author: Database Architect
|
|
-- Date: 2026-02-08
|
|
-- ============================================================================
|
|
|
|
USE master;
|
|
GO
|
|
|
|
-- Drop database if exists (for clean recreation)
|
|
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'AdenTestDB')
|
|
BEGIN
|
|
ALTER DATABASE AdenTestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
|
|
DROP DATABASE AdenTestDB;
|
|
PRINT 'Existing AdenTestDB dropped successfully.';
|
|
END
|
|
GO
|
|
|
|
-- Create new database
|
|
CREATE DATABASE AdenTestDB;
|
|
GO
|
|
|
|
PRINT 'AdenTestDB created successfully.';
|
|
GO
|
|
|
|
USE AdenTestDB;
|
|
GO
|
|
|
|
-- ============================================================================
|
|
-- TABLE: Departments
|
|
-- ============================================================================
|
|
-- Purpose: Store department information with budget tracking
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE Departments (
|
|
department_id INT IDENTITY(1,1) NOT NULL,
|
|
name NVARCHAR(100) NOT NULL,
|
|
budget DECIMAL(15,2) NOT NULL,
|
|
created_date DATETIME NOT NULL DEFAULT GETDATE(),
|
|
|
|
CONSTRAINT PK_Departments PRIMARY KEY (department_id),
|
|
CONSTRAINT UK_Departments_Name UNIQUE (name),
|
|
CONSTRAINT CK_Departments_Budget CHECK (budget >= 0)
|
|
);
|
|
GO
|
|
|
|
-- Create index for performance optimization
|
|
CREATE INDEX IX_Departments_Name ON Departments(name);
|
|
GO
|
|
|
|
PRINT 'Departments table created successfully.';
|
|
GO
|
|
|
|
-- ============================================================================
|
|
-- TABLE: Employees
|
|
-- ============================================================================
|
|
-- Purpose: Store employee information with department association
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE Employees (
|
|
employee_id INT IDENTITY(1000,1) NOT NULL,
|
|
first_name NVARCHAR(50) NOT NULL,
|
|
last_name NVARCHAR(50) NOT NULL,
|
|
email NVARCHAR(100) NOT NULL,
|
|
salary DECIMAL(12,2) NOT NULL,
|
|
hire_date DATETIME NOT NULL,
|
|
department_id INT NOT NULL,
|
|
|
|
CONSTRAINT PK_Employees PRIMARY KEY (employee_id),
|
|
CONSTRAINT UK_Employees_Email UNIQUE (email),
|
|
CONSTRAINT CK_Employees_Salary CHECK (salary >= 0),
|
|
CONSTRAINT FK_Employees_Departments
|
|
FOREIGN KEY (department_id) REFERENCES Departments(department_id)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE
|
|
);
|
|
GO
|
|
|
|
-- Create indexes for performance optimization
|
|
CREATE INDEX IX_Employees_DepartmentId ON Employees(department_id);
|
|
CREATE INDEX IX_Employees_LastName ON Employees(last_name);
|
|
CREATE INDEX IX_Employees_Email ON Employees(email);
|
|
GO
|
|
|
|
PRINT 'Employees table created successfully.';
|
|
GO
|
|
|
|
-- ============================================================================
|
|
-- SAMPLE DATA: Departments
|
|
-- ============================================================================
|
|
|
|
INSERT INTO Departments (name, budget, created_date) VALUES
|
|
('Engineering', 2500000.00, '2023-01-15'),
|
|
('Human Resources', 800000.00, '2023-01-15'),
|
|
('Sales', 1500000.00, '2023-01-20'),
|
|
('Marketing', 1200000.00, '2023-02-01'),
|
|
('Finance', 1000000.00, '2023-02-10');
|
|
GO
|
|
|
|
PRINT 'Sample departments inserted successfully.';
|
|
GO
|
|
|
|
-- ============================================================================
|
|
-- SAMPLE DATA: Employees
|
|
-- ============================================================================
|
|
|
|
INSERT INTO Employees (first_name, last_name, email, salary, hire_date, department_id) VALUES
|
|
-- Engineering Department (ID: 1)
|
|
('John', 'Smith', 'john.smith@adenhive.com', 120000.00, '2023-03-01', 1),
|
|
('Sarah', 'Johnson', 'sarah.johnson@adenhive.com', 115000.00, '2023-03-15', 1),
|
|
('Michael', 'Chen', 'michael.chen@adenhive.com', 125000.00, '2023-04-01', 1),
|
|
('Emily', 'Rodriguez', 'emily.rodriguez@adenhive.com', 110000.00, '2023-05-10', 1),
|
|
('David', 'Kim', 'david.kim@adenhive.com', 105000.00, '2024-01-15', 1),
|
|
|
|
-- Human Resources Department (ID: 2)
|
|
('Lisa', 'Anderson', 'lisa.anderson@adenhive.com', 85000.00, '2023-02-20', 2),
|
|
('James', 'Wilson', 'james.wilson@adenhive.com', 80000.00, '2023-06-01', 2),
|
|
|
|
-- Sales Department (ID: 3)
|
|
('Jennifer', 'Taylor', 'jennifer.taylor@adenhive.com', 95000.00, '2023-04-15', 3),
|
|
('Robert', 'Martinez', 'robert.martinez@adenhive.com', 90000.00, '2023-05-01', 3),
|
|
('Amanda', 'Garcia', 'amanda.garcia@adenhive.com', 92000.00, '2023-07-20', 3),
|
|
|
|
-- Marketing Department (ID: 4)
|
|
('Christopher', 'Lee', 'christopher.lee@adenhive.com', 88000.00, '2023-03-10', 4),
|
|
('Michelle', 'White', 'michelle.white@adenhive.com', 86000.00, '2023-08-01', 4),
|
|
('Kevin', 'Brown', 'kevin.brown@adenhive.com', 84000.00, '2024-02-01', 4),
|
|
|
|
-- Finance Department (ID: 5)
|
|
('Jessica', 'Davis', 'jessica.davis@adenhive.com', 98000.00, '2023-02-15', 5),
|
|
('Daniel', 'Miller', 'daniel.miller@adenhive.com', 95000.00, '2023-09-01', 5);
|
|
GO
|
|
|
|
PRINT 'Sample employees inserted successfully.';
|
|
GO
|
|
|
|
-- ============================================================================
|
|
-- VERIFICATION QUERIES
|
|
-- ============================================================================
|
|
|
|
PRINT '';
|
|
PRINT '============================================================';
|
|
PRINT 'Database Setup Summary';
|
|
PRINT '============================================================';
|
|
|
|
-- Count departments
|
|
DECLARE @DeptCount INT;
|
|
SELECT @DeptCount = COUNT(*) FROM Departments;
|
|
PRINT 'Total Departments: ' + CAST(@DeptCount AS NVARCHAR(10));
|
|
|
|
-- Count employees
|
|
DECLARE @EmpCount INT;
|
|
SELECT @EmpCount = COUNT(*) FROM Employees;
|
|
PRINT 'Total Employees: ' + CAST(@EmpCount AS NVARCHAR(10));
|
|
|
|
-- Show department summary
|
|
PRINT '';
|
|
PRINT 'Department Summary:';
|
|
PRINT '------------------------------------------------------------';
|
|
SELECT
|
|
d.name AS Department,
|
|
COUNT(e.employee_id) AS Employees,
|
|
d.budget AS Budget,
|
|
FORMAT(d.budget / NULLIF(COUNT(e.employee_id), 0), 'C', 'en-US') AS BudgetPerEmployee
|
|
FROM Departments d
|
|
LEFT JOIN Employees e ON d.department_id = e.department_id
|
|
GROUP BY d.name, d.budget
|
|
ORDER BY d.name;
|
|
GO
|
|
|
|
PRINT '';
|
|
PRINT '============================================================';
|
|
PRINT 'AdenTestDB initialization completed successfully!';
|
|
PRINT '============================================================';
|
|
PRINT '';
|
|
PRINT 'Next Steps:';
|
|
PRINT '1. Run: python test_mssql_connection.py';
|
|
PRINT '2. Verify JOIN queries work correctly';
|
|
PRINT '3. Test relational integrity';
|
|
PRINT '============================================================';
|
|
GO
|