2013-04-21 90 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,它有类似的机制,所以我建议使用它。