在将'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
我的问题是:
我想将TaskID和DependsOn设置为复合键(或添加一个 唯一约束)以防止重复。我怎么能实现这一点 没有将DependsOn列添加到Tasks表中?
有一个UI可以管理这个功能,就像JobTrigger一样 修改后,最可维护的行动方针是什么 从Tasks表中添加/删除任务?
我最初的想法是转储所有相关任务,然后重新添加它们。这种方法感觉很乱,我担心随着桌子的增长。
答案 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触发器来管理您的任务并向表中添加或删除任务。