Sql 我应该使用数字还是字母数字标识

Sql 我应该使用数字还是字母数字标识,sql,Sql,我正在构建一个sql数据库,每个记录都有一个唯一的id作为主键。我希望ID是人类可读的,具有表示子分类的各个部分。例如,前两个三位数代表产品类别,后两个三位数代表位置,最后一个数字记录项目。如果我使用数字代码,每个数字至少需要九位数字。例如,101-001-001表示一类,仓库通道一,项目一。如果我使用字母数字,我可以用六位数字表示相同的数据,A1-A1-A1 存储每个数字(字母数字和数字)所需的空间有什么不同?由于这些id号将在我的数据库中出现数百万次,因此考虑大小将有助于决定采用哪种方式。还

我正在构建一个sql数据库,每个记录都有一个唯一的id作为主键。我希望ID是人类可读的,具有表示子分类的各个部分。例如,前两个三位数代表产品类别,后两个三位数代表位置,最后一个数字记录项目。如果我使用数字代码,每个数字至少需要九位数字。例如,101-001-001表示一类,仓库通道一,项目一。如果我使用字母数字,我可以用六位数字表示相同的数据,A1-A1-A1


存储每个数字(字母数字和数字)所需的空间有什么不同?由于这些id号将在我的数据库中出现数百万次,因此考虑大小将有助于决定采用哪种方式。还有什么其他原因让我更喜欢一个而不是另一个吗?

使用编码密钥通常是个坏主意。例如,如果——在未来的某个时刻——一个仓库有超过999件物品会发生什么。代码中没有空间容纳它

取而代之的是,对id使用一个自动递增(identity)整数。这将占用4个字节,除非您要支持表中的数十亿行。在这种情况下,使用一个大整数


仓库编号、通道编号和物料编号可以有单独的列。实际上,这些可能是引用表的外键。

在同一列中存储表示多个信息的值是个坏主意。
假设您想获取特定通道的记录。您必须对每个列值应用拆分函数,以检索通道号并进行匹配。

我建议您单独使用

像这样试试

create table #b 
(
id int identity (1001,1),
userid as 'C' + cast(id as varchar(10))
)

insert #b default values
insert #b default values
insert #b default values
insert #b default values

select * from #b

现在回答这个问题已经太迟了,但万一有人问这个问题:

我自己也在研究如何处理产品及其
ID
不喜欢将
ID
表示为“3”和或“1”,这看起来太短IMO

尽管如此,我已经同意这样一个事实,即product
ID
应该是自动递增的整数值

关于你的问题

我想您正在寻找
SKU
(库存单位)。
SKU
用于形成包含产品信息的结构化字母数字字符串,通常由零售商店单独设置(意思不是通用的,如
UPC
[通用产品代码或条形码])

您可以使用
SKU
来标识产品类别、零售商店等(您可以定义您的结构),并且与产品
ID
不同,
SKU
与其说是实体标识号,不如说是一个属性


希望这对我有所帮助,因为它帮助我理解了这两个字段之间的使用差异。

+1对于标记化标识列来说是个坏主意。操纵主键值,使其“具有某种意义”,而不是唯一且易于索引的值,这会给您带来麻烦。如果您使用20个字符的id而不是6个字符的id,则1000万条记录中会额外使用140Mb。由于磁盘大小通常在TB范围内,空间不是问题。