RelationalDesign: ddl.3.sql

File ddl.3.sql, 3.5 KB (added by 231020, 4 months 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 UNIQUE
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_id BIGINT NOT NULL,
46 portfolio_id BIGINT NOT NULL,
47 CONSTRAINT fk_ph_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios (id),
48 CONSTRAINT fk_ph_stock FOREIGN KEY (stock_id) REFERENCES stock(id)
49);
50
51CREATE TABLE IF NOT EXISTS stock_history
52(
53 id BIGINT NOT NULL PRIMARY KEY,
54 price DOUBLE PRECISION NOT NULL,
55 stock_id BIGINT NOT NULL,
56 timestamp DATE NOT NULL,
57 CONSTRAINT fk_stock FOREIGN KEY (stock_id) REFERENCES stock(id)
58);
59
60CREATE TABLE IF NOT EXISTS trade_request
61(
62 id BIGINT NOT NULL PRIMARY KEY,
63 portfolio_id BIGINT,
64 price_per_unit DOUBLE PRECISION NOT NULL,
65 quantity INTEGER NOT NULL,
66 status VARCHAR(255),
67 stock_symbol VARCHAR(255),
68 timestamp TIMESTAMP,
69 type VARCHAR(255),
70 CONSTRAINT fk_trade_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios(id)
71);
72
73CREATE TABLE IF NOT EXISTS transactions
74(
75 id BIGINT NOT NULL PRIMARY KEY,
76 type VARCHAR(255),
77 quantity INTEGER,
78 price DOUBLE PRECISION,
79 timestamp TIMESTAMP NOT NULL,
80 origin VARCHAR(255) NOT NULL CHECK (origin IN ('INTERNAL','EXTERNAL')),
81 user_id BIGINT,
82 stock_id BIGINT,
83 CONSTRAINT fk_tx_user FOREIGN KEY (user_id) REFERENCES users (id),
84 CONSTRAINT fk_tx_stock FOREIGN KEY (stock_id) REFERENCES stock (id)
85);
86
87CREATE TABLE IF NOT EXISTS watchlist
88(
89 id BIGINT NOT NULL PRIMARY KEY,
90 price_above DOUBLE PRECISION,
91 price_below DOUBLE PRECISION,
92 stock_id BIGINT,
93 user_id BIGINT,
94 CONSTRAINT fk_watch_stock FOREIGN KEY (stock_id) REFERENCES stock (id),
95 CONSTRAINT fk_watch_user FOREIGN KEY (user_id) REFERENCES users (id)
96);
97
98CREATE TABLE IF NOT EXISTS user_auth_providers
99(
100 user_id BIGINT NOT NULL,
101 auth_providers VARCHAR(255) NOT NULL CHECK (auth_providers IN ('INTERNAL','GOOGLE')),
102 CONSTRAINT fk_auth_user FOREIGN KEY (user_id) REFERENCES users (id)
103);
104
105CREATE TABLE IF NOT EXISTS oauth_pending_links
106(
107 token VARCHAR(255) NOT NULL PRIMARY KEY,
108 email VARCHAR(255) NOT NULL,
109 provider VARCHAR(255) NOT NULL CHECK (provider IN ('GOOGLE','INTERNAL')),
110 expires_at TIMESTAMP NOT NULL,
111 created_at TIMESTAMP NOT NULL,
112 user_id BIGINT NOT NULL,
113 CONSTRAINT fk_pending_user FOREIGN KEY (user_id) REFERENCES users(id)
114);
115
116
117
118
119
120