我们有一个应用程序,其工作流程涉及向外部组提交信息,然后将用户的ID号输入系统。
出于这个原因,我们允许将一个设置的默认值"00000000"
作为暂定值放入id字段中,然后才能批准该条目并输入一个永久值。
我正在寻找的内容实际上是一种确保列保持unique
除了那个值的方法。
我基本上寻找的是UNIQUE
约束,但NULL
不是"00000000"
,而是CHECK
。我认为这是class register_model extends CI_Controller {
约束的一部分,但这似乎是一个很大的性能影响。 (假设UNIQUE进行某种索引)
答案 0 :(得分:8)
使用已过滤的索引
如下: -
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notspecificvalue
ON YourTable(yourcolumn)
WHERE yourcolumn != "00000000";
示例:强>
-- Create Table
Create table Test (id int identity, code varchar (100))
-- Create Unique Filtered Index
CREATE UNIQUE NONCLUSTERED INDEX idx_MyCol_Filtered
ON Test(code)
WHERE code != '00000000';
-- Insert Dumy Data >> '00000000' is repeated and '0101' is once
insert into Test (code)
Values ('00000000'),
('00000000'),
('00000000'),
('0101')
select * from Test
结果:
-- Now try inserting '0101' again
insert into Test (code) Values ('0101')
结果:
了解更多详情: Create Filtered Indexes
答案 1 :(得分:0)
通过工作流批准用户输入听起来像非常关键的业务逻辑。我想建议生成随机但唯一(如时间戳)的数字,并插入新的用户条目。保留额外的列,以区分(标记)已批准的条目与未批准的条目。一旦用户获得工作流程的批准,请更新id和flag。