Eu tenho duas tabelas: user
e address
.
Tabela do usuário:
Eu iria | o email | nome |
---|---|---|
1 | [email protected] | Henk |
2 | [email protected] | John |
Tabela de endereços:
Eu iria | ID do usuário | rua | is_default |
---|---|---|---|
1 | 1 | Rua super legal | 1 |
2 | 1 | Avenida bonita | 0 |
3 | 1 | Alguma rua | 0 |
4 | 2 | Maldita rua legal | 0 |
5 | 2 | Rua legal | 1 |
6 | 2 | Minha rua | 0 |
O problema
Imagem de alguém configurando dois endereços padrão para um usuário; não faria sentido do ponto de vista da lógica de negócios.
A questão
Eu quero criar uma restrição exclusiva composta por user_id
e is_default
apenas para um caso específico, que é que a restrição deve ser aplicada quando is_default
é 1
.
Isso é possível com o mysql?
Adicione uma coluna de chave estrangeira na
user
tabela que faça referência à chave primária daaddress
tabela. Chame-odefault_address_id
. Isso impõe exclusividade porque pode ter apenas um valor por vez para um determinado usuário.Em seguida, elimine a
is_default
coluna em suaaddress
tabela porque corre o risco de discordar da chave estrangeira nauser
tabela.