在我的系统员工日志中,请求和请求是关于设备的。
为了避免每次需要显示请求时都加载员工和设备文档,我想在请求文档中对员工姓名和设备库存编号、制造商名称和型号进行非规范化处理。
我在这里走错路了吗?这是反模式吗?
我意识到,如果我这样做,那么我将不得不更新所有受影响的请求文档,以防员工姓名更改或设备库存编号更改的极少数情况。
PS:文档数据库建模指南的链接也将不胜感激。
在我的系统员工日志中,请求和请求是关于设备的。
为了避免每次需要显示请求时都加载员工和设备文档,我想在请求文档中对员工姓名和设备库存编号、制造商名称和型号进行非规范化处理。
我在这里走错路了吗?这是反模式吗?
我意识到,如果我这样做,那么我将不得不更新所有受影响的请求文档,以防员工姓名更改或设备库存编号更改的极少数情况。
PS:文档数据库建模指南的链接也将不胜感激。
狡猾,这实际上取决于您所需的速度水平。如果您只有一个没有分片的数据库,并且您可以使用非常快.Include
的性能,那么为了简单起见,请不要进行非规范化和使用。但是,它们不适用于分片会话,因此您可能希望在那时进行非规范化并获得闪电般的性能。
.Include
我非常个人的观点是,除非您有充分的理由不使用它,否则您应该始终使用它。
Sly,就您而言,如果信息发生变化,您真的需要更新信息吗?如果 Sally May 在 2011 年要求购买一台新笔记本电脑,那么在 2012 年将该要求更改为 Sally May-Jones 是否有意义?
通常当我们想要非规范化时,我们不想要它以提高性能(尽管它是一个因素,但 Include 可以很好地处理它)。我们希望它能够获得数据的时间点视图。
这是一篇关于非规范化的简短文章。
总之,如果您永远不打算更新,非规范化是可以的,并且性能优势超过了存储劣势(通常是这样)。