mysql - 我应该为内部搜索引擎非规范化我的表吗?
问题描述
现在我有 3 个表格,一个用于我拥有的来源,另一个用于关键字,第三个用于将关键字连接到来源。它是规范化的,但我可以简单地制作一个包含相关关键字源的表并使用这样的全文搜索:
--+-------+--------+
id|website|keywords|
--+-------+--------+
用户将永远无法编辑、插入或删除数据,因此任何修改都将在管理员端进行。该表将包含大约 300 行可供人们搜索的行。
解决方案
几十年前,传统观点认为标准化使更新更快,但搜索速度稍慢。数据库现在如此之快,以至于我永远不会担心这一点。
所以规范化的好处是数据完整性。如果您的数据在规范化表中,那么您的数据库中不可能出现某些无效/不一致的表示。数据可能是错误的,但某些无效状态将是不可能的。
有理由对数据库进行非规范化,例如报告数据库。但是,这些与有效性的差异有关。销售代表向销售部门的销售经理报告。因此,该销售代表的销售属于该销售部门的该销售经理。
但是,在报告数据库中,对于一年前的销售数据,该销售代表向另一位销售经理报告,该经理在一个不再存在的销售部门。您不想代表该销售代表在其当前部门的当前经理之下的销售。
在这里,有一个非规范化的维度表,其中销售代表记录有他们当时的销售经理的字段,他们当时的部门是有意义的。那么一个销售代表可能有多个记录,每个记录都是他们在销售时的经理和部门的组合。
总结,关于规范化,重要的是数据的完整性,在某些情况下,这可能表明在某些情况下是一种反规范化。
推荐阅读
- angular - 使用 Mongoose model.find() 进行服务器级过滤的 Angular 多个过滤器
- node.js - Facebookexternalhit 导致 Range Not Satisfiable 错误
- javascript - 代替innerText,innerHTML 获取querySelectorAll 的特定子元素
- c# - 覆盖空字符串不应等于的 Equals 和 GetHashCode
- c# - 另一个“GDI+ 中出现一般错误”。-问题
- sql - 有没有办法像空元素一样订购空元素?
- python - 如何显示不固定数量的视频文件 python cv2
- google-apps-script - 数组返回空白值 JavaScript - google.script.run.withSuccessHandler()
- jenkins - 如何在将图像推送到 ECR 时使用 Terraform 控制 Docker 图像版本
- excel - 如何引用搜索文件夹?