Without AUTOINCREMENT, SQLite can reassign the highest deleted ROWID to a new row. This is a data integrity bug: a deleted entity's ID could be assigned to a completely different entity, breaking bookmarks, API caches, and URL stability.
51 lines
1.7 KiB
SQL
51 lines
1.7 KiB
SQL
-- Coffee supply chain and equipment tables
|
|
|
|
CREATE TABLE roasters (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
country TEXT NOT NULL,
|
|
city TEXT,
|
|
homepage 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 AUTOINCREMENT,
|
|
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 bags (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
roast_id INTEGER NOT NULL REFERENCES roasts(id) ON DELETE CASCADE,
|
|
roast_date TEXT,
|
|
amount REAL NOT NULL,
|
|
remaining REAL NOT NULL,
|
|
closed BOOLEAN NOT NULL DEFAULT FALSE,
|
|
finished_at TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
);
|
|
CREATE INDEX idx_bags_roast_id ON bags(roast_id);
|
|
CREATE INDEX idx_bags_closed ON bags(closed);
|
|
|
|
CREATE TABLE gear (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
category TEXT NOT NULL CHECK (category IN ('grinder', 'brewer', 'filter_paper')),
|
|
make TEXT NOT NULL,
|
|
model TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
);
|
|
CREATE INDEX idx_gear_category ON gear(category);
|