39 lines
1.1 KiB
SQL
39 lines
1.1 KiB
SQL
-- Create recipes table
|
|
CREATE TABLE recipes (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
ingredients TEXT NOT NULL, -- JSON array
|
|
instructions TEXT NOT NULL, -- JSON array of steps
|
|
source_url TEXT,
|
|
notes TEXT,
|
|
servings INTEGER,
|
|
prep_time_minutes INTEGER,
|
|
cook_time_minutes INTEGER,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL,
|
|
last_cooked_at INTEGER
|
|
);
|
|
|
|
-- Create tags table
|
|
CREATE TABLE tags (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT UNIQUE NOT NULL,
|
|
color TEXT -- Hex color for UI
|
|
);
|
|
|
|
-- Create recipe_tags join table
|
|
CREATE TABLE recipe_tags (
|
|
recipe_id INTEGER NOT NULL,
|
|
tag_id INTEGER NOT NULL,
|
|
PRIMARY KEY (recipe_id, tag_id),
|
|
FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Indexes for efficiency
|
|
CREATE INDEX idx_recipes_title ON recipes(title);
|
|
CREATE INDEX idx_recipes_created_at ON recipes(created_at DESC);
|
|
CREATE INDEX idx_recipe_tags_recipe ON recipe_tags(recipe_id);
|
|
CREATE INDEX idx_recipe_tags_tag ON recipe_tags(tag_id);
|