Created
June 15, 2026 14:27
-
-
Save thinkphp/eec820419a9fb074ad589873fc92d0aa to your computer and use it in GitHub Desktop.
Tournament medals
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- 1. Creaza tabelul FARA chk_medal_recipient | |
| CREATE TABLE Tournament_Medals ( | |
| Tournament_Medals_ID INT AUTO_INCREMENT, | |
| Tournament_ID INT NOT NULL, | |
| Sport_ID INT NOT NULL, | |
| Category_ID INT NOT NULL, | |
| Team_ID INT NULL, | |
| Player_ID INT NULL, | |
| Medal_Type ENUM('Gold','Silver','Bronze') NOT NULL, | |
| PRIMARY KEY (Tournament_Medals_ID), | |
| CONSTRAINT fk_medal_tournament FOREIGN KEY (Tournament_ID) | |
| REFERENCES Tournament(Tournament_ID) | |
| ON DELETE RESTRICT ON UPDATE CASCADE, | |
| CONSTRAINT fk_medal_sport FOREIGN KEY (Sport_ID) | |
| REFERENCES Sport(Sport_ID) | |
| ON DELETE RESTRICT ON UPDATE CASCADE, | |
| CONSTRAINT fk_medal_category FOREIGN KEY (Category_ID) | |
| REFERENCES Category(Category_ID) | |
| ON DELETE RESTRICT ON UPDATE CASCADE, | |
| CONSTRAINT fk_medal_team FOREIGN KEY (Team_ID) | |
| REFERENCES Team(Team_ID) | |
| ON DELETE RESTRICT ON UPDATE CASCADE, | |
| CONSTRAINT fk_medal_player FOREIGN KEY (Player_ID) | |
| REFERENCES Player(Player_ID) | |
| ON DELETE RESTRICT ON UPDATE CASCADE, | |
| CONSTRAINT uq_medal UNIQUE (Tournament_ID, Category_ID, Medal_Type) | |
| ); | |
| -- 2. Trigger BEFORE INSERT | |
| DELIMITER $$ | |
| CREATE TRIGGER trg_medal_recipient_insert | |
| BEFORE INSERT ON Tournament_Medals | |
| FOR EACH ROW | |
| BEGIN | |
| IF NOT ( | |
| (NEW.Team_ID IS NOT NULL AND NEW.Player_ID IS NULL) | |
| OR | |
| (NEW.Team_ID IS NULL AND NEW.Player_ID IS NOT NULL) | |
| ) THEN | |
| SIGNAL SQLSTATE '45000' | |
| SET MESSAGE_TEXT = 'O medalie trebuie sa apartina fie unui Team, fie unui Player - nu ambilor sau niciunuia.'; | |
| END IF; | |
| END$$ | |
| DELIMITER ; | |
| -- 3. Trigger BEFORE UPDATE | |
| DELIMITER $$ | |
| CREATE TRIGGER trg_medal_recipient_update | |
| BEFORE UPDATE ON Tournament_Medals | |
| FOR EACH ROW | |
| BEGIN | |
| IF NOT ( | |
| (NEW.Team_ID IS NOT NULL AND NEW.Player_ID IS NULL) | |
| OR | |
| (NEW.Team_ID IS NULL AND NEW.Player_ID IS NOT NULL) | |
| ) THEN | |
| SIGNAL SQLSTATE '45000' | |
| SET MESSAGE_TEXT = 'O medalie trebuie sa apartina fie unui Team, fie unui Player - nu ambilor sau niciunuia.'; | |
| END IF; | |
| END$$ | |
| DELIMITER ; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment