想象一下这样的架构。
NOTE TABLE: NoteID, Note, DetailedTaskID, .....
DETAILED TASK TABLE: DetailedTaskID, WorkOrderID, .....
WORKORDER TABLE: WorkOrderID, ProjectID, .....
PROJECT TABLE: ProjectID, .....
现在使用此架构可以说我想要检索与特定项目相关联的所有注释,最终会有大量的连接。
IE: Note JOIN DetailedTask JOIN WorkOrder JOIN Project
所以我的问题是,当(如果有的话)为表添加“快捷方式”列时(在本例中为ProjectID)是合适的吗?
所以基本上将注释表更改为:NoteID,Note,DetailedTaskID,ProjectID
答案 0 :(得分:7)
简短的回答:从来没有,永远,永远。
更长的答案:仅在以下时间:
您已经确定JOIN的性能是不可接受的(这很少是真的)。
你真的已经筋疲力尽了所有不那么危险的选择。
您愿意承担保持冗余,非规范化信息同步的额外工作
您愿意接受这样一个事实:如果您无法保持同步状态,那么您的数据库在技术上可能会返回错误的结果。
答案 1 :(得分:1)
您所谈论的内容称为外键关系。它是Data Normalization的基础。简而言之,如果Note(即NoteID)属于Project,则可以在Note表中添加外键关系(ProjectID)。
这样做的好处是您可以查询此关系数据,如下所示:
select
Note.*,
Project.*
from Note
left join Project
on Note.ProjectId = Project.ProjectId
该查询将产生与其相关的所有注释和项目数据(如果它是项目的一部分)。