sql >> Databasteknik >  >> RDS >> Mysql

Hur upprätthåller man referensintegritet på enkelbordsarv?

Vad du kan göra är att implementera triggers på dina Users och Team tabeller som körs när rader tas bort från antingen:

Användartabell:

DELIMITER $$
CREATE TRIGGER user_playlist_delete 
BEFORE DELETE ON User FOR EACH ROW
BEGIN
    DELETE a FROM Playlist a
    INNER JOIN UserPlaylist b ON a.id = b.id AND b.userId = OLD.id;
END$$
DELIMITER ;

Tabell för lag:

DELIMITER $$
CREATE TRIGGER team_playlist_delete 
BEFORE DELETE ON Team FOR EACH ROW
BEGIN
    DELETE a FROM Playlist a
    INNER JOIN TeamPlaylist b ON a.id = b.id AND b.teamId = OLD.id;
END$$
DELIMITER ;

Vad dessa utlösare kommer att göra är varje gång en post raderas från en av dessa tabeller, en DELETE operationen körs automatiskt på Playlists tabell med id som är på väg att raderas (via en inre koppling).

Jag har testat detta och det fungerar utmärkt.



  1. Välj objekt från olika källor och ordna efter datum

  2. Installera Ubuntu 18.04 för SQL Server 2019 på virtuell maskin med VMware Workstation

  3. Anslut till en PostgreSQL-databas på en Docker-behållare

  4. Skapa en beräknad kolumn som använder data från en annan tabell i SQL Server