我关注性能,工程和可读性。假设我有一个博客,每个帖子都有其状态:已发布(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
?
非常感谢。
答案 0 :(得分:8)
我认为,对于更快的性能,更少的存储空间和可读性,最好的选择是使用CHAR(1) - (p)ublished,pending(r)eview和(d)raft。您可以使用CHECK约束或外键引用来验证该数据。
CHAR(1)占用的空间比整数少得多。它可以被人类直接读取,因此它不需要连接来理解它。由于它既小又可立即读取,即使在数千万行的表上,你也可以获得比整数连接更快的检索。
答案 1 :(得分:2)
以字符串形式存储:
理想情况下,如果您的数据库支持枚举类型,则应使用枚举类型。
答案 2 :(得分:2)
我认为您选择的选项应取决于您使用的工具/框架与每个功能的合作程度。
许多数据库/ ORM与枚举处理不佳,需要自定义代码(不理解“枚举类型”的概念)。
那说......可能我会用字符串。
的字符串:
字符串也是一些众所周知的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认为,出于性能原因,拆分数据是一种非常有效的技术。使用查找时,索引,磁盘占用空间和更新变得非常容易。
我可能会分开它。