对包含任意任务的队列的数据库表结构的反馈

时间:2019-05-18 12:57:38

标签: sql-server database-design sql-server-2012

我想在具有SQL Server 2012后端的基于Access VBA构建的现有应用程序中引入队列功能。它应该允许应用程序将具有1:n参数的打开任务存储在队列表中,并在以后处理它们。值得一提的是,对于某些任务,可能需要执行多个处理步骤,直到获得处理所需的所有信息为止。

有关我当前情况的更多信息:

  • 出于合规性原因,数据需要保留在数据库中
  • 每天将处理不超过1500个任务
  • 该应用程序将被重建(后端除外),新的应用程序将大量使用此队列功能
  • 要排队的不同任务的总数以及编号。他们可能需要的参数数量未知

我目前最好的方法-但是在EAV模式中-将由三个表组成:

1。表“ tblQueueItemType”

它包含任务的每种类型(或类别)的定义。

它包含一个ID,一个名称和一个属性计数。此属性计数定义此任务的属性数量。我想稍后使用它来确保状态为“ READY”的所有任务的数据一致性。

  

此表中条目的示例:

     

“ 1”,“生成图书数据库条目”,“ 5”

2。表“ tblQueueItemHeader”

它表示在tblQeueItemType中定义的实例化任务。它们具有任务ID,在tblQeueItemType中定义的相应任务类型,状态以及时间戳。

状态为“打开”(并非所有信息可用),“就绪”(所有信息可用于处理任务)和“完成”(处理时)。

  

此表中条目的示例:

     

“ 2”,“ 1”,“打开”

3。表格“ tblQueueItemAttribute”

它包含任务需要处理的所有信息。它包含一个ID,标题ID,属性类型和属性值。

  

此表的示例条目:

     

“ 1”,“ 2”,“作者”,“ H.G。威尔斯”   “ 1”,“ 2”,“页数”,“ 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'));

很显然,当前的设计不是最佳的。这种用例的最佳方案是什么?我目前的方法可行吗?

非常感谢您!

0 个答案:

没有答案