salary INT CHECK(salary >= 0) NOT NULL DEFAULT 0,
bonus INT CHECK(bonus >= 0) NOT NULL DEFAULT 0,
penalty INT CHECK(penalty >= 0) NOT NULL DEFAULT 0,
CONSTRAINT team_num UNIQUE(team_id, num)
);
--Таблица игр. При удалении одной из играющих команд из таблицы teams, записи об
--играх этой команды удаляются из таблицы games. Играющие команды не могут
--совпадать
CREATE TABLE games
(
game_id SERIAL PRIMARY KEY,
day DATE NOT NULL,
city_id INT NOT NULL REFERENCES city ON DELETE RESTRICT,
team1_id INT NOT NULL REFERENCES teams ON DELETE CASCADE,
team2_id INT NOT NULL REFERENCES teams ON DELETE CASCADE,
resources INT NOT NULL CHECK(resources >= 0) DEFAULT 0,
tickets_price INT NOT NULL CHECK(tickets_price >= 0) DEFAULT 0,
tickets INT NOT NULL CHECK(tickets >= 0) DEFAULT 0,
sold_tickets INT NOT NULL CHECK(sold_tickets >= 0) DEFAULT 0,
CONSTRAINT teams CHECK(team1_id != team2_id),
CONSTRAINT tickets CHECK(sold_tickets <= tickets)
);
--Таблицастатистики игр. Содержит число голов, голевых пасов и т.п. каждого игрока
--для каждой игры. При удалении игры из таблицы games, статистика игроков в этой
--игре также удаляется из таблицы stats
CREATE TABLE stats
(
game_id INT NOT NULL REFERENCES games ON DELETE CASCADE,
player_id INT NOT NULL REFERENCES players ON DELETE CASCADE,
goals INT NOT NULL CHECK(goals >= 0) DEFAULT 0,
assists INT NOT NULL CHECK(assists >= 0) DEFAULT 0,
game_time INT NOT NULL CHECK(game_time >= 0) DEFAULT 0,
penalty_time INT NOT NULL CHECK(penalty_time >= 0) DEFAULT 0
);
--Добавление города
--Параметры: название города
CREATE OR REPLACE FUNCTION add_city(VARCHAR(20))
RETURNS CHAR
AS '
DECLARE id INT;
BEGIN
INSERT INTO city(name) VALUES(upper($1))
RETURNING city_id INTO id;
INSERT INTO log VALUES(DEFAULT, ''add_city'', now());
RETURN ''city_id = '' || id;
END;
' LANGUAGE 'plpgsql';
--Удаление города
--Параметры: название города
CREATE OR REPLACE FUNCTION remove_city(VARCHAR(20))
RETURNS CHAR
AS '
BEGIN
DELETE FROM city WHERE name = upper($1);
IF NOT FOUND THEN
RETURN ''city = '' || $1 || '' does not exist!'';
END IF;
INSERT INTO log VALUES(DEFAULT, ''remove_city'', now());
RETURN ''Done!'';
END;
' LANGUAGE 'plpgsql';
--Добавление команды
--Параметры: название команды, название города
CREATE OR REPLACE FUNCTION add_team(VARCHAR(20), VARCHAR(20))
RETURNS CHAR
AS '
DECLARE id INT;
BEGIN
SELECT city_id INTO id FROM city WHERE name = upper($2);
IF NOT FOUND THEN
RETURN ''city = '' || $2 || '' does not exist!'';
END IF;
INSERT INTO teams(name, city_id) VALUES(upper($1), id)
RETURNING team_id INTO id;
INSERT INTO log VALUES(DEFAULT, ''add_team'', now());
RETURN ''team_id = '' || id;
END;
' LANGUAGE 'plpgsql';
--Изменение команды
--Параметры: id команды, новое название, название города
CREATE OR REPLACE FUNCTION edit_team(INT, VARCHAR(20), VARCHAR(20))
RETURNS CHAR
AS '
DECLARE id INT;
BEGIN
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.