98 lines
3.4 KiB
MySQL
98 lines
3.4 KiB
MySQL
|
|
-- FloorVisualizer Database Schema
|
||
|
|
-- Generated from PostgreSQL
|
||
|
|
|
||
|
|
-- Users
|
||
|
|
CREATE TABLE IF NOT EXISTS users (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
username TEXT NOT NULL UNIQUE,
|
||
|
|
password TEXT NOT NULL DEFAULT '',
|
||
|
|
name TEXT NOT NULL DEFAULT '',
|
||
|
|
avatar_url TEXT NOT NULL DEFAULT '',
|
||
|
|
created_at TIMESTAMPTZ DEFAULT now(),
|
||
|
|
updated_at TIMESTAMPTZ DEFAULT now()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Products
|
||
|
|
CREATE TABLE IF NOT EXISTS products (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
brand TEXT DEFAULT '',
|
||
|
|
group_name TEXT DEFAULT '',
|
||
|
|
sku TEXT DEFAULT '',
|
||
|
|
series_name TEXT DEFAULT '',
|
||
|
|
style_name TEXT DEFAULT '',
|
||
|
|
category TEXT DEFAULT '',
|
||
|
|
material TEXT DEFAULT '',
|
||
|
|
color_tone TEXT DEFAULT '',
|
||
|
|
finish TEXT DEFAULT '',
|
||
|
|
price_per_sqft NUMERIC(10,2) DEFAULT 0,
|
||
|
|
price_tier TEXT DEFAULT '',
|
||
|
|
price_source TEXT DEFAULT '',
|
||
|
|
main_image_url TEXT DEFAULT '',
|
||
|
|
room_image_url TEXT DEFAULT '',
|
||
|
|
source_url TEXT DEFAULT '',
|
||
|
|
description TEXT DEFAULT '',
|
||
|
|
status TEXT DEFAULT '',
|
||
|
|
coverage_sqft_per_box NUMERIC(10,2) DEFAULT 0,
|
||
|
|
wood_species TEXT DEFAULT '',
|
||
|
|
size_label TEXT DEFAULT '',
|
||
|
|
width_in NUMERIC(10,2),
|
||
|
|
length_in NUMERIC(10,2)
|
||
|
|
);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_p_sku ON products(sku);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_p_cat ON products(category);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_p_brand ON products(brand);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_p_style ON products(style_name);
|
||
|
|
|
||
|
|
-- Articles
|
||
|
|
CREATE TABLE IF NOT EXISTS articles (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
title TEXT NOT NULL DEFAULT '',
|
||
|
|
summary TEXT NOT NULL DEFAULT '',
|
||
|
|
content TEXT NOT NULL DEFAULT '',
|
||
|
|
cover_url TEXT NOT NULL DEFAULT '',
|
||
|
|
image_urls JSONB NOT NULL DEFAULT '[]',
|
||
|
|
created_at TIMESTAMPTZ DEFAULT now()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Favorites
|
||
|
|
CREATE TABLE IF NOT EXISTS favorites (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
user_id TEXT NOT NULL,
|
||
|
|
sku TEXT NOT NULL,
|
||
|
|
brand TEXT DEFAULT '',
|
||
|
|
series_name TEXT DEFAULT '',
|
||
|
|
style_name TEXT DEFAULT '',
|
||
|
|
main_image_url TEXT DEFAULT '',
|
||
|
|
category TEXT DEFAULT '',
|
||
|
|
material TEXT DEFAULT '',
|
||
|
|
color_tone TEXT DEFAULT '',
|
||
|
|
price_per_sqft NUMERIC(10,2) DEFAULT 0,
|
||
|
|
created_at TIMESTAMPTZ DEFAULT now(),
|
||
|
|
UNIQUE(user_id, sku)
|
||
|
|
);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_fav_user ON favorites(user_id);
|
||
|
|
|
||
|
|
-- Projects
|
||
|
|
CREATE TABLE IF NOT EXISTS projects (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
user_id TEXT NOT NULL,
|
||
|
|
name TEXT NOT NULL DEFAULT 'Untitled',
|
||
|
|
original_image_url TEXT DEFAULT '',
|
||
|
|
generated_image_url TEXT DEFAULT '',
|
||
|
|
floor_style TEXT DEFAULT '',
|
||
|
|
pattern TEXT DEFAULT '',
|
||
|
|
room_type TEXT DEFAULT '',
|
||
|
|
created_at TIMESTAMPTZ DEFAULT now(),
|
||
|
|
updated_at TIMESTAMPTZ DEFAULT now()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Brand Views
|
||
|
|
CREATE TABLE IF NOT EXISTS user_brand_views (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
user_id TEXT NOT NULL,
|
||
|
|
brand TEXT NOT NULL,
|
||
|
|
created_at TIMESTAMPTZ DEFAULT now()
|
||
|
|
);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_ubv_user ON user_brand_views(user_id, brand);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_ubv_time ON user_brand_views(user_id, created_at);
|