-- PostgreSQL数据库表结构脚本
-- 学号：23210441
-- 姓名：ct
-- 创建顾客表：customer_cstatm23210441

-- 先删除表（如果存在）
DROP TABLE IF EXISTS customer_cstatm23210441;

-- 创建表
CREATE TABLE customer_cstatm23210441 (
    -- 主键：顾客ID
    cid VARCHAR(20) PRIMARY KEY,
    
    -- 顾客姓名
    cname VARCHAR(100) NOT NULL,
    
    -- 顾客PIN码（密码）
    cpin VARCHAR(20) NOT NULL,
    
    -- 登录时间
    idatetime TIMESTAMP,
    
    -- 登录次数
    itimes INTEGER DEFAULT 0,
    
    -- 登录失败次数
    istimes INTEGER DEFAULT 0,
    
    -- 账户状态：1-正常，0-锁定
    status CHAR(1) DEFAULT '1',
    
    -- 创建时间
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    -- 更新时间
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 添加索引以提高查询性能
CREATE INDEX idx_customer_id ON customer_cstatm23210441(cid);

-- 创建更新时间的触发器函数
CREATE OR REPLACE FUNCTION update_customer_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_time = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 创建触发器
CREATE TRIGGER customer_update_timestamp
BEFORE UPDATE ON customer_cstatm23210441
FOR EACH ROW
EXECUTE FUNCTION update_customer_timestamp();

-- 插入示例数据
INSERT INTO customer_cstatm23210441 (cid, cname, cpin, itimes, istimes)
VALUES 
    ('1001', '张三', '123456', 0, 0),
    ('1002', '李四', '654321', 0, 0),
    ('1003', '王五', '111111', 0, 0),
    ('1004', '赵六', '222222', 0, 0),
    ('1005', '钱七', '333333', 0, 0);

-- 查看插入的数据
SELECT * FROM customer_cstatm23210441;

-- 表结构说明
/*
表结构说明：
- cid: 顾客ID，主键，用于唯一标识顾客
- cname: 顾客姓名
- cpin: 顾客PIN码，用于登录验证
- idatetime: 最后登录时间
- itimes: 累计登录次数
- istimes: 连续登录失败次数
- status: 账户状态，用于在多次失败后锁定账户
- create_time: 记录创建时间
- update_time: 记录最后更新时间
*/

-- 使用说明
/*
使用说明：
1. 在PostgreSQL数据库中执行此脚本创建表结构
2. 默认连接参数：
   - 数据库：postgres
   - 用户：postgres
   - 密码：123456
   - 端口：5432
3. 系统会自动管理登录次数和失败次数
*/