Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como apagar registros N:N neste caso?

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)
);
1 resposta
solução!

No mundo Java, após aprender um pouco mais de JPA, uma possível solução está aqui.