非规范化是一种数据库优化技术,我们将冗余数据添加到一个或多个表中。这可以帮助我们避免在关系数据库中进行代价高昂的连接。请注意,非规范化并不意味着不进行规范化。它是一种在进行归一化后应用的优化技术。
在传统的规范化数据库中,我们将数据存储在单独的逻辑表中,并尽量减少冗余数据。我们可能会努力使数据库中的每条数据只有一个副本。
例如,在规范化数据库中,我们可能有一个 Courses 表和一个 Teachers 表。 Courses 中的每个条目都将存储课程的教师 ID,但不存储教师姓名。当我们需要检索包含教师姓名的所有课程的列表时,我们将在这两个表之间进行连接。
在某些方面,这很棒;如果老师更改了他或她的名字,我们只需在一个地方更新名字。
缺点是如果表很大,我们可能会花费不必要的长时间对表进行连接。
因此,非规范化达成了不同的妥协。在非规范化下,我们决定我们可以接受一些冗余和一些额外的努力来更新数据库,以获得更少连接的效率优势。
非规范化的优点:-
- 检索数据更快,因为我们做的连接更少
- 要检索的查询可以更简单(因此不太可能出现错误),
因为我们需要查看更少的表。
非规范化的缺点:-
- 更新和插入更昂贵。
- 非规范化会使更新和插入代码更难编写。
- 数据可能不一致。哪个是数据的“正确”值?
- 数据冗余需要更多的存储空间。
在需要可扩展性的系统中,就像任何大型科技公司的系统一样,我们几乎总是同时使用规范化和非规范化数据库的元素。