表中的外键快捷方式

时间:2011-10-13 02:30:25

标签: sql tsql foreign-keys relational-database foreign-key-relationship

想象一下这样的架构。

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

2 个答案:

答案 0 :(得分:7)

简短的回答:从来没有,永远,永远。

更长的答案:仅在以下时间:

  1. 您已经确定JOIN的性能是不可接受的(这很少是真的)。​​

  2. 你真的已经筋疲力尽了所有不那么危险的选择。

  3. 您愿意承担保持冗余,非规范化信息同步的额外工作

  4. 您愿意接受这样一个事实:如果您无法保持同步状态,那么您的数据库在技术上可能会返回错误的结果。

答案 1 :(得分:1)

您所谈论的内容称为外键关系。它是Data Normalization的基础。简而言之,如果Note(即NoteID)属于Project,则可以在Note表中添加外键关系(ProjectID)。

这样做的好处是您可以查询此关系数据,如下所示:

select
  Note.*,
  Project.*
from Note
left join Project
on Note.ProjectId = Project.ProjectId

该查询将产生与其相关的所有注释和项目数据(如果它是项目的一部分)。