2011-06-16 105 views
1

MySQL用作数据库。MySQL:自定义自动生成的密钥(AUTO_INCREMENT /多列索引)

作为库存系统的一部分,我需要生成库存号,这是资产的唯一标识符。客户有这个数字不只是自动增量整数要求,但如下模式: @ BusinessUnit @ YYYY @数

,其中

@BusinessUnit =代表业务单位串; @YYYY =当年; @ Number = n =此BusinessUnit的唯一编号&今年:第n个项目资产在今年系统中注册并准备出售。

例如,假设我们有不同的用户输入2个业务单元的资产= {NY,CA}。库存数字将预计如下: NY201100001 NY201100002 CA201100001 NY201100003 CA201100002

到目前为止,根据现有的手册,首先想到的是用AUTO_INCREMENT,并为每个业务单元单独的表上插入触发器,在后从数字自动生成的ID更新库存表中插入,其中包含所有业务单元资产和生成的标识,其中连接的业务单位和年度在前面。 也作为新的一年重置AUTO_INCREMENT = 0 - 改变所有表。

有没有更好的方法和能力避免需要创建多个表,我可以创建多少列多列索引?如果是,请提供适当的表格定义样本?

回答

1

DISREGARD THE客户(部分)。

用自动增量“InventoryID”创建表格,以保证简单的断开连接的上下文到记录上的其他任何内容。创建一个SECOND列,它们的“InventoryIDUnit”可以是与您负责保存的业务规则匹配的“候选”键。当在“InventoryIDUnit”(特别是格式化字段)上进行搜索时,在内部以及通过系统的其余部分进行搜索时,您将拥有INTERNAL数字,以便通过系统连接其余部分。

想象一下客户订单系统。如果你根据一个人的名字创建了它,那么多少“Jane Doe”版本......它们是否相同......在内部,客户有一个ID,所有订单都回到该公共ID。然后,简结婚,现在是“简史密斯”...你是否会回头查看数据并将所有条目重命名为新名字?这就是代理键的全部目的。

0

您可以使用存储过程生成自定义自动递增值,如描述:

http://en.latindevelopers.com/ivancp/2012/custom-auto-increment-values/

你会得到这样的键:

SELECT * FROM custom_autonums; 
+----+------------+------------+ 
| id | seq_1  | seq_2  | 
+----+------------+------------+ 
| 4 | 001-000001 | DBA-000001 | 
| 5 | 001-000002 | DBA-000002 | 
| 6 | 001-000003 | DBA-000003 | 
| 7 | 001-000676 | DBA-000004 | 
| 8 | 001-000677 | DBA-000005 | 
| 9 | 001-000678 | DBA-000006 |