-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate.sql
More file actions
181 lines (149 loc) · 4.73 KB
/
create.sql
File metadata and controls
181 lines (149 loc) · 4.73 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
USE BankDatabase
CREATE TABLE CustomerData(
customerID int PRIMARY KEY,
pesel char(11) UNIQUE NOT NULL,
firstName nvarchar(50) NOT NULL,
lastName nvarchar(50) NOT NULL,
addressID int NOT NULL,
phoneNr int NOT NULL,
dateOfBirth date NOT NULL
);
CREATE TABLE AddressDetails(
addressID int PRIMARY KEY,
country nvarchar(20) NOT NULL,
region nvarchar(40),
city nvarchar(58) NOT NULL,
postalCode nvarchar(6) NOT NULL,
street nvarchar(85) NOT NULL,
streetNumber nvarchar(10) NOT NULL,
houseNumber nvarchar(3)
);
CREATE TABLE Employees(
employeeID int PRIMARY KEY,
firstName nvarchar(50) NOT NULL,
lastName nvarchar(50) NOT NULL,
hireDate date NOT NULL,
departmentID int NOT NULL
);
CREATE TABLE Departments(
departmentID int PRIMARY KEY,
departmentName nvarchar(100) NOT NULL
);
CREATE TABLE CustomerHistory(
requestID int PRIMARY KEY IDENTITY(1,1),
customerID int NOT NULL,
employeeID int NOT NULL,
requestTypeID int NOT NULL,
requestDate date NOT NULL
);
CREATE TABLE RequestsTypes(
requestID int PRIMARY KEY,
requestName nvarchar(50) NOT NULL,
requestDesc nvarchar(100)
);
CREATE TABLE LogInData(
customerID int PRIMARY KEY,
customerLogin nvarchar(10) NOT NULL,
passwordHash BIGINT NOT NULL
);
CREATE TABLE CustomerAccount(
customerID int NOT NULL,
accountID int NOT NULL,
PRIMARY KEY(customerID, accountID)
);
CREATE TABLE Accounts(
accountID int PRIMARY KEY,
accountNr nvarchar(26) UNIQUE NOT NULL,
typeID int NOT NULL,
currentBalance money DEFAULT 0,
);
CREATE TABLE Cards(
cardID int PRIMARY KEY IDENTITY(1,1),
cardNr nvarchar(26) UNIQUE NOT NULL,
accountID int UNIQUE NOT NULL,
);
CREATE TABLE Deposits(
depositID int PRIMARY KEY IDENTITY(1,1),
accountID int UNIQUE NOT NULL,
balance money NOT NULL,
bankRate decimal(4,2) NOT NULL,
openDate date NOT NULL,
duration int NOT NULL -- in months
);
CREATE TABLE TransfersHistory(
transferID int PRIMARY KEY IDENTITY(1,1),
title nvarchar(140) NOT NULL,
accountNr nvarchar(26) NOT NULL,
payeeAccountNr nvarchar(26) NOT NULL,
amount money NOT NULL
);
CREATE TABLE TransferDetails(
transferID int PRIMARY KEY,
payeeNameAndAddress nvarchar(140) NOT NULL,
transferDate date NOT NULL,
cardID int
);
CREATE TABLE AccountsTypes(
typeID int PRIMARY KEY,
typeName nvarchar(30) NOT NULL, -- normal, curr (for each currency), savings
bankRate decimal(4,2) DEFAULT 0.0,
currencyID nvarchar(3) NOT NULL
);
CREATE TABLE Currency(
currencyID nvarchar(3) PRIMARY KEY,
buyRate decimal(7,5) NOT NULL,
sellRate decimal(7,5) NOT NULL
);
CREATE TABLE RatesHistory(
currencyID nvarchar(3) NOT NULL,
rateDate date NOT NULL,
buyRate decimal(7,5) NOT NULL,
sellRate decimal(7,5) NOT NULL,
PRIMARY KEY(currencyID, rateDate)
);
---------- foreign keys --------------------
ALTER TABLE LogInData
ADD CONSTRAINT FK_LogInData_CustomerData
FOREIGN KEY (customerID) REFERENCES CustomerData(CustomerID);
ALTER TABLE CustomerHistory
ADD CONSTRAINT FK_CustomerHistory_CustomerData
FOREIGN KEY (customerID) REFERENCES CustomerData(CustomerID) ON DELETE CASCADE;
ALTER TABLE CustomerHistory
ADD CONSTRAINT FK_CustomerHistory_Employees
FOREIGN KEY (employeeID) REFERENCES Employees(employeeID);
ALTER TABLE CustomerHistory
ADD CONSTRAINT FK_CustomerHistory_RequestsTypes
FOREIGN KEY (requestTypeID) REFERENCES RequestsTypes(requestID);
ALTER TABLE CustomerAccount
ADD CONSTRAINT FK_CustomerAccount_CustomerData
FOREIGN KEY (customerID) REFERENCES CustomerData(CustomerID) ON DELETE CASCADE;
ALTER TABLE CustomerAccount
ADD CONSTRAINT FK_CustomerAccount_Accounts
FOREIGN KEY (accountID) REFERENCES Accounts(accountID) ON DELETE CASCADE;
ALTER TABLE CustomerData
ADD CONSTRAINT FK_CustomerData_AddressDetails
FOREIGN KEY (addressID) REFERENCES AddressDetails(addressID);
ALTER TABLE Employees
ADD CONSTRAINT FK_Employees_Departments
FOREIGN KEY (departmentID) REFERENCES Departments(departmentID);
ALTER TABLE Accounts
ADD CONSTRAINT FK_Accounts_AccountsTypes
FOREIGN KEY (typeID) REFERENCES AccountsTypes(typeID);
ALTER TABLE Deposits
ADD CONSTRAINT FK_Deposits_Accounts
FOREIGN KEY (accountID) REFERENCES Accounts(accountID);
ALTER TABLE Cards
ADD CONSTRAINT FK_Cards_Accounts
FOREIGN KEY (accountID) REFERENCES Accounts(accountID);
ALTER TABLE AccountsTypes
ADD CONSTRAINT FK_AccountsTypes_Currency
FOREIGN KEY (currencyID) REFERENCES Currency(currencyID);
ALTER TABLE TransferDetails
ADD CONSTRAINT FK_TransferDetails_TransfersHistory
FOREIGN KEY (transferID) REFERENCES TransfersHistory(transferID);
ALTER TABLE RatesHistory
ADD CONSTRAINT FK_RatesHistory_Currency
FOREIGN KEY (currencyID) REFERENCES Currency(currencyID);
---------- indexes --------------------
CREATE INDEX accountNrIdx ON Accounts (accountNr);
CREATE INDEX addressIdx ON AddressDetails (country, region, city, postalCode, street, streetNumber, houseNumber);