44 lines
1.6 KiB
SQL
44 lines
1.6 KiB
SQL
-- 1. 创建足迹表
|
|
CREATE TABLE IF NOT EXISTS ml_user_footprints (
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
|
user_id UUID NOT NULL DEFAULT auth.uid(),
|
|
product_id UUID NOT NULL, -- 如果 ml_products 表存在,可以改为: product_id UUID NOT NULL REFERENCES ml_products(id) ON DELETE CASCADE
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(user_id, product_id) -- 复合唯一索引,防止同一商品重复记录
|
|
);
|
|
|
|
-- 2. 添加表注释
|
|
COMMENT ON TABLE ml_user_footprints IS '用户浏览足迹表';
|
|
COMMENT ON COLUMN ml_user_footprints.user_id IS '用户ID';
|
|
COMMENT ON COLUMN ml_user_footprints.product_id IS '商品ID';
|
|
COMMENT ON COLUMN ml_user_footprints.updated_at IS '最后访问时间';
|
|
|
|
-- 3. 启用行级安全策略 (RLS)
|
|
ALTER TABLE ml_user_footprints ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- 4. 添加安全策略 (增删改查仅限本人)
|
|
-- 查看策略
|
|
CREATE POLICY "Users can view their own footprints"
|
|
ON ml_user_footprints FOR SELECT
|
|
USING (auth.uid() = user_id);
|
|
|
|
-- 插入策略
|
|
CREATE POLICY "Users can insert their own footprints"
|
|
ON ml_user_footprints FOR INSERT
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
-- 更新策略
|
|
CREATE POLICY "Users can update their own footprints"
|
|
ON ml_user_footprints FOR UPDATE
|
|
USING (auth.uid() = user_id);
|
|
|
|
-- 删除策略
|
|
CREATE POLICY "Users can delete their own footprints"
|
|
ON ml_user_footprints FOR DELETE
|
|
USING (auth.uid() = user_id);
|
|
|
|
-- 5. 建立索引以优化查询速度
|
|
CREATE INDEX IF NOT EXISTS idx_footprints_user_updated
|
|
ON ml_user_footprints (user_id, updated_at DESC);
|