Реализация модели очереди в реляционной базе данных - PullRequest
0 голосов
/ 16 мая 2018

Спецификация проста: очередь представляет собой набор элементов по порядку.Каждый элемент очереди имеет прецедентный элемент;первый элемент очереди не имеет прецедента.

В любой данный день я реализовал бы это со следующими соотношениями (проверено на 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?

...