You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户每日限两次举报的数据库表设计与实现难题

解决用户每日限两次举报的DDL实现方案

要实现每个用户每日举报次数不超过2次且不可重复举报同一卖家同款商品的需求,仅靠基础约束需要借助一个辅助序号列来限制次数,以下是调整后的DDL代码及说明:

最终DDL代码

CREATE TABLE REPORTS(
    USER_REPORTER VARCHAR(50),  -- 举报用户(对应需求的User列)
    REPORT_DATE DATETIME,       -- 举报日期(对应需求的DATE列)
    SELLER VARCHAR(50),         -- 卖家(对应需求的Buyer列,关联在售商品表)
    ITEM_NAME VARCHAR(50),      -- 商品名称(对应需求的ITEM列)
    ASSESSMENT INT CHECK(ASSESSMENT IN (0, 1)),  -- 审核状态:0未审核/1已审核
    REPORT_SEQ INT CHECK(REPORT_SEQ IN (1, 2)),  -- 当日举报序号:仅允许1或2
    -- 主键:确保同一用户不会重复举报同一卖家的同一商品
    PRIMARY KEY (USER_REPORTER, SELLER, ITEM_NAME),
    -- 外键:关联在售商品表的(Buyer, ITEM)主键
    FOREIGN KEY(SELLER, ITEM_NAME) REFERENCES CATALOGTOSELL,
    -- 约束:举报用户不能是卖家本人
    CHECK (USER_REPORTER <> SELLER),
    -- 唯一约束:限制同一用户每日最多2次举报(序号1和2各一次)
    UNIQUE (USER_REPORTER, REPORT_DATE, REPORT_SEQ)
);

关键约束说明

  1. REPORT_SEQ列+唯一约束:

    • 新增REPORT_SEQ列,通过CHECK约束限制其只能取1或2,结合UNIQUE (USER_REPORTER, REPORT_DATE, REPORT_SEQ),确保同一用户在同一天内最多只能生成两条记录(分别对应序号1和2),直接实现每日限2次的要求。
  2. 主键约束:

    • 将(USER_REPORTER, SELLER, ITEM_NAME)设为主键,确保同一用户不会重复举报同一卖家的同一商品,满足“不可重复举报同一卖家同款商品”的规则。
  3. 其他约束:

    • 保留了原有的外键关联、举报用户与卖家不能为同一人的检查,以及审核状态的取值限制。

对原有代码的修正

原有代码中的UNIQUE (UREPORT, RDATE)会限制同一用户每日只能举报1次,不符合需求,替换为序号列+唯一约束的方式后,即可实现每日最多2次的限制。

内容的提问来源于stack exchange,提问作者nelad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:22:44