-- Bidirectional friends, one pending request per pair, unidirectional block/remark/report. CREATE TABLE IF NOT EXISTS friend_relations ( user_small BIGINT NOT NULL COMMENT '两人中较小的 user_id,保证同一对用户只有一行', user_big BIGINT NOT NULL COMMENT '两人中较大的 user_id', created_at DATETIME(3) NOT NULL COMMENT '成为好友时间', PRIMARY KEY (user_small, user_big), KEY idx_user_big (user_big) ) COMMENT='双向好友。无单向好友;删除任一方即解除双方关系'; CREATE TABLE IF NOT EXISTS friend_requests ( id BIGINT PRIMARY KEY COMMENT 'Snowflake 申请 id', from_user BIGINT NOT NULL COMMENT '申请人 user_id', to_user BIGINT NOT NULL COMMENT '被申请人 user_id', source TINYINT NOT NULL COMMENT '来源:1=二维码 2=邮箱 3=spark_id', reason VARCHAR(128) NOT NULL DEFAULT '' COMMENT '申请理由', remark VARCHAR(64) NOT NULL DEFAULT '' COMMENT '申请人对对方的备注,同意后写入 friend_remarks', status TINYINT NOT NULL DEFAULT 1 COMMENT '1=待处理 2=已同意 3=已拒绝', created_at DATETIME(3) NOT NULL COMMENT '首次申请时间', updated_at DATETIME(3) NOT NULL COMMENT '最近一次申请或处理时间', UNIQUE KEY uk_from_to (from_user, to_user), KEY idx_to_status (to_user, status, updated_at) ) COMMENT='好友申请。同一对 from→to 只保留一行,重复发起覆盖理由与备注'; CREATE TABLE IF NOT EXISTS friend_remarks ( user_id BIGINT NOT NULL COMMENT '备注所属用户', friend_id BIGINT NOT NULL COMMENT '被备注的用户', remark VARCHAR(64) NOT NULL DEFAULT '' COMMENT '备注名,仅对备注者可见', updated_at DATETIME(3) NOT NULL COMMENT '更新时间', PRIMARY KEY (user_id, friend_id) ) COMMENT='好友备注。单向,解除好友时删除双方备注'; CREATE TABLE IF NOT EXISTS user_blocks ( user_id BIGINT NOT NULL COMMENT '拉黑人 user_id', blocked_id BIGINT NOT NULL COMMENT '被拉黑人 user_id', created_at DATETIME(3) NOT NULL COMMENT '拉黑时间', PRIMARY KEY (user_id, blocked_id), KEY idx_blocked (blocked_id) ) COMMENT='拉黑。单向;拉黑时解除好友关系'; CREATE TABLE IF NOT EXISTS friend_reports ( id BIGINT PRIMARY KEY COMMENT 'Snowflake 投诉 id', user_id BIGINT NOT NULL COMMENT '投诉人 user_id', target_id BIGINT NOT NULL COMMENT '被投诉人 user_id', reason TINYINT NOT NULL COMMENT '投诉类型:1=垃圾 2=骚扰 3=不实身份 4=其他', detail VARCHAR(512) NOT NULL DEFAULT '' COMMENT '投诉说明', created_at DATETIME(3) NOT NULL COMMENT '投诉时间', KEY idx_user_created (user_id, created_at), KEY idx_target (target_id) ) COMMENT='好友投诉。仅记录,不自动拉黑';