在数据库表中存储整数或字符串之间的区别

时间:2011-11-09 12:04:06

标签: database database-design

我关注性能,工程和可读性。假设我有一个博客,每个帖子都有其状态:已发布(4),待审核(2),草稿(1)。建议将这些信息存储在status列中?

status        <======= storing status as string
========
pending
published
draft

status        <======= storing status as integer
========
2
4
1

另外,如果我们应该存储整数,我们应该避免存储运行的整数:1, 2, 3, 4, 5,而不是存储^ 2整数:2, 4, 8, 16, 32

非常感谢。

5 个答案:

答案 0 :(得分:8)

我认为,对于更快的性能,更少的存储空间和可读性,最好的选择是使用CHAR(1) - (p)ublished,pending(r)eview和(d)raft。您可以使用CHECK约束或外键引用来验证该数据。

CHAR(1)占用的空间比整数少得多。它可以被人类直接读取,因此它不需要连接来理解它。由于它既小又可立即读取,即使在数千万行的表上,你也可以获得比整数连接更快的检索。

答案 1 :(得分:2)

以字符串形式存储:

  • 浪费空间
  • 需要更长时间才能读/写
  • 更难以索引/搜索
  • 使得保证有效性变得更加困难(没有什么可以防止有人插入任意字符串)

理想情况下,如果您的数据库支持枚举类型,则应使用枚举类型。

答案 2 :(得分:2)

我认为您选择的选项应取决于您使用的工具/框架与每个功能的合作程度。

许多数据库/ ORM与枚举处理不佳,需要自定义代码(不理解“枚举类型”的概念)。

那说......可能我会用字符串。

的字符串:

  • 使用更多空间,但在您的情况下,名称很短,您可以轻松读取数据转储而不使用枚举表图例。如今,对于博客/ CMS,存储几乎不是问题
  • 性能差异通常很小
  • 你不能轻易地重新排列枚举表的成员(你要强制“原始”整数值)。

字符串也是一些众所周知的CMS的选择(例如Drupal 7)。

当然这是一个迟到的答案,但它可能对其他读者有用。

答案 3 :(得分:0)

以整数形式存储数据总是比字符或字符串更可靠。

创建两个表,例如blog_status和blog_details

在blog_status中维护博客的主要状态,就像你说的草稿,待定和发布一样 blog_status的表结构

Create table blog_status
(
blogstatus_id int,
blogstatus_desc varchar(10),
primary key(blogstatus_id)
)

然后创建另一个表,您希望以这种方式使用blog_status,您可以随时提高应用程序的重用能力和性能

Create table blog_details
(
  blog_id int,
  blog_title varchar(10),
  blog_postingdate datetime,
  blog_postbox varchar(max),
  blog_status int, ---------------------> This should be your blogstatus_id value
  primary key(blog_id)
)

没有使用x ^ 2表达式或公式的意义。 我希望,我清楚你的怀疑。如果您觉得答案有帮助,请将其标记为您的答案,否则请告诉我......

答案 4 :(得分:0)

我的数据库理论家认为你不应该将查找表用于单列属性,因为它会导致不必要的数据拆分;换句话说,您不需要具有两列(以及ID值和属性名称)的表。但是,我的DBA认为,出于性能原因,拆分数据是一种非常有效的技术。使用查找时,索引,磁盘占用空间和更新变得非常容易。

我可能会分开它。