用户每日限两次举报的数据库表设计与实现难题
解决用户每日限两次举报的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) );
关键约束说明
REPORT_SEQ列+唯一约束:
- 新增
REPORT_SEQ列,通过CHECK约束限制其只能取1或2,结合UNIQUE (USER_REPORTER, REPORT_DATE, REPORT_SEQ),确保同一用户在同一天内最多只能生成两条记录(分别对应序号1和2),直接实现每日限2次的要求。
- 新增
主键约束:
- 将
(USER_REPORTER, SELLER, ITEM_NAME)设为主键,确保同一用户不会重复举报同一卖家的同一商品,满足“不可重复举报同一卖家同款商品”的规则。
- 将
其他约束:
- 保留了原有的外键关联、举报用户与卖家不能为同一人的检查,以及审核状态的取值限制。
对原有代码的修正
原有代码中的UNIQUE (UREPORT, RDATE)会限制同一用户每日只能举报1次,不符合需求,替换为序号列+唯一约束的方式后,即可实现每日最多2次的限制。
内容的提问来源于stack exchange,提问作者nelad
相关产品推荐
相关产品推荐

