Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Создание таблицы игроков
  2. CREATE TABLE players(
  3.   dci INTEGER PRIMARY KEY CHECK (dci > 0),
  4.   first_name CHAR(50) NOT NULL,
  5.   last_name CHAR(50) NOT NULL,
  6.   birth DATE,
  7.   country CHAR(50) NOT NULL,
  8.   judge_level INTEGER
  9. );
  10.  
  11. -- Создание таблицы форматов
  12. CREATE TABLE formats(
  13.   name CHAR(10) PRIMARY KEY,
  14.   casual BOOLEAN NOT NULL
  15. );
  16.  
  17.  
  18. -- Создание таблицы турниров
  19. CREATE TABLE tournaments(
  20.   id SERIAL PRIMARY KEY,
  21.   format_name CHAR(10) NOT NULL REFERENCES formats (name) ON DELETE RESTRICT ON UPDATE CASCADE,
  22.   date DATE NOT NULL,
  23.   location CHAR(50) NOT NULL,
  24.   judge INTEGER NOT NULL REFERENCES players (dci) ON DELETE RESTRICT ON UPDATE CASCADE
  25. );
  26.  
  27.  
  28. -- Создание триггера на проерку действительно ли судья турнира - судья
  29. CREATE FUNCTION check_judge() RETURNS TRIGGER AS $cTrig$
  30.   BEGIN
  31.     -- проверка на то, является ли игрок с данным DCI судьей
  32.     IF (SELECT judge_level FROM players WHERE players.dci = NEW.judge) IS NULL THEN
  33.       RAISE EXCEPTION 'Wrong DCI (%) of judge!', NEW.judge;
  34.     END IF;
  35.  
  36.     -- проверяем, что данный судья может судить турниры данного формата
  37.     IF NOT (SELECT casual FROM formats WHERE formats.name = NEW.format_name) THEN
  38.       IF (SELECT judge_level FROM players WHERE players.dci = NEW.judge) = 0 THEN
  39.         RAISE EXCEPTION 'Judge with DCI % have lvl 0 and cant judge tournament of format %', NEW.judge, NEW.format_name;
  40.       END IF;
  41.     END IF;
  42.  
  43.     RETURN NEW;
  44.   END;
  45. $cTrig$ LANGUAGE plpgsql;
  46.  
  47. CREATE TRIGGER check_judge_trigger BEFORE INSERT OR UPDATE ON tournaments
  48.   FOR EACH ROW EXECUTE PROCEDURE check_judge();
  49.  
  50. -- Создание таблицы карт
  51. CREATE TABLE cards(
  52.   name CHAR(50) PRIMARY KEY,
  53.   text CHAR(300) NOT NULL
  54. );
  55.  
  56. -- Создание таблицы колод
  57. CREATE TABLE decks(
  58.   id SERIAL PRIMARY KEY ,
  59.   name CHAR(50) NOT NULL,
  60.   format_name CHAR(10) NOT NULL REFERENCES formats (name) ON DELETE RESTRICT ON UPDATE CASCADE
  61. );
  62.  
  63. -- Создание таблицы, содержащей информация по картам, содержащимся в колоде
  64. CREATE TABLE deck_card(
  65.   deck_id INTEGER REFERENCES decks (id) ON DELETE CASCADE ON UPDATE CASCADE,
  66.   card_name CHAR(50) REFERENCES cards (name) ON DELETE CASCADE ON UPDATE CASCADE,
  67.   copies INTEGER CHECK (copies < 5 AND copies > 0),
  68.  
  69.   PRIMARY KEY (deck_id, card_name)
  70. );
  71.  
  72. -- Создание таблицы с данными о турнирах, участниках турнира, колодах участников и результатах участников
  73. CREATE TABLE participations(
  74.   dci INTEGER REFERENCES players (dci) ON DELETE CASCADE ON UPDATE CASCADE,
  75.   tournament_id INTEGER REFERENCES tournaments (id) ON DELETE CASCADE,
  76.   deck_id INTEGER REFERENCES decks (id) ON DELETE CASCADE,
  77.   wins INTEGER NOT NULL CHECK (wins >= 0),
  78.   loses INTEGER NOT NULL CHECK (loses >= 0),
  79.   draws INTEGER NOT NULL CHECK (draws >= 0),
  80.  
  81.   PRIMARY KEY (dci, tournament_id)
  82. );
  83.  
  84. -- Создание таблицы сетов
  85. CREATE TABLE expansions(
  86.   name CHAR(50) PRIMARY KEY,
  87.   release DATE
  88. );
  89.  
  90. -- Создание таблицы с информацией о цене карты из конкретного сета и ее изображении
  91. CREATE TABLE expansion_card_price(
  92.   card_name CHAR(50) REFERENCES cards (name) ON DELETE CASCADE ON UPDATE CASCADE,
  93.   expansion_name CHAR(50) REFERENCES expansions (name) ON DELETE CASCADE ON UPDATE CASCADE,
  94.   price REAL NOT NULL,
  95.   image_url CHAR(100) NOT NULL,
  96.  
  97.   PRIMARY KEY (card_name, expansion_name)
  98. );
  99.  
  100. -- Создание таблицы легальности сетов в форматах
  101. CREATE TABLE format_expansion(
  102.   expansion_name CHAR(50) REFERENCES expansions (name) ON DELETE CASCADE ON UPDATE CASCADE,
  103.   format_name CHAR(50) REFERENCES formats (name) ON DELETE CASCADE ON UPDATE CASCADE,
  104.  
  105.   PRIMARY KEY (expansion_name, format_name)
  106. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement