我该如何设计这个数据库场景?

时间:2010-07-11 03:04:23

标签: sql sql-server database-design

我正在尝试在我的数据库中创建“任务”架构。一个字段是“blockedBy”,表示阻止当前任务的另一个任务。

我是SQL Server和数据库的新手。如何正确创建表格?似乎唯一有效的选项是数字或文本。

我是否应该将另一个“任务”的ID号存储在“blockedBy”字段中,还是有更好的方法?

2 个答案:

答案 0 :(得分:6)

我假设:

  • 您在SQL Server的数据库中有一个名为“Tasks”的架构
  • 然后你有一个存储任务信息的表(比如AllTask​​s)
  • 您希望有一个名为blockedby的字段,指示哪个现有任务阻止当前任务

这是我的列提议,以及数据如何显示的示例:

TaskID   TaskName    TaskDescription .....   TaskBlockedBy
------   --------    ---------------         -------------
1        Eat         Eat food                <NULL>
2        Drink       Drink, um, water        <NULL>
3        Sleep       Ah, peace!              <NULL>
4        Wake Up     Crap                    3

第3行中的唤醒任务被第3行中的睡眠任务阻止。

表字段的数据类型为:

TaskID int (identity/autonumber)
TaskName nvarchar(50) not null
TaskDescription nvarchar(200) not null
TaskBlockedBy int

如果您预计会阻止任务的多个现有任务,请将表拆分为2个表:AllTask​​s和BlockedTasks。 AllTask​​s表将不再具有TaskBlockedBy字段,BlockedTasks及其数据将如下所示:

BlockID  TaskID  BlockedBy
-------  ------- ----------
1        4       3
2        4       2

这表示睡眠时阻止了唤醒任务以及用户在睡觉前喝了什么。

HTH

答案 1 :(得分:3)

如果可能存在与一个任务关联的多个阻塞任务,则需要引入另一个表,例如“BlockingTasks”,其具有任务的ID和阻止它的任务的ID。不要像CVS那样做,因为很难对查询进行查询。