Database design 一个坏主意是不是一个试图获得更好表现的关系循环?

Database design 一个坏主意是不是一个试图获得更好表现的关系循环?,database-design,Database Design,我有这个模型: 我有员工,他们总是在任何项目中执行相同的任务。此外,对于一项任务,员工需要一些材料,但对于一项任务,材料并不总是相同的,但这取决于任务必须完成的项目 在我的例子中,我想知道一个项目的员工,所以根据这个模型,我必须得到项目的所有任务,然后是任务的员工。因此,有时可能需要获得很多行 然而,我想知道,如果我在项目和员工之间建立直接关系,我可以直接获得这些信息。但如果我没有错的话,这可能是一个循环,我读到应该避免循环 如果我想知道一个项目所需要的材料,我必须得到所有的任务,然后是每个任

我有这个模型:

我有员工,他们总是在任何项目中执行相同的任务。此外,对于一项任务,员工需要一些材料,但对于一项任务,材料并不总是相同的,但这取决于任务必须完成的项目

在我的例子中,我想知道一个项目的员工,所以根据这个模型,我必须得到项目的所有任务,然后是任务的员工。因此,有时可能需要获得很多行

然而,我想知道,如果我在项目和员工之间建立直接关系,我可以直接获得这些信息。但如果我没有错的话,这可能是一个循环,我读到应该避免循环

如果我想知道一个项目所需要的材料,我必须得到所有的任务,然后是每个任务的材料。我也这样想,如果我想要一个项目所需的材料,我可以在项目和材料之间建立直接关系,这样我也可以避免重复,因为在许多任务中可能需要相同的材料

如果直接关系不是一个好主意,有没有更好的方法来检索信息,而不需要获取所有查询中的所有任务


谢谢。

这可能更接近您想要的。但是,请注意,这与“性能”无关,请参阅我的评论

--存在员工EMP。
--
雇员{EMP}
PK{EMP}
--任务TSK存在。
--
任务{TSK}
PK{TSK}
——员工EMP有资格执行任务TSK。
--
emp_tsk{emp,tsk}
PK{EMP,TSK}
FK1{EMP}引用员工{EMP}
FK2{TSK}引用任务{TSK}
——Project PRO已存在。
--
项目{PRO}
PK{PRO}
--Project PRO需要任务TSK。
--
亲祖{亲祖}
PK{PRO,TSK}
FK1{PRO}引用项目{PRO}
FK2{TSK}引用任务{TSK}
——将员工EMP分配给任务TSK
--是project公司的。
--
emp_pro_tsk{emp,pro,tsk}
PK{EMP,PRO,TSK}
FK1{PRO,TSK}引用prou TSK{PRO,TSK}
FK2{EMP,TSK}引用了EMP_TSK{EMP,TSK}
--存在物料垫。
--
材料{MAT}
PK{MAT}
——物料垫与任务TSK关联。
--
tsk_mat{tsk,mat}
PK{TSK,MAT}
FK1{MAT}参考材料{MAT}
FK2{TSK}引用任务{TSK}
--注:“关联”是指
--可能需要(也可能不需要)。
——project PRO的任务TSK需要材料垫。
--
赞成,反对,反对
PK{PRO,TSK,MAT}
FK1{PRO,TSK}引用prou TSK{PRO,TSK}
FK2{TSK,MAT}引用了TSK_MAT{TSK,MAT}
注:

所有属性(列)不为空
PK=主键
AK=备用键(唯一)
FK=外键

根据所需的业务逻辑尽可能接近数据库模型(模式)。索引和查询优化器将完成其余的工作——这就是关系数据库的用途。您确实没有这里描述的问题。我确实看到的一个问题是,“业务需求”充其量是奇怪的——可能会在以后导致逻辑错误。但是,我只是猜测。顺便说一句,在您的模型中,您可以从
材料任务项目
获取项目的所有材料。