-- ====================================================================================================================
-- ====================================================================================================================
-- 1. 创建一个函数，用于在数据更新时自动修改 update_time 字段
CREATE OR REPLACE FUNCTION set_update_time()
    RETURNS TRIGGER AS
$$
BEGIN
    NEW.update_time = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 2. 创建表（使用 BOOLEAN 替代 SMALLINT for is_deleted）
CREATE TABLE t_user
(
    id          BIGSERIAL PRIMARY KEY,
    username    VARCHAR(60)              NOT NULL UNIQUE,
    password    VARCHAR(60)              NOT NULL,
    create_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    -- WITH TIME ZONE 是更严谨的选择
    update_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    -- 使用 BOOLEAN 逻辑删除，DEFAULT FALSE 对应 '0：未删除'
    is_deleted  BOOLEAN                  NOT NULL DEFAULT FALSE
);
-- 3. 创建触发器，在每次 UPDATE 操作前调用函数
CREATE TRIGGER set_t_user_update_time
    BEFORE UPDATE
    ON t_user
    FOR EACH ROW
EXECUTE FUNCTION set_update_time();
-- 添加注释
COMMENT ON TABLE t_user IS '用户表（优化版）';
COMMENT ON COLUMN t_user.is_deleted IS '逻辑删除：FALSE：未删除 TRUE：已删除';
-- ====================================================================================================================
-- ====================================================================================================================

-- ====================================================================================================================
-- ====================================================================================================================
CREATE TABLE t_user_role
(
    id          BIGSERIAL PRIMARY KEY,
    username    VARCHAR(60)                 NOT NULL,
    role_name   VARCHAR(60)                 NOT NULL, -- 重命名为 role_name 避免关键字冲突
    create_time TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_username ON t_user_role (username);

COMMENT ON COLUMN t_user_role.role_name IS '角色名称';
-- ====================================================================================================================
-- ====================================================================================================================