Ale*_*x K 5 database language-agnostic database-design
让我们以博客引擎为例.
你有博客,博客有帖子,帖子有标签用于组织目的.在确定RDBMS环境中的标记问题并不简单之后,我们会去谷歌寻求指导,并找到以下关于解决方案的简洁摘要:设计和相关基准.但是,所有这些都是以性能或复杂性为代价的.看起来像NoSQL一样让你在列中存储标签列表(在NoSQL中我们可以将文档存储在文档中)可以很好地解决问题.为什么不用SQLServer/Qracle/MySQL/Postgres /等.那么呢?
起初我以为可能是因为尺寸不一.但任何值得注意的RDBMS都允许使用某种形式的varchar和text(大小相当).因此,列的大小(以及不同行中的相同列具有不同大小的事实不是问题).因此,不要存储blob文本,而是让我们在列中存储相同类型的项目列表(大多数语言中的数组).让我们为有效的精确搜索匹配编制索引.至少对于我需要NoSQL DB的所有用例都会在必要时消失(我知道很多人都在讨论可扩展性,但我不太了解/关心它,我没有可伸缩性问题,我有维护噩梦).我们的架构设计简单(每一点都像NoSQL文档中的文档一样干净简单),并且由于高效的索引而具有出色的性能.更奇怪的是,开源数据库(例如Postgres)没有针对此功能的某种补丁.如今,在这些领域充满动力的开发人员似乎很想从头开始创建新的数据库.
我是否遗漏了一些令人震惊的技术障碍,或者前面提到的RDBMS供应商是懒惰还是过去?
原因是历史性的。
允许表中单元格内的任何“集合”类型的值通常被认为违反 1NF,因为它暗示“根据定义”,“重复组”出现在表(单行)内的可能性。
然而,自 SQL 早期以来,理论已经有了很大的发展,目前的理论表明:
(a) 单元格中应允许包含任何类型的值,包括数组/集合/集合类型 (b) 位于 1NF 中,仅意味着是关系数据。(但请注意,从理论如何定义概念的意义上来说, SQL 表通常不是“关系”数据。)
Date 就这个主题写了几十页的文章。阅读这些内容将为您提供问题的答案,该答案比此处适合的任何答案都更加完整。
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |