具有有限可能值集的sql id字段的数据类型

时间:2014-01-23 09:01:09

标签: sql

始终建议对SQL表中的int字段使用id类型 - 我会找到一些类似的答案hereherehere。< / p>

但是在所有这些问题中,id字段在博客的用户表格中具有许多可能的值,例如user_id。我仍然应该int用于id字段,这些字段的值范围有限,例如用户类型,可以是“admin”,“user”,“editor”吗?

这不是关于用户表的问题,它仅提及例如,在我工作的真实数据库中,我经常发现这样的字段有3-20个可能的值,这些值很少变化,但在很多查询,视图等中使用,所以我们有很多SQL代码都喜欢。

SOME_FIELD in (1,7, 12) 
SOME_FIELD != 2

我们还可以在UI和外键中显示一个包含此类型的长名称的表。它不像美国公民的社会安全号码那样自然而然。一行中有很多数据,包含varchar(100)等许多字段。

我觉得会更好
SOME_FIELD in ('Draft', 'Auto-Draft' , 'Trash') 
SOME_FIELD != 'Published'

但它与我在这里找到的类似问题的所有答案直接相矛盾。我试图检查一些流行的应用程序 - Wordpress数据库包含post_statusvarcharint for user_statuspost_type个字段。

我还应该在这些字段中使用int类型吗?或者这是个人品味的问题?

更明确地提出问题:varchar密钥的最大问题,在其他问题的答案中提到的是连接和其他操作的性能问题。这些问题是否会因为varchar值的数量有限而在一种语言中有所减少,而varchar(10)和值的限制很小,很少被修改,只有程序员而不是用户修改,因此来自here或{{ 3}}或使用IDENTITY / AUTO_INCREMENT不相关?是否有经验丰富的开发人员对该主题或实验结果的研究?

这不仅仅是关于MySQL或Wordpress的问题,我也使用MS SQL Server和其他RDBMS的数据可能很有趣。

1 个答案:

答案 0 :(得分:0)

如果您知道该表只是一个小尺寸,那么您可以使用smallinttinyint here's更多有关其最大值和尺寸的详细信息。

想要使用int的主要原因是使连接更容易并保持键大小(int占用的空间比典型的nvarchar少,并且没有搭配问题)

我会提醒你 - 使用tinyint可能已经完成的小问题通常比稍后改变PK列的数据类型的挑战要少得多。如果有疑问,请谨慎对待!