design: ddl.2.sql

File ddl.2.sql, 3.4 KB (added by 231020, 6 days ago)
Line 
1DROP TABLE IF EXISTS portfolio_holdings;
2DROP TABLE IF EXISTS trade_request;
3DROP TABLE IF EXISTS stock_history;
4DROP TABLE IF EXISTS watchlist;
5DROP TABLE IF EXISTS transactions;
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
12CREATE TABLE IF NOT EXISTS users (
13 id BIGINT NOT NULL PRIMARY KEY,
14 email VARCHAR(255) NOT NULL UNIQUE,
15 password VARCHAR(255) NOT NULL,
16 role VARCHAR(255) NOT NULL CHECK (role IN ('USER','ADMIN')),
17 username VARCHAR(255) NOT NULL
18);
19
20CREATE TABLE IF NOT EXISTS stock
21(
22 id BIGINT NOT NULL PRIMARY KEY,
23 symbol VARCHAR(255) NOT NULL UNIQUE,
24 name VARCHAR(255),
25 current_price DOUBLE PRECISION,
26 last_price DOUBLE PRECISION,
27 percentage DOUBLE PRECISION NOT NULL,
28 turnover DOUBLE PRECISION,
29 last_updated TIMESTAMP
30);
31
32CREATE TABLE IF NOT EXISTS portfolios
33(
34 id BIGINT NOT NULL PRIMARY KEY,
35 balance NUMERIC(18,2) NOT NULL,
36 user_id BIGINT NOT NULL UNIQUE,
37 CONSTRAINT fk_portfolio_user FOREIGN KEY (user_id) REFERENCES users (id)
38);
39
40CREATE TABLE IF NOT EXISTS portfolio_holdings
41(
42 id BIGINT NOT NULL PRIMARY KEY,
43 quantity INTEGER NOT NULL,
44 avg_price NUMERIC(38,2) NOT NULL,
45 stock_symbol VARCHAR(255) NOT NULL,
46 portfolio_id BIGINT NOT NULL,
47 CONSTRAINT fk_ph_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios (id)
48);
49
50CREATE TABLE IF NOT EXISTS stock_history
51(
52 id BIGINT NOT NULL PRIMARY KEY,
53 price DOUBLE PRECISION NOT NULL,
54 stock_id BIGINT NOT NULL,
55 timestamp DATE NOT NULL,
56 CONSTRAINT fk_stock FOREIGN KEY (stock_id) REFERENCES stock(id)
57);
58
59CREATE TABLE IF NOT EXISTS trade_request
60(
61 id BIGINT NOT NULL PRIMARY KEY,
62 portfolio_id BIGINT,
63 price_per_unit DOUBLE PRECISION NOT NULL,
64 quantity INTEGER NOT NULL,
65 status VARCHAR(255),
66 stock_symbol VARCHAR(255),
67 timestamp TIMESTAMP,
68 type VARCHAR(255),
69 CONSTRAINT fk_trade_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios(id)
70);
71
72CREATE TABLE IF NOT EXISTS transactions
73(
74 id BIGINT NOT NULL PRIMARY KEY,
75 type VARCHAR(255),
76 quantity INTEGER,
77 price DOUBLE PRECISION,
78 timestamp TIMESTAMP NOT NULL,
79 origin VARCHAR(255) NOT NULL CHECK (origin IN ('INTERNAL','EXTERNAL')),
80 user_id BIGINT,
81 stock_id BIGINT,
82 CONSTRAINT fk_tx_user FOREIGN KEY (user_id) REFERENCES users (id),
83 CONSTRAINT fk_tx_stock FOREIGN KEY (stock_id) REFERENCES stock (id)
84);
85
86CREATE TABLE IF NOT EXISTS watchlist
87(
88 id BIGINT NOT NULL PRIMARY KEY,
89 price_above DOUBLE PRECISION,
90 price_below DOUBLE PRECISION,
91 stock_id BIGINT,
92 user_id BIGINT,
93 CONSTRAINT fk_watch_stock FOREIGN KEY (stock_id) REFERENCES stock (id),
94 CONSTRAINT fk_watch_user FOREIGN KEY (user_id) REFERENCES users (id)
95);
96
97CREATE TABLE IF NOT EXISTS user_auth_providers
98(
99 user_id BIGINT NOT NULL,
100 auth_providers VARCHAR(255) NOT NULL CHECK (auth_providers IN ('INTERNAL','GOOGLE')),
101 CONSTRAINT fk_auth_user FOREIGN KEY (user_id) REFERENCES users (id)
102);
103
104CREATE TABLE IF NOT EXISTS oauth_pending_links
105(
106 token VARCHAR(255) NOT NULL PRIMARY KEY,
107 email VARCHAR(255) NOT NULL,
108 provider VARCHAR(255) NOT NULL CHECK (provider IN ('GOOGLE','INTERNAL')),
109 expires_at TIMESTAMP NOT NULL,
110 created_at TIMESTAMP NOT NULL,
111 user_id BIGINT NOT NULL,
112 CONSTRAINT fk_pending_user FOREIGN KEY (user_id) REFERENCES users(id)
113);
114
115
116
117
118
119