我正在构建一个sql数据库,每个记录都有一个唯一的id作为我的主键。我希望id是人类可读的,各种部分代表子分类。例如,前两个三位数表示产品类别,下两个三位数表示位置,最后一个记录该项目。如果我使用数字代码,每个数字至少需要9位数字。例如,101-001-001表示第一类,仓库过道一,第一项。如果我使用字母数字,我可以用六位数字A1-A1-A1表示相同的数据。
存储每个数字所需的空间差异(字母数字与数字)?由于这些id号在我的数据库中会出现数百万次,因此大小考虑将有助于决定走哪条路。还有其他理由我更喜欢一个而不是另一个吗?
答案 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
的属性比实体标识符编号。
希望这会有所帮助,因为它帮助我了解了这些字段之间的用法区别。