Estou tendo dificuldade em explicar isso, então deixe-me ilustrá-lo com um exemplo.
Eu tenho uma tabela para comentários e parece assim:
CREATE TABLE comments (
id INT UNSIGNED AUTO_INCREMENT,
parent_id INT UNSIGNED,
article_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
ip VARCHAR(255) NOT NULL,
submitted_at TIMESTAMP DEFAULT NOW(),
comment TEXT,
PRIMARY KEY (id),
CONSTRAINT fk_com_parent
FOREIGN KEY (parent_id)
REFERENCES comments (id)
CONSTRAINT fk_com_article
FOREIGN KEY (article_id)
REFERENCES articles (id)
CONSTRAINT fk_com_user
FOREIGN KEY (user_id)
REFERENCES users (id)
);
Agora faz sentido que, se parent_id
estiver definido, filho e pai compartilhem o mesmo arquivo article_id
.
As respostas a um comentário devem estar no mesmo artigo. Então, existe uma maneira de contrariar isso?