| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- -- symbols table
- -- Stores metadata for each trading symbol
- CREATE TABLE symbols (
- id SERIAL PRIMARY KEY,
- symbol VARCHAR(50) NOT NULL UNIQUE,
- base_asset VARCHAR(50),
- quote_asset VARCHAR(50),
- exchange VARCHAR(50),
- instrument_type VARCHAR(20) CHECK (instrument_type IN ('crypto', 'stock', 'forex', 'commodity', 'index')),
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMPTZ DEFAULT NOW(),
- updated_at TIMESTAMPTZ DEFAULT NOW()
- );
- CREATE INDEX idx_symbols_exchange ON symbols(exchange);
- CREATE INDEX idx_symbols_type ON symbols(instrument_type);
- -- candles table
- -- Stores multi-timeframe OHLCV data for each symbol
- CREATE TABLE candles (
- id BIGSERIAL PRIMARY KEY,
- symbol_id INT NOT NULL REFERENCES symbols(id) ON DELETE CASCADE,
- timeframe ENUM('15m', '30m', '1h', '1D', '1W', '1M') NOT NULL DEFAULT '1h',
- open_time TIMESTAMPTZ NOT NULL,
- close_time TIMESTAMPTZ NOT NULL,
- open NUMERIC(18,8) NOT NULL,
- high NUMERIC(18,8) NOT NULL,
- low NUMERIC(18,8) NOT NULL,
- close NUMERIC(18,8) NOT NULL,
- volume NUMERIC(20,8),
- trades_count INT,
- quote_volume NUMERIC(20,8),
- created_at TIMESTAMPTZ DEFAULT NOW(),
- updated_at TIMESTAMPTZ DEFAULT NOW()
- );
- CREATE UNIQUE INDEX idx_candles_symbol_time_timeframe ON candles(symbol_id, open_time, timeframe);
- CREATE INDEX idx_candles_open_time_timeframe ON candles(open_time, timeframe);
- -- live_prices table
- -- Stores the latest live market prices per symbol
- CREATE TABLE live_prices (
- symbol_id INT PRIMARY KEY REFERENCES symbols(id) ON DELETE CASCADE,
- price NUMERIC(18,8) NOT NULL,
- bid NUMERIC(18,8),
- ask NUMERIC(18,8),
- bid_size NUMERIC(18,8),
- ask_size NUMERIC(18,8),
- last_updated TIMESTAMPTZ DEFAULT NOW(),
- created_at TIMESTAMPTZ DEFAULT NOW(),
- updated_at TIMESTAMPTZ DEFAULT NOW()
- );
- CREATE INDEX idx_live_prices_price ON live_prices(price);
|