零件编号问题

Gere Yeung 2009-10-26 08:00:54
工厂中的零件编号一般采取以下规则:
0000.0000.00
1.第一组数字编号表示零件分类,如:
零件分类编号 零件
0001 CPU
0002 Memory
0003 GPU
0004 Main Board
0005 Monitor

2.第二组数字表示某零件分类的零件编号,如
0001.0001 core2 T5600,
0001.0002 core2 P8400
0003.0001 HD 5850
0003.0002 GTX 285

3.末尾数字表示版本号

这样要怎么建立表格呢?
1.首先要建立一个零件分类表格:
partTypeID, partType...
2.建立零件表格:
partID, partTypeID, number, version...

可是,当增加数据的时候怎么样才能保证
第二组数字表示的某零件分类的零件编号没有出现过,且是以前最大编号+1呢?




...全文
285 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gere Yeung 2009-10-27
  • 打赏
  • 举报
回复
开来仍然还是要用程序或触发器。
多谢各位。
harvest555 2009-10-26
  • 打赏
  • 举报
回复
正在学习中.....
nianzhang747 2009-10-26
  • 打赏
  • 举报
回复
你可以先建立partTypeID
partTypeID partID version number
0003 0001 00 HD 5850-1G
0003 0001 01 HD 5850-1.5G
0003 0002 00 GTX 285-1G
0003 0002 01 GTX 285-1.5G
如果哦有更新加入partID
partID version number
00030001 00 HD 5850-1G
00030001 01 HD 5850-1.5G
00030002 00 GTX 285-1G
00030002 01 GTX 285-1.5G
ACMAIN_CHM 2009-10-26
  • 打赏
  • 举报
回复
考虑你的版本号(为什么一开始不肯说呢?)

则应该按照你的设计分成两个表
零件分类表 (partTypeID, partType, ...)
零件表 (partID,version, partTypeID, number, ....)

零件表 中数据

partTypeID partID version number
0003 0001 00 HD 5850-1G
0003 0001 01 HD 5850-1.5G
0003 0002 00 GTX 285-1G
0003 0002 01 GTX 285-1.5G

生成新号码,仍然是用程序或触发器

如果 partID 为空,则按照上述生成新的 partID, version=0
如果 partID 不为空,则查找上次最大的 version 然后 version+1
vinsonshen 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wenzee 的回复:]
3.末尾数字表示版本号,如:
0003.0001.00      HD 5850-1G
0003.0001.01      HD 5850-1.5G
0003.0002.00      GTX 285-1G
0003.0002.01      GTX 285-1.5G

这种结构有一个很严重的问题就是:
每次新增数据都要找出某零件的已有编号。
而且partTypeID, number, version还要增加唯一索引,
如果有这三列的唯一索了,还需不需要
零件表 (partID, partTypeID, number, version...) 中的partID自增字段呢?
[/Quote]
你这里的“number”你想表示什么呢?
Gere Yeung 2009-10-26
  • 打赏
  • 举报
回复
3.末尾数字表示版本号,如:
0003.0001.00 HD 5850-1G
0003.0001.01 HD 5850-1.5G
0003.0002.00 GTX 285-1G
0003.0002.01 GTX 285-1.5G

这种结构有一个很严重的问题就是:
每次新增数据都要找出某零件的已有编号。
而且partTypeID, number, version还要增加唯一索引,
如果有这三列的唯一索了,还需不需要
零件表 (partID, partTypeID, number, version...) 中的partID自增字段呢?
vinsonshen 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vinsonshen 的回复:]
第二组数字表示的某零件分类的零件编号没有出现过,且是以前最大编号+1呢?
---------------------------------------
增加一个自增字段ID,然后取partID=right(10000+ID,4)
[/Quote]

这个实现可以在触发器里面实现
vinsonshen 2009-10-26
  • 打赏
  • 举报
回复
对了,你上面的版本号字段version是否要考虑某零件分类的零件编号下唯一呢?还是多条记录?或只保留最后的版本号呢?
ACMAIN_CHM 2009-10-26
  • 打赏
  • 举报
回复
[Quote]可是,当增加数据的时候怎么样才能保证
第二组数字表示的某零件分类的零件编号没有出现过,且是以前最大编号+1呢?[/Quote]

方法一:在你的应用程序代码中进行检查并生成这个 partID
select max(partID) from 零件表 where partTypeID='0000', 然后 +1
方法二:在触发器中实现,在 零件表 的 before insert 中利用上面的SQL语句,得到本 partTypeID 中最大的 partID 然后加一。同样对NULL处理一下。
vinsonshen 2009-10-26
  • 打赏
  • 举报
回复
第二组数字表示的某零件分类的零件编号没有出现过,且是以前最大编号+1呢?
---------------------------------------
增加一个自增字段ID,然后取partID=right(10000+ID,4)
ACMAIN_CHM 2009-10-26
  • 打赏
  • 举报
回复
[Quote]3.末尾数字表示版本号[/Quote]
这个你没有说明,所有无法判断你的设计如何。在没有这个要求的基础上。即仅考虑你的前两个

1.第一组数字编号表示零件分类,如:
2.第二组数字表示某零件分类的零件编号,如

则应该按照你的设计分成两个表
零件分类表 (partTypeID, partType, ...)
零件表 (partID, partTypeID, number, version...)


56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