在关系数据库中实现队列模型

时间:2018-05-16 14:12:10

标签: sql relational-database

规范很简单:队列是按顺序排列的一组元素。队列的每个元素都有一个先例元素;队列的第一个元素没有先例。

在任何一天,我都会用以下关系来实现它(在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?

0 个答案:

没有答案