下表存储电话号码和使用该电话号码的人的姓名:
CREATE TABLE phone_numbers (
phone_number VARCHAR(12) PRIMARY KEY,
name TINYTEXT,
default_number BOOLEAN
);
每个人可以有多个电话号码,但只有一个属于一个人的电话号码可以是他们的默认电话号码(deafault_number = 1
)
如何编写约束来强制每个人只能有1个default_number=1?
可以使用唯一索引。在大多数数据库中,这将是一个经过过滤的惟一索引。在MySQL中,它使用表达式:
create unique index unq_phone_numbers_name on
phone_numbers(case when boolean then name end);
唯一索引允许多个NULL
值。但是一个给定的名字只能有一个数字。
也就是说,我实际上建议将默认数字存储在persons
表中,其中存储了名称。