了解关系数据库中的非规范化?
Understanding Denormalization in Relational Databases?
假设我在 NF3
中有如下 tables
Table 姓名:地址
- 第 1 行
- 第 2 行
- state_id
Table 姓名:州
- id
- 名字
- country_id
Table 姓名:国家/地区
- id
- 名字
现在我想对这个 table 进行非规范化,这样读取速度会更快,而且我不需要加入多个 tables,但我无法理解什么是反规范化。
示例 1) 我是否需要像上面那样在 3NF 中保留 tables,以及像 state_name、country_name 这样的地址的额外列,所以结果 table 看起来如下所示。
Table 姓名地址
- 第 1 行
- 第 2 行
- state_name
- country_name
- state_id
或
示例 2) 我是否需要从 Address
table 中删除 state_id 并保留 state_name
和 country_name
。
Table 姓名地址
- 第 1 行
- 第 2 行
- state_name
- country_name
从以上2个例子看,哪个是反规范化?
引用 Wikipedia:
Denormalization is the process of trying to improve the read performance of a database, at the expense of losing some write performance, by adding redundant copies of data or by grouping data.
因此,通过将 state_name
添加到 Address
table,您已经对数据库进行了非规范化。
消不消state_id
无所谓。添加一个像 state_name
这样有很多行具有相同值的列的简单操作会使数据库非规范化。
你展示的两个例子都是非规范化的。出于实际目的,您可能希望存储 state_id。否则您将失去与州 table 的连接,因此无法更新州名(和国家/地区名称)。
这是一个似乎可以解决您的问题的页面。
https://rubygarage.org/blog/database-denormalization-with-examples
此致,
比亚尼
假设我在 NF3
中有如下 tablesTable 姓名:地址
- 第 1 行
- 第 2 行
- state_id
Table 姓名:州
- id
- 名字
- country_id
Table 姓名:国家/地区
- id
- 名字
现在我想对这个 table 进行非规范化,这样读取速度会更快,而且我不需要加入多个 tables,但我无法理解什么是反规范化。
示例 1) 我是否需要像上面那样在 3NF 中保留 tables,以及像 state_name、country_name 这样的地址的额外列,所以结果 table 看起来如下所示。
Table 姓名地址
- 第 1 行
- 第 2 行
- state_name
- country_name
- state_id
或
示例 2) 我是否需要从 Address
table 中删除 state_id 并保留 state_name
和 country_name
。
Table 姓名地址
- 第 1 行
- 第 2 行
- state_name
- country_name
从以上2个例子看,哪个是反规范化?
引用 Wikipedia:
Denormalization is the process of trying to improve the read performance of a database, at the expense of losing some write performance, by adding redundant copies of data or by grouping data.
因此,通过将 state_name
添加到 Address
table,您已经对数据库进行了非规范化。
消不消state_id
无所谓。添加一个像 state_name
这样有很多行具有相同值的列的简单操作会使数据库非规范化。
你展示的两个例子都是非规范化的。出于实际目的,您可能希望存储 state_id。否则您将失去与州 table 的连接,因此无法更新州名(和国家/地区名称)。
这是一个似乎可以解决您的问题的页面。
https://rubygarage.org/blog/database-denormalization-with-examples
此致,
比亚尼