43 lines
1.3 KiB
SQL
43 lines
1.3 KiB
SQL
PRAGMA foreign_keys = ON;
|
|
|
|
CREATE TABLE roasters (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
country TEXT NOT NULL,
|
|
city TEXT,
|
|
homepage TEXT,
|
|
notes TEXT,
|
|
slug TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
);
|
|
|
|
CREATE UNIQUE INDEX idx_roasters_slug ON roasters(slug);
|
|
|
|
CREATE TABLE roasts (
|
|
id INTEGER PRIMARY KEY,
|
|
roaster_id INTEGER NOT NULL REFERENCES roasters(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
origin TEXT,
|
|
region TEXT,
|
|
producer TEXT,
|
|
process TEXT,
|
|
tasting_notes TEXT,
|
|
slug TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
);
|
|
|
|
CREATE INDEX idx_roasts_roaster_id ON roasts(roaster_id);
|
|
CREATE UNIQUE INDEX idx_roasts_roaster_slug ON roasts(roaster_id, slug);
|
|
|
|
CREATE TABLE timeline_events (
|
|
id INTEGER PRIMARY KEY,
|
|
entity_type TEXT NOT NULL CHECK (entity_type IN ('roaster', 'roast')),
|
|
entity_id INTEGER NOT NULL,
|
|
occurred_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
title TEXT NOT NULL,
|
|
details_json TEXT,
|
|
tasting_notes_json TEXT
|
|
);
|
|
|
|
CREATE INDEX idx_timeline_events_entity ON timeline_events(entity_type, entity_id);
|
|
CREATE INDEX idx_timeline_events_occurred_at ON timeline_events(occurred_at);
|