【发布时间】:2018-01-25 20:52:12
【问题描述】:
在数据库系统设计领域迈出第一步,我的任务是使用 PostgreSQL 环境准备一个与爱好相关的数据库。
我的一张表将存储有关可收藏棋盘游戏已发布扩展包的一些详细信息。所述扩展以编号的波浪形式发布,一次发布几个。我想将波数作为我的表格的一列,并有一定的限制 - 数字必须是:
- 正数(>0);
- 不大于表中找到的当前最大值加一 (
因此,来自单个波的多个扩展可以插入到表中,并且编号波链不会被破坏。我尝试使用 CHECK 语句设置这些条件
CREATE TABLE Expansions
(
ID INTEGER NOT NULL,
Name VARCHAR(50) NOT NULL COLLATE PXW_PLK,
WaveNumber INTEGER NOT NULL,
ReleaseDate DATE NOT NULL,
CONSTRAINT Expansions_PK PRIMARY KEY (ID),
CONSTRAINT Expansions_U UNIQUE (Name),
CONSTRAINT Expansions_WaveNumber CHECK (WaveNumber BETWEEN 1 and MAX(WaveNumber) + 1)
);
但是这种方法会导致异常
Message: isc_dsql_prepare failed
SQL Message : -104
Invalid token
Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Invalid aggregate reference
我很难确定:
- 我的方法完全错误并且对不同的 SQL 构造执行我的限制调用?
- 我未能在 CHECK 语句中适当地放置 MAX() 调用?
【问题讨论】:
标签: sql postgresql database-design aggregate-functions