【发布时间】:2011-12-27 10:17:53
【问题描述】:
这个问题是关于性能的,如果答案是针对我提供的案例的,我将不胜感激。
哪个更适合性能?
- 创建包含太多字段的表
- 创建多个表并向它们分配相似的字段
案例:一个广泛的网络 CMS 模块
模式 1:长但只有一张桌子
cms
-----------------------------------------------
Id
Title
Description
Images
Order
Status
Publish
meta_keywords
meta_description
meta_author
很明显,大多数像 joomla 这样的开源 CMS 都使用上述模式。但我认为,这种模式正在扼杀 RDBMS 的精神。我们可以轻松地将特定文章的内容、配置和元数据分离到不同的表格中。像下面这样
模式 2:很多但相关的表
Cms_content cms_meta cms_configuration
---------------------------------------------------------------------------
Id id id
Title content_id content_id
Description keywords status
Content description order
Images author publish
注意:这种情况下的关系是一对一的
应该遵循哪种模式?为什么选择一张长但只有一张桌子,或者为什么不选择分布式桌子而不是一张桌子?
【问题讨论】:
-
“正确”总是取决于目标和使用情况。没有灵丹妙药
-
@zerkms,同意这就是我也提供案例的原因:)
-
哦,你的意思是这是一个“案例”。好的。有什么理由将 single 实体拆分为多个部分?这些字段属于同一个实体,这个模式可以完成它的工作。所以不要碰有用的东西;-)
-
@zerkms,我不知道,这就是我问的原因。但在我看来,一是为了可管理性,二是为了效率。当我显示一篇文章的内容时,我不需要导入配置或元部分。或者可以说,当我只更新状态时,我不需要触摸其他两个表,从而给服务器带来更小的工作量。附言只是一个意见...我不是这方面的专家...
-
我认为database normalization 的规则定义得很好,并为数据库设计提供了既定的指导方针。为了便于使用和提高性能,在需要时通过视图等进行反规范化也是一种常见做法。
标签: mysql database-design