【问题标题】:How can I create a unique constraint 2 columns on Boolean Values?如何在布尔值上创建唯一约束 2 列?
【发布时间】:2013-10-01 14:02:14
【问题描述】:

我有一个名为 address_book 的表。

我有字段 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 一个是发票一个是送货地址。

我如何使用唯一索引来验证这种情况。

【问题讨论】:

  • 我不确定您是否可以,因为数据不是 UNIQUE ...您需要一个约束来确保 default_address + address_type 是唯一的当默认地址标志 == 1 并且 INDEX 不会为您执行此操作时。我认为您需要通过存储过程(或在应用程序级别)在 INSERT 上对其进行评估。或者你需要重新设计你的数据库结构。

标签: php mysql indexing unique-constraint


【解决方案1】:

如何添加两个新表,一个用于默认发票地址,一个用于默认交货。然后你对这两个表的约束将只是 address.id 和 user.id。主键是两个字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多