2011-06-16 102 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 |