Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在数据库表中存储整数或字符串的区别_Database_Database Design - Fatal编程技术网

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

Database 在数据库表中存储整数或字符串的区别,database,database-design,Database,Database Design,我关心性能、工程和可读性。假设我有一个博客,每个帖子都有它的状态:已发布(4),待审核(2),草稿(1)。建议在状态列中存储这些信息的方法是什么 status <======= storing status as string ======== pending published draft status <======= storing status as integer ======== 2 4 1 状态存储为字符串: 浪费空间 读/写需要更长的

我关心性能、工程和可读性。假设我有一个博客,每个帖子都有它的状态:已发布(4),待审核(2),草稿(1)。建议在
状态
列中存储这些信息的方法是什么

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

status        <======= storing status as integer
========
2
4
1
状态存储为字符串:

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

理想情况下,如果您的数据库支持,您应该使用枚举类型来实现这类功能。

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

创建两个表,例如blog_status和blog_details

在blog_状态中,维护blog的主状态,如您所说的draft、pending和publish blog_status的表结构

Create table blog_status
(
blogstatus_id int,
blogstatus_desc varchar(10),
primary key(blogstatus_id)
)
然后创建另一个表,在其中使用blog_状态。通过这种方式,您始终可以提高应用程序的可重用性和性能

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表达式或公式没有使用意义。
我希望,我已经澄清了你的疑虑。如果您觉得答案有帮助,请将其标记为您的答案,否则请让我知道…

我的数据库理论家认为,您不应该对单列属性使用查找表,因为这会导致不必要的数据拆分;换句话说,您不需要有一个包含两列(以及ID值和属性名)的表。然而,me中的DBA认为出于性能原因,分割数据是一种非常有效的技术。使用查找时,索引、磁盘示意图和更新变得非常容易


我可能会把它分开

我认为要获得更快的性能、更少的存储空间和可读性,最好使用CHAR(1)-(p)published、pending(r)eview和(d)raft。可以使用检查约束或外键引用验证该数据


CHAR(1)占用的空间远远小于整数。它可以被人类直接读取,因此不需要连接就可以理解它。因为它既小又可立即读取,所以检索速度比整数上的联接更快,即使是在一个数千万行的表上也是如此。

我认为您选择的选项应该取决于您使用的工具/框架与每个功能的配合情况

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

也就是说。。。也许我会用字符串

字符串:

  • 使用更多的空间,但在您的情况下,名称较短,您可以轻松读取数据转储,而无需使用枚举表图例。如今,对于博客/CMS来说,存储几乎不是一个问题
  • 性能差异通常很小
  • 您无法轻松地重新排列枚举表的成员(必须强制使用“原始”整数值)
字符串也是一些众所周知的CMS(例如Drupal 7)的选择



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

这与OP的问题有什么关联?这是个好主意。这种方法解决了Oli Charlesworth提到的问题吗?空间/访问速度的好处是假设数据没有填充到字大小以便对齐。人类可读性也可以通过枚举来解决(可以免费验证)。a)如果数据填充到单词大小,则char(1)仍然比join快,因为尽管它现在与整数大小相同,但不需要join。b) 枚举不是SQL。不同的平台以不同且不兼容的方式支持它。AFAIK说,主流的商业数据库管理系统根本不支持它。MySQL和PostgreSQL以不同且不兼容的方式支持它。c) 更改枚举需要更改模式;更改与外键引用相关的表只需要插入一行。(所以验证并不完全免费。)使用什么进行连接?OP并不是在谈论连接,AFAICS。一个包含任意表的连接告诉用户1表示“草稿”。我无法决定哪一个是最好的。你的和Catcall的都很好。我将投票赞成你的答案。可能值得一读。