26 lines
1,006 B
MySQL
26 lines
1,006 B
MySQL
|
|
-- Migration: Create track_plays table for playback analytics
|
||
|
|
-- T0291: Create Track Playback Analytics Database Model
|
||
|
|
|
||
|
|
CREATE TABLE track_plays (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
track_id BIGINT NOT NULL REFERENCES tracks(id) ON DELETE CASCADE,
|
||
|
|
user_id BIGINT REFERENCES users(id) ON DELETE SET NULL,
|
||
|
|
duration INTEGER NOT NULL,
|
||
|
|
played_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
device VARCHAR(100),
|
||
|
|
ip_address VARCHAR(45),
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
deleted_at TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes for performance
|
||
|
|
CREATE INDEX idx_track_plays_track_id ON track_plays(track_id);
|
||
|
|
CREATE INDEX idx_track_plays_user_id ON track_plays(user_id);
|
||
|
|
CREATE INDEX idx_track_plays_played_at ON track_plays(played_at DESC);
|
||
|
|
CREATE INDEX idx_track_plays_track_played ON track_plays(track_id, played_at DESC);
|
||
|
|
|
||
|
|
-- Index for soft deletes
|
||
|
|
CREATE INDEX idx_track_plays_deleted_at ON track_plays(deleted_at);
|
||
|
|
|