trading-platform-database-v2/ddl/schemas/trading/tables/07-trades.sql
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

50 lines
1.8 KiB
SQL

-- ============================================================================
-- Schema: trading
-- Table: trades
-- Description: Historial detallado de trades ejecutados
-- Dependencies: trading.orders, trading.positions
-- ============================================================================
CREATE TABLE trading.trades (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Referencias
order_id UUID NOT NULL REFERENCES trading.orders(id) ON DELETE CASCADE,
position_id UUID REFERENCES trading.positions(id) ON DELETE SET NULL,
-- Identificador externo (de exchange)
external_trade_id VARCHAR(100),
-- Detalles del trade
symbol VARCHAR(20) NOT NULL,
side trading.order_side NOT NULL,
price DECIMAL(20,8) NOT NULL,
quantity DECIMAL(20,8) NOT NULL,
quote_quantity DECIMAL(20,8) NOT NULL, -- price * quantity
-- Comisión
commission DECIMAL(20,8) DEFAULT 0,
commission_asset VARCHAR(10),
-- Metadata
is_maker BOOLEAN DEFAULT false,
metadata JSONB DEFAULT '{}',
-- Timestamps
executed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Índices
CREATE INDEX idx_trades_order ON trading.trades(order_id);
CREATE INDEX idx_trades_position ON trading.trades(position_id);
CREATE INDEX idx_trades_symbol ON trading.trades(symbol);
CREATE INDEX idx_trades_executed ON trading.trades(executed_at DESC);
CREATE INDEX idx_trades_external ON trading.trades(external_trade_id);
-- Comentarios
COMMENT ON TABLE trading.trades IS 'Historial detallado de trades ejecutados (fills individuales)';
COMMENT ON COLUMN trading.trades.external_trade_id IS 'ID del trade en el exchange externo';
COMMENT ON COLUMN trading.trades.quote_quantity IS 'Valor total del trade (price * quantity)';
COMMENT ON COLUMN trading.trades.is_maker IS 'true si el trade fue maker, false si fue taker';