如何用SQL维护依赖表?

时间:2013-09-13 20:43:27

标签: sql sql-server

在将'Tasks'和'TaskDependency'表添加到现有模式后,我遇到了具有可维护性/参照完整性的墙。

我的表格如下:

Schedule

ScheduleID  Frequency   FrequencyDatePart   StartHour   EndHour DaysOfWeek
1   1   DAY 6   20  1111111

JobTrigger

JobID   JobName NextRun ScheduleID
1   Job1    2013-09-13 16:00:43.350 1

Tasks

TaskID  TaskName    JobID
1   Task1   1
2   Task2   1
3   Task3   1
4   Task4   1

TaskDependency

TaskID  DependsOn
2   1
3   1
4   2
4   3
  • TaskDependency表将用于显示哪些任务依赖于其他任务。

我的问题是:

  1. 我想将TaskID和DependsOn设置为复合键(或添加一个 唯一约束)以防止重复。我怎么能实现这一点 没有将DependsOn列添加到Tasks表中?

  2. 有一个UI可以管理这个功能,就像JobTrigger一样 修改后,最可维护的行动方针是什么 从Tasks表中添加/删除任务?

  3. 我最初的想法是转储所有相关任务,然后重新添加它们。这种方法感觉很乱,我担心随着桌子的增长。

2 个答案:

答案 0 :(得分:2)

您可以在一个表中指向父表中的单个字段的多个外键,因此您没有理由不能:

table TaskDependency:
       TaskID int foreign key -> Tasks.id
       DependsOn int foreign key -> Tasks.id
       UNIQUE KEY (TaskId, DependsOn)

这是完全可以接受的做法。

答案 1 :(得分:0)

Q1

CREATE UNIQUE NONCLUSTERED INDEX UX_TaskDependency ON (TaskId, Dependency)
GO

Q2

您可以在JobTrigger表上使用after触发器来管理您的任务并向表中添加或删除任务。