-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path00_CreateDatabase_Complete.sql
More file actions
295 lines (269 loc) · 9.52 KB
/
Copy path00_CreateDatabase_Complete.sql
File metadata and controls
295 lines (269 loc) · 9.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
-- ============================================================================
-- SECUREBANK DATA WAREHOUSE - COMPLETE AUTOMATED SETUP
-- ============================================================================
-- This script does EVERYTHING:
-- 1. Creates database
-- 2. Creates all tables
-- 3. Loads all data from CSV files
--
-- BEFORE RUNNING: Update the @DataPath variable below to YOUR location!
-- ============================================================================
USE master;
GO
-- ****************************************************************************
-- STEP 1: SET YOUR DATA PATH HERE
-- ****************************************************************************
-- CHANGE THIS TO WHERE YOUR CSV FILES ARE LOCATED!
DECLARE @DataPath NVARCHAR(500) = 'C:\Users\parth\OneDrive - University of Illinois Chicago\Desktop\IDS 521 - Project\SecureBank_Data\';
-- Make sure path ends with backslash (\)
-- ****************************************************************************
PRINT '============================================================================';
PRINT 'SecureBank Data Warehouse - Automated Setup';
PRINT '============================================================================';
PRINT 'Data Path: ' + @DataPath;
PRINT '';
-- Drop existing database if it exists
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'SecureBankDW')
BEGIN
PRINT 'Dropping existing SecureBankDW database...';
ALTER DATABASE SecureBankDW SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE SecureBankDW;
PRINT '✓ Existing database dropped';
END
GO
-- Create new database
PRINT 'Creating SecureBankDW database...';
CREATE DATABASE SecureBankDW;
GO
PRINT '✓ Database created';
GO
USE SecureBankDW;
GO
PRINT '';
PRINT '============================================================================';
PRINT 'Creating Tables...';
PRINT '============================================================================';
-- ============================================================================
-- DIMENSION TABLES
-- ============================================================================
-- DimDate
CREATE TABLE DimDate (
DateKey INT PRIMARY KEY,
Date DATE NOT NULL,
Year INT NOT NULL,
Quarter INT NOT NULL,
Month INT NOT NULL,
MonthName VARCHAR(20) NOT NULL,
Week INT NOT NULL,
DayOfMonth INT NOT NULL,
DayOfWeek INT NOT NULL,
DayName VARCHAR(20) NOT NULL,
IsWeekend BIT NOT NULL,
IsHoliday BIT NOT NULL,
FiscalYear INT NOT NULL,
FiscalQuarter INT NOT NULL
);
PRINT '✓ DimDate created';
-- DimBranch
CREATE TABLE DimBranch (
BranchID INT PRIMARY KEY,
BranchName VARCHAR(100) NOT NULL,
BranchCode VARCHAR(10) NOT NULL,
City VARCHAR(50) NOT NULL,
State VARCHAR(50) NOT NULL,
StateAbbrev CHAR(2) NOT NULL,
Region VARCHAR(50) NOT NULL,
BranchSize VARCHAR(20) NOT NULL,
StaffCount INT NOT NULL,
AreaType VARCHAR(20) NOT NULL,
HasATM BIT NOT NULL,
OpeningYear INT NOT NULL
);
PRINT '✓ DimBranch created';
-- DimChannel
CREATE TABLE DimChannel (
ChannelID INT PRIMARY KEY,
ChannelName VARCHAR(50) NOT NULL,
ChannelCategory VARCHAR(20) NOT NULL,
CostPerTransaction DECIMAL(10,2) NOT NULL,
IsDigital BIT NOT NULL,
IsPhysical BIT NOT NULL
);
PRINT '✓ DimChannel created';
-- DimTransactionType
CREATE TABLE DimTransactionType (
TransactionTypeID INT PRIMARY KEY,
TransactionName VARCHAR(100) NOT NULL,
Category VARCHAR(20) NOT NULL,
RequiresApproval BIT NOT NULL,
TypicalAmount DECIMAL(10,2) NOT NULL,
FeeAmount DECIMAL(10,2) NOT NULL
);
PRINT '✓ DimTransactionType created';
-- DimLoanType
CREATE TABLE DimLoanType (
LoanTypeID INT PRIMARY KEY,
LoanTypeName VARCHAR(100) NOT NULL,
Category VARCHAR(50) NOT NULL,
TypicalTerm INT NOT NULL,
AverageInterestRate DECIMAL(5,2) NOT NULL,
RequiresCollateral BIT NOT NULL,
RiskLevel VARCHAR(20) NOT NULL,
TypicalAmount DECIMAL(12,2) NOT NULL
);
PRINT '✓ DimLoanType created';
-- DimTime
CREATE TABLE DimTime (
TimeKey INT PRIMARY KEY,
Hour INT NOT NULL,
HourFormatted VARCHAR(10) NOT NULL,
TimeOfDay VARCHAR(20) NOT NULL,
BusinessHours BIT NOT NULL
);
PRINT '✓ DimTime created';
-- DimCustomer
CREATE TABLE DimCustomer (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(100) NOT NULL,
DateOfBirth DATE NOT NULL,
Gender CHAR(1) NOT NULL,
AgeGroup VARCHAR(20) NOT NULL,
City VARCHAR(50) NOT NULL,
State CHAR(2) NOT NULL,
ZipCode VARCHAR(10) NOT NULL,
IncomeBracket VARCHAR(20) NOT NULL,
CreditScore INT NOT NULL,
CreditScoreRange VARCHAR(20) NOT NULL,
Occupation VARCHAR(100) NOT NULL,
CustomerSegment VARCHAR(50) NOT NULL,
CustomerSince DATE NOT NULL,
RiskProfile VARCHAR(20) NOT NULL
);
PRINT '✓ DimCustomer created';
-- DimEmployee
CREATE TABLE DimEmployee (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(100) NOT NULL,
Title VARCHAR(100) NOT NULL,
ManagerID INT NULL,
Department VARCHAR(50) NOT NULL,
BranchID INT NULL,
HireDate DATE NOT NULL,
Salary DECIMAL(10,2) NOT NULL,
FOREIGN KEY (BranchID) REFERENCES DimBranch(BranchID)
);
PRINT '✓ DimEmployee created';
-- DimATM
CREATE TABLE DimATM (
ATMID INT PRIMARY KEY,
ATMCode VARCHAR(20) NOT NULL,
LocationType VARCHAR(50) NOT NULL,
BranchID INT NULL,
City VARCHAR(50) NOT NULL,
State CHAR(2) NOT NULL,
AreaType VARCHAR(20) NOT NULL,
InstallationDate DATE NOT NULL,
ATMType VARCHAR(50) NOT NULL,
CashCapacity DECIMAL(12,2) NOT NULL,
Manufacturer VARCHAR(50) NOT NULL,
FOREIGN KEY (BranchID) REFERENCES DimBranch(BranchID)
);
PRINT '✓ DimATM created';
-- DimAccount
CREATE TABLE DimAccount (
AccountID INT PRIMARY KEY,
AccountNumber VARCHAR(20) NOT NULL,
CustomerID INT NOT NULL,
AccountType VARCHAR(50) NOT NULL,
AccountStatus VARCHAR(20) NOT NULL,
OpenDate DATE NOT NULL,
CurrentBalance DECIMAL(12,2) NOT NULL,
InterestRate DECIMAL(5,2) NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES DimCustomer(CustomerID)
);
PRINT '✓ DimAccount created';
-- ============================================================================
-- FACT TABLES
-- ============================================================================
-- FactTransaction
CREATE TABLE FactTransaction (
TransactionID INT PRIMARY KEY,
AccountID INT NOT NULL,
CustomerID INT NOT NULL,
BranchID INT NOT NULL,
ChannelID INT NOT NULL,
TransactionTypeID INT NOT NULL,
DateKey INT NOT NULL,
TimeKey INT NOT NULL,
TransactionAmount DECIMAL(12,2) NOT NULL,
TransactionFee DECIMAL(10,2) NOT NULL,
AccountBalanceAfter DECIMAL(12,2) NOT NULL,
IsFraud BIT NOT NULL,
FOREIGN KEY (AccountID) REFERENCES DimAccount(AccountID),
FOREIGN KEY (CustomerID) REFERENCES DimCustomer(CustomerID),
FOREIGN KEY (BranchID) REFERENCES DimBranch(BranchID),
FOREIGN KEY (ChannelID) REFERENCES DimChannel(ChannelID),
FOREIGN KEY (TransactionTypeID) REFERENCES DimTransactionType(TransactionTypeID),
FOREIGN KEY (DateKey) REFERENCES DimDate(DateKey),
FOREIGN KEY (TimeKey) REFERENCES DimTime(TimeKey)
);
PRINT '✓ FactTransaction created';
-- FactLoan
CREATE TABLE FactLoan (
LoanID INT PRIMARY KEY,
CustomerID INT NOT NULL,
BranchID INT NOT NULL,
LoanTypeID INT NOT NULL,
OriginationDateKey INT NOT NULL,
LoanAmount DECIMAL(12,2) NOT NULL,
InterestRate DECIMAL(5,2) NOT NULL,
Term INT NOT NULL,
MonthlyPayment DECIMAL(10,2) NOT NULL,
OutstandingBalance DECIMAL(12,2) NOT NULL,
Status VARCHAR(20) NOT NULL,
DaysDelinquent INT NOT NULL,
CreditScoreAtOrigination INT NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES DimCustomer(CustomerID),
FOREIGN KEY (BranchID) REFERENCES DimBranch(BranchID),
FOREIGN KEY (LoanTypeID) REFERENCES DimLoanType(LoanTypeID),
FOREIGN KEY (OriginationDateKey) REFERENCES DimDate(DateKey)
);
PRINT '✓ FactLoan created';
-- FactATMUsage
CREATE TABLE FactATMUsage (
ATMTransactionID INT PRIMARY KEY,
ATMID INT NOT NULL,
CustomerID INT NOT NULL,
DateKey INT NOT NULL,
TimeKey INT NOT NULL,
WithdrawalAmount DECIMAL(10,2) NOT NULL,
DepositAmount DECIMAL(10,2) NOT NULL,
TransactionCount INT NOT NULL,
FOREIGN KEY (ATMID) REFERENCES DimATM(ATMID),
FOREIGN KEY (CustomerID) REFERENCES DimCustomer(CustomerID),
FOREIGN KEY (DateKey) REFERENCES DimDate(DateKey),
FOREIGN KEY (TimeKey) REFERENCES DimTime(TimeKey)
);
PRINT '✓ FactATMUsage created';
-- ============================================================================
-- INDEXES
-- ============================================================================
PRINT '';
PRINT 'Creating indexes...';
CREATE INDEX IX_FactTransaction_DateKey ON FactTransaction(DateKey);
CREATE INDEX IX_FactTransaction_CustomerID ON FactTransaction(CustomerID);
CREATE INDEX IX_FactTransaction_BranchID ON FactTransaction(BranchID);
CREATE INDEX IX_FactTransaction_ChannelID ON FactTransaction(ChannelID);
CREATE INDEX IX_FactLoan_CustomerID ON FactLoan(CustomerID);
CREATE INDEX IX_FactLoan_DateKey ON FactLoan(OriginationDateKey);
CREATE INDEX IX_FactATM_ATMID ON FactATMUsage(ATMID);
CREATE INDEX IX_FactATM_DateKey ON FactATMUsage(DateKey);
PRINT '✓ Indexes created';
PRINT '';
PRINT '============================================================================';
PRINT 'Tables created successfully!';
PRINT '============================================================================';
PRINT '';
PRINT 'Database is ready. You can now run the data load script.';
PRINT '';
GO