规范很简单:队列是按顺序排列的一组元素。队列的每个元素都有一个先例元素;队列的第一个元素没有先例。
在任何一天,我都会用以下关系来实现它(在Postgres上测试,应该适用于大多数其他支持SQL的DBMS):
CREATE TABLE queue
(
id INT PRIMARY KEY,
name VARCHAR
)
CREATE TABLE element
(
id INT PRIMARY KEY,
name VARCHAR
id_precedent INT REFERENCES element(id),
id_queue INT REFERENCES queue(id) NOT NULL
)
现在,规范中的一个前提在结构上没有保证。由于队列的第一个元素没有先例,因此NOT NULL
约束无法应用于id_predecent
列。很容易看出element
表中的数据如何快速偏离上面指定的模型。
在具有Postgres等高级功能的DBMS中,可以通过触发器保证模型的这个方面。但这是一个不太优雅的解决方案,可能不适用于更简单的DBMS。是否有更简单的方法来实现这个特定模型,完全执行其约束,例如,完全依赖于标准SQL?