一个坏主意是关系中试图获得更好表现的循环吗?
Is a bad idea a cycle in the relationship to try to get better performance?
我有这个型号:
我有员工,他们总是在任何项目中执行相同的任务。另外,对于一项任务,员工需要一些material,但对于一项任务并不总是相同的,而是取决于必须完成任务的项目。
好吧,在我的例子中,我想知道一个项目的员工,所以根据这个模型,我必须获得项目的所有任务,然后再获得任务的员工。所以有时它可能需要获取很多行。
但是,我想知道如果我在项目和员工之间设置直接关系,我可以直接获取这些信息。但如果我没记错的话,这可能是一个循环,而且我读到应该避免循环。
和material差不多,如果我想知道项目需要的material,我必须得到所有的任务,然后每个任务的 materials。我以同样的方式思考,如果我想要一个项目所需的 materials,我可以在项目和 materials 之间设置一个直接关系,所以我也会避免重复,因为许多任务可能需要相同的 material。
如果直接关系不是一个好主意,是否有更好的方法来检索信息,而无需在所有查询中获取所有任务?
谢谢。
这可能更接近您要查找的内容。但是请注意,这与“性能”无关,请参阅我的评论。
-- Employee EMP exists.
--
employee {EMP}
PK {EMP}
-- Task TSK exists.
--
task {TSK}
PK {TSK}
-- Employee EMP is qualified for task TSK.
--
emp_tsk {EMP, TSK}
PK {EMP, TSK}
FK1 {EMP} REFERENCES employee {EMP}
FK2 {TSK} REFERENCES task {TSK}
-- Project PRO exists.
--
project {PRO}
PK {PRO}
-- Project PRO requires task TSK.
--
pro_tsk {PRO, TSK}
PK {PRO, TSK}
FK1 {PRO} REFERENCES project {PRO}
FK2 {TSK} REFERENCES task {TSK}
-- Employee EMP is assigned to task TSK
-- of project PRO.
--
emp_pro_tsk {EMP, PRO, TSK}
PK {EMP, PRO, TSK}
FK1 {PRO, TSK} REFERENCES pro_tsk {PRO, TSK}
FK2 {EMP, TSK} REFERENCES emp_tsk {EMP, TSK}
-- Material MAT exists.
--
material {MAT}
PK {MAT}
-- Material MAT is associated with task TSK.
--
tsk_mat {TSK, MAT}
PK {TSK, MAT}
FK1 {MAT} REFERENCES material {MAT}
FK2 {TSK} REFERENCES task {TSK}
-- Note: "associated" means
-- may (or may not) be required.
-- Material MAT is required for task TSK of project PRO.
--
pro_tsk_mat {PRO, TSK, MAT}
PK {PRO, TSK, MAT}
FK1 {PRO, TSK} REFERENCES pro_tsk {PRO, TSK}
FK2 {TSK, MAT} REFERENCES tsk_mat {TSK, MAT}
注:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key
我有这个型号:
我有员工,他们总是在任何项目中执行相同的任务。另外,对于一项任务,员工需要一些material,但对于一项任务并不总是相同的,而是取决于必须完成任务的项目。
好吧,在我的例子中,我想知道一个项目的员工,所以根据这个模型,我必须获得项目的所有任务,然后再获得任务的员工。所以有时它可能需要获取很多行。
但是,我想知道如果我在项目和员工之间设置直接关系,我可以直接获取这些信息。但如果我没记错的话,这可能是一个循环,而且我读到应该避免循环。
和material差不多,如果我想知道项目需要的material,我必须得到所有的任务,然后每个任务的 materials。我以同样的方式思考,如果我想要一个项目所需的 materials,我可以在项目和 materials 之间设置一个直接关系,所以我也会避免重复,因为许多任务可能需要相同的 material。
如果直接关系不是一个好主意,是否有更好的方法来检索信息,而无需在所有查询中获取所有任务?
谢谢。
这可能更接近您要查找的内容。但是请注意,这与“性能”无关,请参阅我的评论。
-- Employee EMP exists.
--
employee {EMP}
PK {EMP}
-- Task TSK exists.
--
task {TSK}
PK {TSK}
-- Employee EMP is qualified for task TSK.
--
emp_tsk {EMP, TSK}
PK {EMP, TSK}
FK1 {EMP} REFERENCES employee {EMP}
FK2 {TSK} REFERENCES task {TSK}
-- Project PRO exists.
--
project {PRO}
PK {PRO}
-- Project PRO requires task TSK.
--
pro_tsk {PRO, TSK}
PK {PRO, TSK}
FK1 {PRO} REFERENCES project {PRO}
FK2 {TSK} REFERENCES task {TSK}
-- Employee EMP is assigned to task TSK
-- of project PRO.
--
emp_pro_tsk {EMP, PRO, TSK}
PK {EMP, PRO, TSK}
FK1 {PRO, TSK} REFERENCES pro_tsk {PRO, TSK}
FK2 {EMP, TSK} REFERENCES emp_tsk {EMP, TSK}
-- Material MAT exists.
--
material {MAT}
PK {MAT}
-- Material MAT is associated with task TSK.
--
tsk_mat {TSK, MAT}
PK {TSK, MAT}
FK1 {MAT} REFERENCES material {MAT}
FK2 {TSK} REFERENCES task {TSK}
-- Note: "associated" means
-- may (or may not) be required.
-- Material MAT is required for task TSK of project PRO.
--
pro_tsk_mat {PRO, TSK, MAT}
PK {PRO, TSK, MAT}
FK1 {PRO, TSK} REFERENCES pro_tsk {PRO, TSK}
FK2 {TSK, MAT} REFERENCES tsk_mat {TSK, MAT}
注:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key