2013-10-01 55 views
0

我有一个表,其名称是address_book。如何在布尔值上创建唯一约束2列?

我已经域ID,USER_ID,......,DEFAULT_ADDRESS,address_type

address_type是布尔值(0:送货地址 - 1:发票地址) DEFAULT_ADDRESS是布尔值(0:不默认地址 - 1:默认地址)

认为一家公司有8个地址。五个地址用于发货,三个地址用于发票。

但是在同一时间只有一个默认值取决于address_type。一个默认地址用于发送发票的一个默认地址。

如果我查询这种说法

alter table address_book add unique index(default_address, address_type) 

它不会是合乎逻辑的。

id | user_id | default_address | address_type| 
.. | .. |     |    | 
.. | .. |     |    | 
.. | .. |     |    | 
---------------------------------------------- 
12 | 10 |  1   |  1  | 
---------------------------------------------- 
13 | 10 |  0   |  1  | 
---------------------------------------------- 
14 | 10 |  0   |  1  | 
---------------------------------------------- 
15 | 10 |  1   |  0  | 
---------------------------------------------- 
16 | 10 |  0   |  0  | 
---------------------------------------------- 
17 | 10 |  0   |  0  | 

在这个概念中,每个用户最多可以有2个default_address,一个是发票一是发货地址。

我如何使用独特的索引,我想验证这种情况。

+0

我不确定你可以,因为数据不是唯一的...你想要一个约束,以确保'default_address' +'address_type'是唯一**只有**当默认地址标志== 1而INDEX不会为你做到这一点。我想你需要通过存储过程(或者在应用程序级别)通过INSERT评估它。或者你需要重新设计你的数据库结构。 – CD001

回答

0

如何添加两个新表,一个用于默认发票地址,另一个用于默认发货。那么你对这两个表的限制就是address.id和user.id.主键是两个字段。