Sql 我应该使用数字还是字母数字标识
我正在构建一个sql数据库,每个记录都有一个唯一的id作为主键。我希望ID是人类可读的,具有表示子分类的各个部分。例如,前两个三位数代表产品类别,后两个三位数代表位置,最后一个数字记录项目。如果我使用数字代码,每个数字至少需要九位数字。例如,101-001-001表示一类,仓库通道一,项目一。如果我使用字母数字,我可以用六位数字表示相同的数据,A1-A1-A1Sql 我应该使用数字还是字母数字标识,sql,Sql,我正在构建一个sql数据库,每个记录都有一个唯一的id作为主键。我希望ID是人类可读的,具有表示子分类的各个部分。例如,前两个三位数代表产品类别,后两个三位数代表位置,最后一个数字记录项目。如果我使用数字代码,每个数字至少需要九位数字。例如,101-001-001表示一类,仓库通道一,项目一。如果我使用字母数字,我可以用六位数字表示相同的数据,A1-A1-A1 存储每个数字(字母数字和数字)所需的空间有什么不同?由于这些id号将在我的数据库中出现数百万次,因此考虑大小将有助于决定采用哪种方式。还
存储每个数字(字母数字和数字)所需的空间有什么不同?由于这些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
尽管如此,我已经同意这样一个事实,即productID
应该是自动递增的整数值
关于你的问题:
我想您正在寻找SKU
(库存单位)。
SKU
用于形成包含产品信息的结构化字母数字字符串,通常由零售商店单独设置(意思不是通用的,如UPC
[通用产品代码或条形码])
您可以使用SKU
来标识产品类别、零售商店等(您可以定义您的结构),并且与产品ID
不同,SKU
与其说是实体标识号,不如说是一个属性
希望这对我有所帮助,因为它帮助我理解了这两个字段之间的使用差异。+1对于标记化标识列来说是个坏主意。操纵主键值,使其“具有某种意义”,而不是唯一且易于索引的值,这会给您带来麻烦。如果您使用20个字符的id而不是6个字符的id,则1000万条记录中会额外使用140Mb。由于磁盘大小通常在TB范围内,空间不是问题。