Olá, eu estava pensando em uma situação que é mais ou menos a seguinte: Em um relacionamento N:N, eu quero apagar um registro de um lado (esquerdo) e, o momento que o outro (direito) não referenciar mais ninguém do deste primeiro, ele também seja apagado.
Por exemplo: Uma relação de Rifa e Ticket:
Eu posso ter várias rifas e vários tickets. No momento em que eu apagar um ticket, basta remover ele da tabela ticket e rifa_ticket. Até aí tudo bem.
Mas, no momento em que eu quiser remover uma rifa, as coisas mudam um pouco. Eu até posso fazer o mesmo procedimento para a rifa, até porque um ticket pode referenciar outras também... Porém, é aí que está a dúvida: Quando todas as rifas que um ticket referenciam se esgotam, como que eu apago estes registros da tabela ticket? Não faz mais sentido (neste caso) eu manter 1 registro que não aponta pra mais ninguém da tabela rifa.
Eu deixei o código SQL aqui em baixo para quem quiser responder utilizando ele:
create database nova_rifa;
Use nova_rifa;
CREATE TABLE RIFA
(
RIFA_ID INT AUTO_INCREMENT,
RESPONSAVEL VARCHAR(255),
DESCRICAO VARCHAR(255),
PRIMARY KEY(RIFA_ID)
);
CREATE TABLE TICKET
(
TICKET_ID INT AUTO_INCREMENT,
RIFA_ID INT,
CLIENTE_ID INT,
NUMERO INT,
CONSTRAINT RIFA_NUMERO UNIQUE (RIFA_ID,NUMERO),
PRIMARY KEY(TICKET_ID)
);
CREATE TABLE RIFA_TICKET
(
RIFA_ID INT,
TICKET_ID INT,
foreign key (RIFA_ID) references RIFA (RIFA_ID),
foreign key (TICKET_ID) references TICKET (TICKET_ID),
PRIMARY KEY(RIFA_ID, TICKET_ID)
);