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

sam*_*moz 1 sql sql-server database-design

我试图在我的数据库中创建一个"任务"架构.一个字段是"blockedBy",表示阻止当前任务的另一个任务.

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

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

Mat*_*ix0 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
Run Code Online (Sandbox Code Playgroud)

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

表字段将具有以下数据类型:

TaskID int (identity/autonumber)
TaskName nvarchar(50) not null
TaskDescription nvarchar(200) not null
TaskBlockedBy int
Run Code Online (Sandbox Code Playgroud)

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

BlockID  TaskID  BlockedBy
-------  ------- ----------
1        4       3
2        4       2
Run Code Online (Sandbox Code Playgroud)

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

HTH