📜  数据库中的非规范化

📅  最后修改于: 2021-09-08 16:00:54             🧑  作者: Mango

非规范化是一种数据库优化技术,我们将冗余数据添加到一个或多个表中。这可以帮助我们避免在关系数据库中进行代价高昂的连接。请注意,非规范化并不意味着不进行规范化。它是一种在进行归一化后应用的优化技术。

在传统的规范化数据库中,我们将数据存储在单独的逻辑表中,并尽量减少冗余数据。我们可能会努力使数据库中的每条数据只有一个副本。

例如,在规范化数据库中,我们可能有一个 Courses 表和一个 Teachers 表。 Courses 中的每个条目都将存储课程的教师 ID,但不存储教师姓名。当我们需要检索包含教师姓名的所有课程的列表时,我们将在这两个表之间进行连接。

在某些方面,这很棒;如果老师更改了他或她的名字,我们只需在一个地方更新名字。
缺点是如果表很大,我们可能会花费不必要的长时间对表进行连接。
因此,非规范化达成了不同的妥协。在非规范化下,我们决定我们可以接受一些冗余和一些额外的努力来更新数据库,以获得更少连接的效率优势。

非规范化的优点:-

  1. 检索数据更快,因为我们做的连接更少
  2. 要检索的查询可以更简单(因此不太可能出现错误),
    因为我们需要查看更少的表。

非规范化的缺点:-

  1. 更新和插入更昂贵。
  2. 非规范化会使更新和插入代码更难编写。
  3. 数据可能不一致。哪个是数据的“正确”值?
  4. 数据冗余需要更多的存储空间。

在需要可扩展性的系统中,就像任何大型科技公司的系统一样,我们几乎总是同时使用规范化和非规范化数据库的元素。