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

我遇到的问题是,如果两个管理员同时点击“提交”新的客户记录,系统将创建两个具有相同客户编号的记录。以下是我的一些问题:

  1. 是否使 custnumber 字段成为 pk 可选的一部分?意思是,这真的是“正确”的解决方案吗?
  2. 我还有什么其他方法可以解决这个问题?

谢谢。

4

2 回答 2

0

您应该为此使用唯一列。但我也会从代码中检查,在将用户添加到数据库之前,检查用户是否不存在,如果不存在,则仅添加。

于 2013-04-21T22:38:38.750 回答
0

您需要按顺序排列数字吗?您可以创建一个“索引”表。

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

每次创建新客户时,通过推进 last_index id 字段从索引表中为用户创建索引。如果用户不保存记录,您只需跳过一个 id。

大多数数据库虽然有一个具有类似机制的record_id,所以我建议使用它。

于 2013-04-21T22:40:52.337 回答