我应该使用数字或字母数字ID

时间:2013-12-30 03:53:53

标签: sql

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

存储每个数字所需的空间差异(字母数字与数字)?由于这些id号在我的数据库中会出现数百万次,因此大小考虑将有助于决定走哪条路。还有其他理由我更喜欢一个而不是另一个吗?

4 个答案:

答案 0 :(得分:2)

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

相反,为id使用自动递增(标识)整数。这占用4个字节,除非您要在表中支持数十亿行。在这种情况下,请使用一个大整数。

您可以为仓库编号,过道编号和项目编号分别设置列。事实上,这些应该是引用表的外键。

答案 1 :(得分:1)

在同一列中存储表示多个信息的值是个坏主意。 假设你想要获取特定过道的记录。您必须对每个列值应用拆分功能以检索过道编号并匹配。

答案 2 :(得分:0)

我建议你单独使用。

试试这个

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

答案 3 :(得分:0)

此答案为时已晚,但万一有人跳入这个问题:

我本人正在研究如何处理产品及其ID IMO 太短了,不喜欢ID说“ 3”和“ 1”。

说,我已经同意乘积ID应该是自动递增整数值这一事实。

关于您的问题

我认为您正在寻找SKU(库存单位)。 SKU有助于形成一个结构化的字母数字字符串,其中包含有关您的产品的信息,通常由零售商店单独设置(含义不是通用的,例如UPC [通用产品代码或条形码])

您可以使用SKU来标识产品类别,零售商店等等(您可以定义结构),与产品ID不同的是,SKU的属性比实体标识符编号。

希望这会有所帮助,因为它帮助我了解了这些字段之间的用法区别。