【发布时间】:2018-12-04 14:26:56
【问题描述】:
我参加了一次面试,有人问我 3 种减少冗余的方法,但我只记得一种:规范化。
我一直在寻找另外 2 个,但我只能找到有关规范化的文章。
【问题讨论】:
标签: relational-database redundancy
我参加了一次面试,有人问我 3 种减少冗余的方法,但我只记得一种:规范化。
我一直在寻找另外 2 个,但我只能找到有关规范化的文章。
【问题讨论】:
标签: relational-database redundancy
“冗余”是非正式的,在旁观者看来,本身既不好也不坏。
假设您有多行包含相同的字符串。您可以通过用 id 替换字符串并将表映射 id 到字符串来“减少冗余”。假设你已经在这样做了。您可以通过用字符串替换 id 并删除查找表(原始设计)来“减少冗余”。索引是多余的。缓存是多余的。低于 BCNF 的规范化增加了所有表中行 x 列的总和,因此增加了某种数据库“冗余”;但它减少了更新异常,因此减少了某种表“冗余”。 (4NF 和 5NF 确实减少了所有表中行 x 列的总和。)
PS Chris Date 在Data Redundancy & Database Design 上有一些文章。他定义的“冗余”概念之一是:
当且仅当数据库包含相同 [真实] 命题的两种不同表示(直接 [在基表中] 或间接 [在查询结果中])时,数据库才会涉及一些冗余。
我的那种“冗余”版本:当两个在逻辑上不等价的查询表达式(不为所有数据库值返回同一个表)为所有数据库值返回同一个表时,数据库涉及一些冗余合法 / 受限 数据库值。
【讨论】: