chore: 현재 작업 중간 커밋
This commit is contained in:
93
playground_schema.sql
Normal file
93
playground_schema.sql
Normal file
@@ -0,0 +1,93 @@
|
||||
-- Multi-project playground schema (MySQL)
|
||||
-- Purpose: keep many small projects in one database using project_key namespace.
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS projects (
|
||||
project_key VARCHAR(100) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT NULL,
|
||||
meta_json LONGTEXT NULL,
|
||||
created_at DATETIME(3) NOT NULL,
|
||||
updated_at DATETIME(3) NOT NULL,
|
||||
PRIMARY KEY (project_key),
|
||||
KEY idx_projects_updated_at (updated_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS project_documents (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
project_key VARCHAR(100) NOT NULL,
|
||||
doc_type VARCHAR(100) NOT NULL,
|
||||
doc_key VARCHAR(191) NOT NULL,
|
||||
data_json LONGTEXT NOT NULL,
|
||||
meta_json LONGTEXT NULL,
|
||||
created_at DATETIME(3) NOT NULL,
|
||||
updated_at DATETIME(3) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_project_documents_namespace (project_key, doc_type, doc_key),
|
||||
KEY idx_project_documents_project_type_updated (project_key, doc_type, updated_at),
|
||||
KEY idx_project_documents_project_updated (project_key, updated_at),
|
||||
CONSTRAINT fk_project_documents_project_key
|
||||
FOREIGN KEY (project_key) REFERENCES projects(project_key)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS project_events (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
project_key VARCHAR(100) NOT NULL,
|
||||
stream VARCHAR(100) NOT NULL,
|
||||
event_type VARCHAR(100) NOT NULL,
|
||||
payload_json LONGTEXT NOT NULL,
|
||||
observed_at DATETIME(3) NOT NULL,
|
||||
created_at DATETIME(3) NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_project_events_project_stream_created (project_key, stream, created_at),
|
||||
KEY idx_project_events_project_created (project_key, created_at),
|
||||
CONSTRAINT fk_project_events_project_key
|
||||
FOREIGN KEY (project_key) REFERENCES projects(project_key)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS project_settings (
|
||||
project_key VARCHAR(100) NOT NULL,
|
||||
setting_key VARCHAR(191) NOT NULL,
|
||||
setting_value LONGTEXT NOT NULL,
|
||||
updated_at DATETIME(3) NOT NULL,
|
||||
PRIMARY KEY (project_key, setting_key),
|
||||
KEY idx_project_settings_updated_at (updated_at),
|
||||
CONSTRAINT fk_project_settings_project_key
|
||||
FOREIGN KEY (project_key) REFERENCES projects(project_key)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Seed one project namespace for this repository (optional)
|
||||
INSERT INTO projects (
|
||||
project_key,
|
||||
name,
|
||||
description,
|
||||
meta_json,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES (
|
||||
'air-watcher',
|
||||
'Air Watcher',
|
||||
'Flight price watcher dashboard and alerts',
|
||||
JSON_OBJECT('owner', 'team', 'status', 'active'),
|
||||
UTC_TIMESTAMP(3),
|
||||
UTC_TIMESTAMP(3)
|
||||
)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
name = VALUES(name),
|
||||
description = VALUES(description),
|
||||
meta_json = VALUES(meta_json),
|
||||
updated_at = VALUES(updated_at);
|
||||
|
||||
-- Mapping guide for Air-Watcher:
|
||||
-- 1) watch row -> project_documents (doc_type='watch', doc_key=watch_id)
|
||||
-- 2) app settings -> project_settings (setting_key='global_controls' etc.)
|
||||
-- 3) user profiles -> project_settings (setting_key='user_profiles')
|
||||
-- 4) watch alert events -> project_events (stream='watch_events')
|
||||
Reference in New Issue
Block a user