首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库规范化与数据标识符

问数据库规范化与数据标识符
EN

Stack Overflow用户
提问于 2013-07-02 03:34:38
回答 1查看 61关注 0票数 1

我确实对数据库规范化有一些了解,但有时我认为,在某些情况下,有一种比一个数据对象=一个表模式(我相信)更优雅的解决方案。

例如:文章和静态页面的存储。数据非常相似,我们可以使用一个简单的标识符列将它们放在一个表中,由于我们实际存储的数据不同,每种数据类型都会有一些空白的未使用的cols:

代码语言:javascript
复制
id | title(both) | author(article only) | content(both) | datetime(article only) | type(identificator - article/page)

这种方法是否仍然正确,或者无论相似性如何,每个数据都应该有表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-02 04:32:21

您正在描述单表继承。这是一个合法的模式,请参阅http://martinfowler.com/eaaCatalog/singleTableInheritance.html

优势包括:

  • One表包含所有子类型。

缺点包括:

对于特定于子类型的列,您不能定义

  • 约束,因为它们必须是空的,或者可能不支持对子类型特定的列的NOT NULL约束(根据
  • 的不同,表将有很多列,其中大多数列将为空)。某些数据库对给定表的列数有限制。但是在MySQL的情况下,每个表的最大列数是4096。InnoDB不存储NULL,因此这不是问题。
  • 如果您频繁添加新的子类型,则每次添加更多特定于子类型的列时,都必须更改表。

您可能希望了解替代方案,例如类表继承(http://martinfowler.com/eaaCatalog/classTableInheritance.html)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17412276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档