Отзыв о структуре таблицы базы данных для очереди, содержащей произвольные задачи - PullRequest
0 голосов
/ 18 мая 2019

Я хочу представить функцию очереди в существующем приложении, построенном на Access VBA с бэкэндом SQL Server 2012.Это должно позволить приложению сохранять открытые задачи с параметрами 1: n в таблице очередей и обрабатывать их позже.Следует упомянуть, что для некоторых задач может потребоваться несколько шагов процесса, пока не будет доступна вся информация, необходимая для их обработки.

Еще немного информации о моей текущей ситуации:

  • Требуются данныедля сохранения в базе данных по соображениям соответствия
  • Каждый день будет обрабатываться не более 1500 задач
  • Приложение будет перестроено (кроме бэкэнда), новое приложение сделает намного большеинтенсивное использование этой функциональности очереди
  • Общее количество различных задач, которые должны быть поставлены в очередь, а также нет.неизвестных параметров

Мой лучший на данный момент подход - однако в схеме EAV - будет состоять из трех таблиц:

1.Таблица "tblQueueItemType"

Содержит определения для каждого типа (или категории) задачи.

Содержит идентификатор, имя и количество атрибутов.Это количество атрибутов определяет количество атрибутов для этой задачи.Позже я хочу использовать его для обеспечения согласованности данных для всех задач со статусом «ГОТОВ».

Пример записи в этой таблице:

«1», «Создать книгу»Запись в базу данных "," 5 "

2.Таблица "tblQueueItemHeader"

Она представляет экземпляры задач, определенные в tblQeueItemType.У них есть идентификатор задачи, соответствующий тип задачи, определенный в tblQeueItemType, статус, а также отметка времени.

Статус либо ОТКРЫТ (не вся информация доступна), ГОТОВ (вся информация доступна для обработки задачи),и СОВЕРШЕНО (при обработке).

Пример записи в этой таблице:

"2", "1", "OPEN"

3.Таблица "tblQueueItemAttribute"

Содержит всю информацию, необходимую для обработки задач.Он содержит идентификатор, идентификатор заголовка, тип атрибута и значение атрибута.

Примеры записей для этой таблицы:

"1", "2", "Автор"," HG Wells "" 1 "," 2 "," No. Pages "," 1234 "

Мои определения таблиц до сих пор:

CREATE TABLE [dbo].[tblQueueItemType](
    id INT NOT NULL IDENTITY (1,1) PRIMARY KEY,
    Name NVARCHAR(20) NOT NULL,
    AttributeCount INT NOT NULL
    )

CREATE TABLE [dbo].[tblQueueItemHeader](
    id INT NOT NULL IDENTITY (1,1) PRIMARY KEY,
    QueueItemTypeId INT NOT NULL,
    Status NVARCHAR(5) NOT NULL,
    Timestamp DATETIME NOT NULL
CONSTRAINT QueueTypeHeader
    FOREIGN KEY (QueueItemTypeId)
    REFERENCES tblQueueItemType (id)
    )

CREATE TABLE [dbo].[tblQueueItemAttribute](
    id INT NOT NULL IDENTITY (1,1) PRIMARY KEY,
    QueueItemHeaderId INT NOT NULL,
    Attribute NVARCHAR(5) NOT NULL,
    Value NVARCHAR(50) NOT NULL,
    Timestamp DATETIME NOT NULL
CONSTRAINT QueueHeaderAttribute
    FOREIGN KEY (QueueItemHeaderId)
    REFERENCES tblQueueItemHeader (id)
    )

ALTER TABLE tblQueueItemHeader 
ADD CONSTRAINT QueueItemHeaderStatus 
CHECK (Status IN ('OPEN', 'READY', 'DONE'));

Очевидно, текущийдизайн неоптимальный.Какова будет лучшая схема для этого варианта использования?Насколько осуществим мой нынешний подход?

Большое спасибо!

...