这个问题与性能有关,如果答案是针对我提供的案例,我将不胜感激。
哪种表现更合适?
案例:广泛的网络CMS模块
模式1:很长但只有一个表
cms
-----------------------------------------------
Id
Title
Description
Images
Order
Status
Publish
meta_keywords
meta_description
meta_author
Cleary,大多数像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
注意:此案例中的关系是一对一
要遵循哪种正确的模式?为什么选择一个长而一个表,或者为什么不在单个表上选择分布式表?
答案 0 :(得分:5)
我能想到的唯一可能导致非规范化数据(一个包含多列的表)的可能原因是:
JOIN
s 我喜欢一直使用标准化版本,因为:
答案 1 :(得分:2)
我认为'现代'上性能的关键 - 我对“现代”的含义知之甚少,但是 - 基于RDBMS的应用程序不仅取决于数据库模式< /强>
因此,估算性能不是一个简单的问题。即使是一个有100个字段的表也可以安装在内存中,但即使是两个字段的表也可能无法安装。 5M行的查询可以在一分钟内完成,但有时相同的查询不会在10M行上结束10分钟(只有两次!) - 这取决于我上面提到的环境。
因此,我认为我们无法为整个案例选择最佳实践。就你的例子而言,关键在于DBA的品味。 (不是开玩笑)