Database design 设计具有复杂依赖关系的数据库?(与日程安排有关)
我正在寻求设计一个数据库来存储一些复杂依赖项的信息,并且可以真正使用正确方向上的一个点。我的谷歌搜索没有发现任何相关信息,但也许你有一个很棒的网络链接 为了提供上下文,它围绕着作业调度,并将提供分析。不,我不想创建作业调度程序 关于数据的一些注释Database design 设计具有复杂依赖关系的数据库?(与日程安排有关),database-design,scheduled-tasks,Database Design,Scheduled Tasks,我正在寻求设计一个数据库来存储一些复杂依赖项的信息,并且可以真正使用正确方向上的一个点。我的谷歌搜索没有发现任何相关信息,但也许你有一个很棒的网络链接 为了提供上下文,它围绕着作业调度,并将提供分析。不,我不想创建作业调度程序 关于数据的一些注释 数据可以是递归的。作业C依赖于作业B,作业B依赖于作业A 可能存在一对多依赖关系:作业C可能依赖于作业B1和作业B2 可能存在复杂的依赖关系:作业C可能依赖于(作业B1或作业B2)和作业A 可能有一个令人困惑的变量…时间:工作a或上午10点 以下是一
- 数据可以是递归的。作业C依赖于作业B,作业B依赖于作业A
- 可能存在一对多依赖关系:作业C可能依赖于作业B1和作业B2
- 可能存在复杂的依赖关系:作业C可能依赖于(作业B1或作业B2)和作业A
- 可能有一个令人困惑的变量…时间:工作a或上午10点
- 以下是一种方法:
因此,对于您描述的案例:
第一。作业C依赖于作业B,而作业B依赖于作业A
INSERT INTO dependency (type_id, job_id, depend_on_job_id) VALUES (SIMPLE, JOB B, JOB A);
INSERT INTO dependency (type_id, job_id, depend_on_job_id) VALUES (SIMPLE, JOB C, JOB B);
第2项。作业C可能依赖于作业B1和作业B2
INSERT INTO dependency (type_id, depend_on_job_id) VALUES (SIMPLE, JOB B2);
INSERT INTO dependency (type_id, job_id, depend_on_job_id, depend_on_dependency_id, operator_type_id) VALUES (COMPLEX, JOB C, JOB B1, DEPENDENCY D1 (from previous insert), AND);
第3项。作业C可能依赖于(作业B1或作业B2)和作业A
INSERT INTO dependency (type_id, depend_on_job_id) VALUES (SIMPLE, JOB B2);
INSERT INTO dependency (type_id, depend_on_job_id, depend_on_dependency_id, operator_type_id) VALUES (COMPLEX, JOB B1, DEPENDENCY D1 (from previous insert), OR);
INSERT INTO dependency (type_id, job_id, depend_on_job_id, depend_on_dependency_id, operator_type_id) VALUES (COMPLEX, JOB C, JOB A, DEPENDENCY D2 (from previous insert), AND);
第4项。作业C可能取决于作业A或上午10点
INSERT INTO dependency (type_id, condition) VALUES (TIME-BASED, '10 AM');
INSERT INTO dependency (type_id, job_id, depend_on_job_id, depend_on_dependency_id, operator_type_id) VALUES (COMPLEX, JOB C, JOB A, DEPENDENCY D1 (from previous insert), OR);
此模型可能会有更新:您可能希望将依赖于\u作业\u id
和依赖于\u依赖性\u id
拆分为多个列(依赖于\u作业1\u id
,依赖于\u作业2\u id
,等等)。在某些情况下,这会降低树的深度(如caseNo 2.,然后只需一个插入即可实现)。当然,模型会跳过索引、唯一键等
此外,使用SQL阅读此树是一个完全不同的故事
INSERT INTO dependency (type_id, condition) VALUES (TIME-BASED, '10 AM');
INSERT INTO dependency (type_id, job_id, depend_on_job_id, depend_on_dependency_id, operator_type_id) VALUES (COMPLEX, JOB C, JOB A, DEPENDENCY D1 (from previous insert), OR);