Database design 数据库设计-四级父子关系

Database design 数据库设计-四级父子关系,database-design,Database Design,这可能会变得有点复杂。来吧 假设我们有这样的亲子关系: Projects: ProjectID ProjectName ProjectRevisions: ProjectRevID ProjectID ProjectRevName Tasks: TaskID ProjectRevID TaskName HoursToComplete 一个项目包含许多任务。一个项目也可以有任意数量的修订 这些表的数据库模式如下所示: Projects: ProjectID ProjectName

这可能会变得有点复杂。来吧

假设我们有这样的亲子关系:

Projects:
ProjectID
ProjectName

ProjectRevisions:
ProjectRevID    
ProjectID
ProjectRevName

Tasks:
TaskID
ProjectRevID
TaskName
HoursToComplete
一个项目包含许多任务。一个项目也可以有任意数量的修订

这些表的数据库模式如下所示:

Projects:
ProjectID
ProjectName

ProjectRevisions:
ProjectRevID    
ProjectID
ProjectRevName

Tasks:
TaskID
ProjectRevID
TaskName
HoursToComplete
tasks表是从另一个表TaskDescriptions填充的,该表包含任务的主列表

我的雇主也需要分报价——这意味着个人可以独立于主报价引用自己的努力。每次进行项目修订时,必须重做子引号,并且必须保留所有旧修订和子引号以供将来参考

这在表模式中会是什么样子?在我看来,这本质上是一个四级列表:一个项目包含一个修订列表,每个修订都包含一个子引号列表,每个子引号都包含一个任务列表


我可能想得太多了,但是非常感谢您的帮助,或者一个任务可能没有或只有一个子引号。这在很大程度上取决于您的上下文。

或者一个任务可能没有或只有一个子引号。很大程度上取决于您的上下文。

修订的定义是什么?视情况而定,我可能会去喝一杯。因此,项目表将存储修订,而不是具有多个修订的项目。您可以通过添加列来跟踪上一个主键、修订开始日期和修订结束日期来完成此操作。进行修订时,旧Id将链接回新记录。新记录的开始时间为现在,结束日期为空。旧记录的结束日期为空,但也需要更新到现在。旧记录仍将指向所有旧的子引号

Project
-----------------
Id
RevisisedFromId
RevisionStartDate
RevisionEndDate
RevisionNumber (optional, this can be calculated)


SubQuote
-----------------   
Id
ProjectId (when a new revision is made, this will still point to the old revision)

修订的定义是什么?视情况而定,我可能会去喝一杯。因此,项目表将存储修订,而不是具有多个修订的项目。您可以通过添加列来跟踪上一个主键、修订开始日期和修订结束日期来完成此操作。进行修订时,旧Id将链接回新记录。新记录的开始时间为现在,结束日期为空。旧记录的结束日期为空,但也需要更新到现在。旧记录仍将指向所有旧的子引号

Project
-----------------
Id
RevisisedFromId
RevisionStartDate
RevisionEndDate
RevisionNumber (optional, this can be calculated)


SubQuote
-----------------   
Id
ProjectId (when a new revision is made, this will still point to the old revision)

在此模型中,
Project
表有一个代理
ProjectID
主键(自动增量)和一个
NaturalKey
,它必须是项目独有的,并且不能更改(如“铺装我的车道25764”)

发布新版本时,会在
Project
表中插入一个新行,
ProjectID
会递增,但会复制
NaturalKey
。修订号已更新,新行中的
RevisionStatus
字段在前一行中设置为“当前”和“过期”。此时,所有任务都指向旧版本,所有引号都指向这些任务,因此历史记录将被保留。使用
NaturalKey
很容易跟踪修订(收集所有项目)

当任务“转入”到新版本时,它将被复制到新行中,新行中有一个新的主键,外键指向新的
项目ID
。这样历史也得以保存

现在必须为新任务完成所有引号,或将外键指向新的
任务ID
的引号复制到新行。这样也可以保留报价历史。


在此模型中,
项目
表有一个代理
ProjectID
主键(自动递增)和一个
NaturalKey
,该主键必须是项目独有的,并且不能更改(如“铺装我的车道25764”)

发布新版本时,会在
Project
表中插入一个新行,
ProjectID
会递增,但会复制
NaturalKey
。修订号已更新,新行中的
RevisionStatus
字段在前一行中设置为“当前”和“过期”。此时,所有任务都指向旧版本,所有引号都指向这些任务,因此历史记录将被保留。使用
NaturalKey
很容易跟踪修订(收集所有项目)

当任务“转入”到新版本时,它将被复制到新行中,新行中有一个新的主键,外键指向新的
项目ID
。这样历史也得以保存

现在必须为新任务完成所有引号,或将外键指向新的
任务ID
的引号复制到新行。这样也可以保留报价历史。

我的雇主也需要分报价——这意味着个人可以独立于主报价引用自己的努力。每次进行项目修订时,必须重做子引号,并且必须保留所有旧修订和子引号以供将来参考

这在表模式中会是什么样子?在我看来,这本质上是一个四级列表:一个项目包含一个修订列表,每个修订都包含一个子引号列表,每个子引号都包含一个任务列表

假设没有任何子报价可能与多个用户相关的实例:

子引号
表格
  • SUBQUOTE\u ID
    ,主键
  • 项目版本ID
    ,fk
  • 用户ID
    ,fk
  • [支柱]
我没有看到对现有数据模型进行任何其他必要的更改

我的雇主也需要分报价——这意味着个人可以独立于主报价引用自己的努力。每次进行项目修订时,必须重做子引号,并且必须保留所有旧修订和子引号以供将来参考

这在表模式中会是什么样子?在我看来,这本质上是一个四级列表:一个项目包含一个