Files
cfw-attachment/migrations/0001_initial.sql
2026-07-02 07:33:38 -07:00

82 lines
2.4 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- cfw-attachment 初始 schema附件、分类、标签、业务关联、审计
CREATE TABLE attachments (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
status TEXT NOT NULL,
filename TEXT NOT NULL,
content_type TEXT NOT NULL,
byte_size INTEGER,
checksum_sha256 TEXT,
visibility TEXT NOT NULL DEFAULT 'private',
category_id TEXT,
description TEXT,
object_key TEXT,
etag TEXT,
created_by_user_id TEXT NOT NULL,
updated_by_user_id TEXT NOT NULL,
deleted_by_user_id TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
deleted_at TEXT
);
CREATE TABLE attachment_categories (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
slug TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(user_id, slug)
);
CREATE TABLE attachment_tags (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
slug TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(user_id, slug)
);
CREATE TABLE attachment_tag_links (
attachment_id TEXT NOT NULL,
tag_id TEXT NOT NULL,
user_id TEXT NOT NULL,
created_at TEXT NOT NULL,
PRIMARY KEY (attachment_id, tag_id),
FOREIGN KEY (attachment_id) REFERENCES attachments(id),
FOREIGN KEY (tag_id) REFERENCES attachment_tags(id)
);
CREATE TABLE attachment_links (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
attachment_id TEXT NOT NULL,
owner_type TEXT NOT NULL,
owner_id TEXT NOT NULL,
purpose TEXT NOT NULL,
sort_order INTEGER NOT NULL DEFAULT 0,
created_by_user_id TEXT NOT NULL,
created_at TEXT NOT NULL,
UNIQUE(user_id, owner_type, owner_id, purpose, attachment_id)
);
CREATE TABLE attachment_audit_events (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
attachment_id TEXT,
actor_user_id TEXT NOT NULL,
action TEXT NOT NULL,
detail_json TEXT NOT NULL,
created_at TEXT NOT NULL
);
CREATE INDEX idx_attachments_user_status ON attachments(user_id, status, created_at);
CREATE INDEX idx_attachments_user_category ON attachments(user_id, category_id, created_at);
CREATE INDEX idx_attachment_tags_user_slug ON attachment_tags(user_id, slug);
CREATE INDEX idx_attachment_tag_links_tag ON attachment_tag_links(user_id, tag_id);
CREATE INDEX idx_attachment_links_owner ON attachment_links(user_id, owner_type, owner_id, purpose);
CREATE INDEX idx_attachment_audit_user_attachment ON attachment_audit_events(user_id, attachment_id, created_at);