Спецификация проста: очередь представляет собой набор элементов по порядку.Каждый элемент очереди имеет прецедентный элемент;первый элемент очереди не имеет прецедента.
В любой данный день я реализовал бы это со следующими соотношениями (проверено на Postgres, должно работать на большинстве других СУБД с поддержкой SQL):
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, этот аспект модели может быть гарантирован с помощью триггера.Но это не очень элегантное решение, которое может не применяться в более простых СУБД.Будет ли более простой способ реализации этой конкретной модели, полностью обеспечив ее ограничения, например, исключительно полагаясь на стандартный SQL?