2013-04-21 94 views
0

問:如何防止重複記錄在數據庫

如何防止一個網站的兩個不同的管理員用戶創建一個客戶記錄使用相同的客戶ID。

背景資料:

  1. 檢查由允許範圍的數字:

    網站我與自動生成的實例合作一個名爲「客戶號」的基礎上例行/方法,做以下號碼使用cust_number_range表。

  2. 從客戶表中找出正在使用的最高號碼。
  3. 顯示「創建新客戶」表單上的下一個可用編號。
  4. 當點擊提交按鈕時,在嘗試保存記錄之前,我再次檢查客戶表以確保我已經計算出的數字,因爲下一個可用的表未被使用。如果它仍然可以,那麼我保存到數據庫。

這裏的數據庫是什麼樣子:

customer table 
===================== 
id   integer - primary key 
custnumber integer 
fname  varchar(255) 
lname  varchar(255) 

cust_number_range 
==================== 
lower_range integer 
upper_range integer 
id integer - primary key 

我碰到的問題是,如果兩個管理員點擊「提交」新卡斯特記錄在完全相同的時間,系統將創建兩個記錄具有相同的custnumber。 以下是我的一些問題:

  1. 是否使custnumber字段成爲pk的一部分可選?這意味着,這真的是「適當的」解決方案嗎?
  2. 我還有什麼其他的方式來解決這個問題?

謝謝。

+0

您使用的是什麼關係型數據庫管理系統,它對您如何執行此操作有所幫助。 – 2013-04-21 22:36:53

回答

0

您應該爲此使用唯一的列。但是,在將用戶添加到數據庫之前,我還會從代碼中檢查,檢查用戶是否不存在,如果不存在,只需添加。

0

你需要按順序排列數字嗎? 您可以創建一個「索引」表。

index_table 
==================== 
index_type integer (possible values - 1 for customers, 2 for orders, etc.) 
last_index integer 

每次你創建一個新的客戶通過推進last_index id字段創建從索引表中的用戶索引。 如果用戶不保存記錄,則只需跳過一個ID。

雖然大多數數據庫都有一個record_id,它有類似的機制,所以我建議使用它。