21 lines
771 B
SQL
21 lines
771 B
SQL
|
|
CREATE TABLE users (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
username TEXT NOT NULL,
|
||
|
|
display_name TEXT,
|
||
|
|
email TEXT,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
last_seen_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE play_events (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
track_id BIGINT NOT NULL REFERENCES tracks(id) ON DELETE CASCADE,
|
||
|
|
played_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_play_events_user_id ON play_events(user_id);
|
||
|
|
CREATE INDEX idx_play_events_track_id ON play_events(track_id);
|
||
|
|
CREATE INDEX idx_play_events_user_track ON play_events(user_id, track_id);
|
||
|
|
CREATE INDEX idx_play_events_played_at ON play_events(played_at DESC);
|