1
2
您的问题与关系基数的概念有关。所有关系都有一些基数,它们表示关系每一端作为其成员或可以参与关系的单个实例的潜在实例数。作为一个例子,对于人来说(我猜,对于大多数生物,除了极少数例外),亲子关系的基数是
在数据库设计中,通常情况下,任何一侧具有1(一)、(或0或1)的表都可以很容易地用两个表来表示,每个实体一个表(有时只需要一个表,请参见注释**)和表中表示“多”侧的外键列来表示,这些表指向另一个将实体保存在“一”侧的表。
在你的情况下,你有一个
查询时,为了避免在有多个联接时对父表中的数据列进行重复计数,只需将查询基于父表…例如,要查找最长父级的持续时间, 假设您的关联表名为taskprevious
**注意。如果关系中的两个实体具有相同的实体类型,则它们可以都位于同一个表中。规范化(luv-that-word)示例是一个雇员表,其中包含工人与主管之间的多对一关系…由于主管也是雇员,因此工人和主管都可以在同一个[雇员]表中,并且关系可以使用指向同一表中另一行并包含该雇员主管的雇员记录ID的外键(称为supervisor id)建模。 |
2
2
使用邻接列表模型:
以及此查询以查找给定任务的所有前置任务:
要获取每个任务最长父级的持续时间,请执行以下操作:
|
3
1
检查“SQL设计模式”手册中的“分层加权合计”模式,或“SQL中的树和层次结构”中的“物料清单”部分。 总之,图具有双重聚合特性。您可以沿着每个路径中的节点进行一种聚合,另一种跨备选路径进行聚合。例如,查找两个节点之间的最小距离是最小的过度求和。分层加权总查询(又称物料清单)是沿每条路径的数量乘以,并沿每条可选路径求和: with TCAssembly as ( select Part, SubPart, Quantity AS factoredQuantity from AssemblyEdges where Part = âBicycleâ union all select te.Part, e.SubPart, e.Quantity * te.factoredQuantity from TCAssembly te, AssemblyEdges e where te.SubPart = e.Part ) select SubPart, sum(Quantity) from TCAssembly group by SubPart |
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |