数据库中的帖子类型 - INT或VARCHAR

时间:2011-03-28 17:32:28

标签: mysql database

我正在建立一个论坛类型的网站,其中的帖子将有不同的类型:讨论,问题和评论。

什么是性能和可读性的首选存储方法?

例如:

Id  |  PostType  |  PostTitle
1      2            Example title

Id  |  PostType  |  PostTitle
1      Question     Example title

性能是我的主要目标,所以我的第一个想法是将其存储为INT。但是,要获取帖子类型名称(我每次都需要),我运行了一个相当不喜欢的if / else语句。

我更喜欢VARCHAR类型,因为它避免了if / else业务并且仍然可读,但我不确定。

6 个答案:

答案 0 :(得分:2)

如果你几乎总是需要PostType的文本版本,那么你应该使用VARCHAR类型来避免额外的表和额外的代码。

答案 1 :(得分:2)

我建议您使用“类型”表格,其中包含问题,答案和评论等帖子类型信息。在主表中,您需要使用其主键调用它,根据您的第一个示例,这是一个整数值。这将帮助您管理数据库,以便在表中添加更多帖子类型。

如果是可读性,您可以创建一个连接上述2个表的视图,并可以随时读取它。

答案 2 :(得分:1)

在现代数据库系统中,没有太多需要担心如此小规模的性能。但是,如果选择将其设置为varchar,则将varchar长度限制为适当的大小varchar(10)。您也可以选择创建一个查找表来保存问题类型。虽然这是不必要的,可能会更慢。

我的选择是在第二个例子中将类型放在字段中。

答案 3 :(得分:1)

许多公司将使用int作为类别。我猜他们认为这有助于使if语句更短,并且选择case语句更容易。话虽如此,我更喜欢Varchar。使用varchar,您永远不必担心过多的文档或新编码器不知道哪个数字对应于哪个数字。

if(PostType == 1){do code}


if(PostType == "Question"){do code}

其中哪一个更容易理解?最重要的一行需要几行评论。这听起来不是什么大不了的事,但是如果你使用的代码很多就可以加起来。

答案 4 :(得分:1)

我会使用整数来保持较低的冗余数据量。您可以使用数组或映射为每个id获取正确的字符串,例如:

cats = {1: "Question", 2: "Comment", 3: "Discussion"}
cat = cats[post.postType]

如果您按照John的建议限制varchar字段,如果您希望以后使用更长的名称,可能会遇到问题。

答案 5 :(得分:1)

使用Enum。您将确定没有任何拼写错误。您可以使用字符串比较枚举,它们将存储为INT。