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

具有有限可能值集的sql id字段的数据类型,sql,Sql,对于SQL表中的id字段,总是建议使用inttype,我发现了一些类似的答案,并且 但在所有这些问题中,id字段是唯一的,有许多可能的值,比如博客用户表中的user\u id。对于id字段,我是否仍应使用int,该字段的值范围有限,例如用户类型,可以是“admin”、“user”、“editor” 这不是关于users表的问题,它只提到了一个例子,在我工作的实际数据库中,我经常发现这样的字段具有3-20个可能的值,很少更改,但用于许多查询、视图等,因此我们有很多类似的SQL代码 SOME_FIE

对于SQL表中的
id
字段,总是建议使用
int
type,我发现了一些类似的答案,并且

但在所有这些问题中,
id
字段是唯一的,有许多可能的值,比如博客用户表中的
user\u id
。对于
id
字段,我是否仍应使用
int
,该字段的值范围有限,例如用户类型,可以是“admin”、“user”、“editor”

这不是关于users表的问题,它只提到了一个例子,在我工作的实际数据库中,我经常发现这样的字段具有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数据库中有
varchar
字段用于或
post\u type
但是

我应该仍然为这些字段使用int类型吗?还是个人品味的问题

让问题更清楚:在回答其他问题时提到的varchar键的最大问题是连接和其他操作的性能问题。这些问题是否会随着一种语言中varchar值数量的限制而减少?varchar(10)和varchar(10)和varchar(10)等值的大小很小,很少且仅由程序员修改,而不是由用户修改,因此来自或使用IDENTITY/AUTO_INCREMENT的答案不相关?是否有经验丰富的开发人员对该主题或实验结果进行过研究


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

如果您知道表的大小很小,那么您可以使用
smallint
tinyint
了解有关其最大值和大小的更多详细信息

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


我要提醒你——在tinyint可能已经完成的地方使用smallint通常比以后更改PK列的数据类型的挑战要小得多。如果有疑问,请注意

我认为可能影响设计模式的一个因素是表的大小(行数)以及连接可能带来的性能影响。非规范化是常见的,但应作为最后手段进行。试想一下,如果你想给用户提供一个不同的帖子状态列表,你必须在所有帖子中选择不同的。如果我需要向用户显示这些数据,我通常会制作一些长而清晰的表格,比如“Document ready to send to other Organization”,然后我可以为这个表格设置外键。但我仍然有SQL代码,比如“在(1,7,12)中的一些字段和一些其他字段!”3'