You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
3.5 KiB

DROP TABLE IF EXISTS GameDetail, Game, Team, Player, BestScorer CASCADE;
CREATE TABLE Player (
id varchar(10) PRIMARY KEY,
name varchar(50),
country varchar(50)
);
CREATE TABLE Team(
id varchar(10) PRIMARY KEY,
abbreviation char(3),
nickname varchar(30),
city varchar(30),
minYear numeric,
yearFounded numeric,
arena varchar(30),
arenaCapacity numeric,
conference char(1)
);
CREATE TABLE Game(
id char(8) PRIMARY KEY,
dateGame date,
idHomeTeam varchar(10) REFERENCES Team,
idVisitorTeam varchar(10) REFERENCES Team,
season numeric,
ptsHome numeric,
fieldGoalsPrctageHome numeric CHECK(fieldGoalsPrctageHome <=1 AND fieldGoalsPrctageHome >= 0),
freeThrowsPrctageHome numeric CHECK(freeThrowsPrctageHome <=1 AND freeThrowsPrctageHome >= 0),
threePointsPrctageHome numeric CHECK(threePointsPrctageHome <=1 AND threePointsPrctageHome >= 0),
assistsHome numeric,
reboundsHome numeric,
ptsAway numeric,
fieldGoalsPrctageAway numeric CHECK(fieldGoalsPrctageAway <=1 AND fieldGoalsPrctageAway >= 0),
freeThrowsPrctageAway numeric CHECK(freeThrowsPrctageAway <=1 AND freeThrowsPrctageAway >= 0),
threePointsPrctageAway numeric CHECK(threePointsPrctageAway <=1 AND threePointsPrctageAway >= 0),
assistsAway numeric,
reboundsAway numeric,
homeTeamWins boolean
);
CREATE TABLE GameDetail(
idGame char(8) REFERENCES Game,
idTeam varchar(10) REFERENCES Team,
idPlayer varchar(10) REFERENCES Player,
startPosition char(1),
comment varchar(50),
playingTime interval,
fieldGoalsMade numeric,
fieldGoalsAttempted numeric,
fieldGoalsPrctage numeric CHECK(fieldGoalsPrctage <=1 AND fieldGoalsPrctage >= 0),
threePointsMade numeric,
threePointsAttempted numeric,
threePointsPrctage numeric CHECK(threePointsPrctage <=1 AND threePointsPrctage >= 0),
freeThrowsMade numeric,
freeThrowsAttempted numeric,
freeThrowsPrctage numeric CHECK(freeThrowsPrctage <=1 AND freeThrowsPrctage >= 0),
offensiveRebounds numeric,
defensiveRebounds numeric,
rebounds numeric,
assists numeric,
steals numeric,
blockedShots numeric,
turnovers numeric,
personnalFoul numeric,
points numeric,
plusMinus numeric,
PRIMARY KEY(idGame, idTeam, idPlayer)
);
CREATE TABLE BestScorer(
maxPts numeric,
idPlayer varchar(10),
idGame char(8)
);
CREATE OR REPLACE FUNCTION fctMatch() RETURNS trigger AS $$
BEGIN
-- ! Verifie si dans BestScorer si pas, on, insert, si >, on insert sinon on fait rien
IF (SELECT count(*) FROM BestScorer WHERE idGame = NEW.idGame) = 0 THEN
INSERT INTO BestScorer VALUES(NEW.points, NEW.idPlayer, NEW.idGame);
ELSEIF NEW.points > (SELECT DISTINCT maxPts FROM BestScorer WHERE idGame = NEW.idGame) THEN
UPDATE BestScorer SET maxPts = NEW.points, idPlayer = NEW.idPlayer WHERE idGame = NEW.idGame;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE trigger trigTraceMatch BEFORE INSERT ON GameDetail
FOR EACH ROW
EXECUTE FUNCTION fctMatch();
\i players.sql
\i teams.sql
\i games.sql
\i games-details.sql