CREATE TABLE classement (
  PRIMARY KEY (idclassement),
  idclassement INTEGER AUTO_INCREMENT,
  nom VARCHAR(42),
  portee VARCHAR(42)
);

CREATE TABLE classement_equipe (
  PRIMARY KEY (idclassement),
  idclassement INTEGER AUTO_INCREMENT
);

CREATE TABLE classement_individuel (
  PRIMARY KEY (idclassement),
  idclassement INTEGER AUTO_INCREMENT
);

CREATE TABLE equipe (
  PRIMARY KEY (idequipe),
  idequipe INTEGER AUTO_INCREMENT,
  nom VARCHAR(42)
);

CREATE TABLE est_classe (
  PRIMARY KEY (idjoueur, idclassement),
  idjoueur INTEGER NOT NULL,
  idclassement INTEGER NOT NULL,
  rang VARCHAR(42)
);

CREATE TABLE est_lie_a (
  PRIMARY KEY (idclassement_composee, idclassement_composante),
  idclassement_composee INTEGER,
  idclassement_composante INTEGER,
  quantite VARCHAR(42)
);

CREATE TABLE joueur (
  PRIMARY KEY (idjoueur),
  idjoueur INTEGER AUTO_INCREMENT,
  nom VARCHAR(42),
  prenom VARCHAR(42),
  pseudo VARCHAR(42),
  annee_nais YEAR,
  email VARCHAR(80),
  idequipe INTEGER NULL DEFAULT NULL
);

CREATE TABLE participe (
  PRIMARY KEY (idtournoi, niveau, idjoueur),
  idtournoi INTEGER NOT NULL,
  niveau VARCHAR(42) NOT NULL,
  idjoueur INTEGER NOT NULL,
  a_joue VARCHAR(42),
  est_qualifie VARCHAR(42)
);

CREATE TABLE phase (
  PRIMARY KEY (idtournoi, niveau),
  idtournoi INTEGER AUTO_INCREMENT,
  niveau VARCHAR(42) NOT NULL,
  date_p DATE
);

CREATE TABLE sont_classes (
  PRIMARY KEY (idequipe, idclassement),
  idequipe INTEGER NOT NULL,
  idclassement INTEGER NOT NULL,
  rang VARCHAR(42)
);

CREATE TABLE tournoi (
  PRIMARY KEY (idtournoi),
  idtournoi INTEGER AUTO_INCREMENT,
  nom VARCHAR(42),
  date_deb DATE,
  date_fin DATE
);

ALTER TABLE
  classement_equipe
ADD
  FOREIGN KEY (idclassement) REFERENCES classement (idclassement);

ALTER TABLE
  classement_individuel
ADD
  FOREIGN KEY (idclassement) REFERENCES classement (idclassement);

ALTER TABLE
  est_classe
ADD
  FOREIGN KEY (idclassement) REFERENCES classement_individuel (idclassement);

ALTER TABLE
  est_classe
ADD
  FOREIGN KEY (idjoueur) REFERENCES joueur (idjoueur);

ALTER TABLE
  est_lie_a
ADD
  FOREIGN KEY (idclassement_composante) REFERENCES classement (idclassement);

ALTER TABLE
  est_lie_a
ADD
  FOREIGN KEY (idclassement_composee) REFERENCES classement (idclassement);

ALTER TABLE
  joueur
ADD
  FOREIGN KEY (idequipe) REFERENCES equipe (idequipe);

ALTER TABLE
  participe
ADD
  FOREIGN KEY (idjoueur) REFERENCES joueur (idjoueur);

ALTER TABLE
  participe
ADD
  FOREIGN KEY (idtournoi, niveau) REFERENCES phase (idtournoi, niveau);

ALTER TABLE
  phase
ADD
  FOREIGN KEY (idtournoi) REFERENCES tournoi (idtournoi);

ALTER TABLE
  sont_classes
ADD
  FOREIGN KEY (idclassement) REFERENCES classement_equipe (idclassement);

ALTER TABLE
  sont_classes
ADD
  FOREIGN KEY (idequipe) REFERENCES equipe (idequipe);

CREATE TABLE comprend (
  PRIMARY KEY (idpartie, num_tour, idlancer),
  idpartie INTEGER NOT NULL,
  num_tour INTEGER NOT NULL,
  idlancer INTEGER NOT NULL
);

