RelationalDesign: ddl.4.sql

File ddl.4.sql, 4.1 KB (added by 231020, 2 weeks ago)
Line 
1DROP TABLE IF EXISTS portfolio_holdings;
2DROP TABLE IF EXISTS transactions;
3DROP TABLE IF EXISTS trade_request;
4DROP TABLE IF EXISTS stock_history;
5DROP TABLE IF EXISTS watchlist;
6DROP TABLE IF EXISTS oauth_pending_links;
7DROP TABLE IF EXISTS user_auth_providers;
8DROP TABLE IF EXISTS portfolios;
9DROP TABLE IF EXISTS stock;
10DROP TABLE IF EXISTS users;
11
12
13CREATE TABLE IF NOT EXISTS users (
14 id BIGINT NOT NULL PRIMARY KEY,
15 email VARCHAR(255) NOT NULL UNIQUE,
16 password VARCHAR(255) NOT NULL,
17 role VARCHAR(255) NOT NULL CHECK (role IN ('USER', 'ADMIN')),
18 username VARCHAR(255) NOT NULL UNIQUE
19);
20
21
22CREATE TABLE IF NOT EXISTS stock (
23 id BIGINT NOT NULL PRIMARY KEY,
24 symbol VARCHAR(255) NOT NULL UNIQUE,
25 name VARCHAR(255),
26 current_price DOUBLE PRECISION,
27 last_price DOUBLE PRECISION,
28 percentage DOUBLE PRECISION NOT NULL,
29 turnover DOUBLE PRECISION,
30 last_updated TIMESTAMP
31);
32
33
34CREATE TABLE IF NOT EXISTS portfolios (
35 id BIGINT NOT NULL PRIMARY KEY,
36 balance NUMERIC(18,2) NOT NULL,
37 user_id BIGINT NOT NULL UNIQUE,
38
39 CONSTRAINT fk_portfolio_user
40 FOREIGN KEY (user_id)
41 REFERENCES users(id)
42);
43
44
45CREATE TABLE IF NOT EXISTS portfolio_holdings (
46 id BIGINT NOT NULL PRIMARY KEY,
47 quantity INTEGER NOT NULL,
48 avg_price NUMERIC(38,2) NOT NULL,
49 stock_id BIGINT NOT NULL,
50 portfolio_id BIGINT NOT NULL,
51
52 CONSTRAINT fk_ph_portfolio
53 FOREIGN KEY (portfolio_id)
54 REFERENCES portfolios(id),
55
56 CONSTRAINT fk_ph_stock
57 FOREIGN KEY (stock_id)
58 REFERENCES stock(id)
59);
60
61
62CREATE TABLE IF NOT EXISTS stock_history (
63 id BIGINT NOT NULL PRIMARY KEY,
64 price DOUBLE PRECISION NOT NULL,
65 stock_id BIGINT NOT NULL,
66 timestamp DATE NOT NULL,
67
68 CONSTRAINT fk_stock
69 FOREIGN KEY (stock_id)
70 REFERENCES stock(id)
71);
72
73
74CREATE TABLE IF NOT EXISTS trade_request (
75 id BIGINT NOT NULL PRIMARY KEY,
76 portfolio_id BIGINT,
77 price_per_unit DOUBLE PRECISION NOT NULL,
78 quantity INTEGER NOT NULL,
79 status VARCHAR(255),
80 stock_id BIGINT NOT NULL,
81 timestamp TIMESTAMP,
82 type VARCHAR(255),
83
84 CONSTRAINT fk_trade_portfolio
85 FOREIGN KEY (portfolio_id)
86 REFERENCES portfolios(id),
87
88 CONSTRAINT fk_trade_stock
89 FOREIGN KEY (stock_id)
90 REFERENCES stock(id)
91);
92
93
94CREATE TABLE IF NOT EXISTS transactions (
95 id BIGINT NOT NULL PRIMARY KEY,
96 type VARCHAR(255),
97 quantity INTEGER,
98 price DOUBLE PRECISION,
99 timestamp TIMESTAMP NOT NULL,
100 origin VARCHAR(255) NOT NULL
101 CHECK (origin IN ('INTERNAL', 'EXTERNAL')),
102 user_id BIGINT,
103 stock_id BIGINT,
104 trade_request_id BIGINT,
105
106 CONSTRAINT fk_tx_user
107 FOREIGN KEY (user_id)
108 REFERENCES users(id),
109
110 CONSTRAINT fk_tx_stock
111 FOREIGN KEY (stock_id)
112 REFERENCES stock(id),
113
114 CONSTRAINT fk_tx_trade_request
115 FOREIGN KEY (trade_request_id)
116 REFERENCES trade_request(id)
117);
118
119
120CREATE TABLE IF NOT EXISTS watchlist (
121 id BIGINT NOT NULL PRIMARY KEY,
122 price_above DOUBLE PRECISION,
123 price_below DOUBLE PRECISION,
124 stock_id BIGINT,
125 user_id BIGINT,
126
127 CONSTRAINT fk_watch_stock
128 FOREIGN KEY (stock_id)
129 REFERENCES stock(id),
130
131 CONSTRAINT fk_watch_user
132 FOREIGN KEY (user_id)
133 REFERENCES users(id)
134);
135
136
137CREATE TABLE IF NOT EXISTS user_auth_providers (
138 user_id BIGINT NOT NULL UNIQUE,
139
140 auth_providers VARCHAR(255) NOT NULL
141 CHECK (auth_providers IN ('INTERNAL', 'GOOGLE')),
142
143 CONSTRAINT fk_auth_user
144 FOREIGN KEY (user_id)
145 REFERENCES users(id)
146);
147
148
149CREATE TABLE IF NOT EXISTS oauth_pending_links (
150 token VARCHAR(255) NOT NULL PRIMARY KEY,
151 email VARCHAR(255) NOT NULL,
152
153 provider VARCHAR(255) NOT NULL
154 CHECK (provider IN ('GOOGLE', 'INTERNAL')),
155
156 expires_at TIMESTAMP NOT NULL,
157 created_at TIMESTAMP NOT NULL,
158 user_id BIGINT NOT NULL,
159 auth_provider_id BIGINT NOT NULL,
160
161 CONSTRAINT fk_pending_user
162 FOREIGN KEY (user_id)
163 REFERENCES users(id),
164
165 CONSTRAINT fk_pending_auth_provider
166 FOREIGN KEY (auth_provider_id)
167 REFERENCES user_auth_providers(user_id)
168);