Eu tenho o seguinte projeto. Cada usuário tem seus próprios contatos , seus próprios hosts e os atribui a um domínio que pertence apenas a ele.
Quero garantir que o host que você atribui ao domínio pertence ao usuário ao qual o domínio está atribuído.
É algo que devo garantir na lógica do meu aplicativo?
Se eu definir domains.user_id
foreign key
como referência host.user_id
e user_id.id
isso eliminar meu problema?
A propósito, alguém pode me sugerir um design melhor para o meu esquema?
Este é um problema bastante comum, quando o desenho tem uma forma de "diamante". Veja questões semelhantes:
Muitos para Muitos e Entidades Fracas
Com o MySQL, eu usaria algo assim:
(0) Observe que prefiro
user_id
como nome para a chave primária deusers
e nãoid
para todas as tabelas. Acho o código SQL totalmente confuso caso contrário (além disso, você pode usar aJOIN ... USING (tablename_id)
sintaxe).(1)
UNIQUE
As restrições extras nas tabelashosts
econtacts
são necessárias para as chaves estrangeiras dadomains
tabela.(2) As duas
FOREIGN KEY
restrições dadomains
tabela são alteradas para usar chaves compostas (inclua ouser_id
).Mesa
users
Mesa
contacts
Mesa
hosts
Mesa
domains