CREATE TABLE effectue (
  PRIMARY KEY (rang_couleur_valeur, idjoueur, idlancer),
  rang_couleur_valeur VARCHAR(42) NOT NULL,
  idjoueur INTEGER NOT NULL,
  idlancer INTEGER NOT NULL
);

CREATE TABLE partie (
  PRIMARY KEY (idpartie),
  idpartie INTEGER AUTO_INCREMENT,
  date_partie DATE,
  horaire VARCHAR(42),
  duree VARCHAR(42),
  etat VARCHAR(42)
);

CREATE TABLE tour (
  PRIMARY KEY (idpartie, num_tour),
  num_tour INTEGER NOT NULL,
  idpartie INTEGER NOT NULL
);

ALTER TABLE
  comprend
ADD
  FOREIGN KEY (idpartie, num_tour) REFERENCES tour (idpartie, num_tour);

ALTER TABLE
  effectue
ADD
  FOREIGN KEY (idjoueur) REFERENCES joueur (idjoueur);

ALTER TABLE
  tour
ADD
  FOREIGN KEY (idpartie) REFERENCES partie (idpartie);

CREATE TABLE carte (
  PRIMARY KEY (idcarte),
  idcarte INTEGER AUTO_INCREMENT,
  niveau VARCHAR(42),
  img VARCHAR(42),
  points VARCHAR(42)
);

CREATE TABLE est_compose (
  PRIMARY KEY (idcarte, idplateau),
  idcarte INTEGER NOT NULL,
  idplateau INTEGER NOT NULL,
  rang VARCHAR(42)
);

CREATE TABLE plateau (
  PRIMARY KEY (idplateau),
  idplateau INTEGER AUTO_INCREMENT,
  taille VARCHAR(42)
);

ALTER TABLE
  est_compose
ADD
  FOREIGN KEY (idplateau) REFERENCES plateau (idplateau);

ALTER TABLE
  est_compose
ADD
  FOREIGN KEY (idcarte) REFERENCES carte (idcarte);

CREATE TABLE choisit_main (
  PRIMARY KEY (idjoueur, num_tour),
  idjoueur INTEGER NOT NULL,
  num_tour INTEGER NOT NULL,
  nb_de_rouge VARCHAR(42),
  nb_de_jaune VARCHAR(42),
  nb_de_bleu VARCHAR(42)
);

ALTER TABLE
  choisit_main
ADD
  FOREIGN KEY (idjoueur) REFERENCES joueur (idjoueur);

CREATE TABLE tente_validation (
  PRIMARY KEY (num_tour, idjoueur, idcarte),
  num_tour INTEGER NOT NULL,
  idjoueur INTEGER NOT NULL,
  idcarte INTEGER NOT NULL,
  nb_tentatives VARCHAR(42)
);

ALTER TABLE
  tente_validation
ADD
  FOREIGN KEY (idcarte) REFERENCES carte (idcarte);

ALTER TABLE
  tente_validation
ADD
  FOREIGN KEY (idjoueur) REFERENCES joueur (idjoueur);

CREATE TABLE contrainte (
  PRIMARY KEY (idcontrainte),
  idcontrainte INTEGER AUTO_INCREMENT,
  couleur VARCHAR(42)
);

CREATE TABLE face_de_de (
  PRIMARY KEY (idcontrainte),
  idcontrainte INTEGER AUTO_INCREMENT,
  valeur VARCHAR(42)
);

CREATE TABLE serie_au_choix (
  PRIMARY KEY (idcontrainte),
  idcontrainte INTEGER AUTO_INCREMENT,
  nombre VARCHAR(42)
);

CREATE TABLE seuil_de_des (
  PRIMARY KEY (idcontrainte),
  idcontrainte INTEGER AUTO_INCREMENT,
  valeur VARCHAR(42),
  sens VARCHAR(42)
);

ALTER TABLE
  face_de_de
ADD
  FOREIGN KEY (idcontrainte) REFERENCES contrainte (idcontrainte);

ALTER TABLE
  serie_au_choix
ADD
  FOREIGN KEY (idcontrainte) REFERENCES contrainte (idcontrainte);

ALTER TABLE
  seuil_de_des
ADD
  FOREIGN KEY (idcontrainte) REFERENCES contrainte (idcontrainte);