START TRANSACTION;

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

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

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

CREATE TABLE
  classement_individuel (
    PRIMARY KEY (idclassement, idjoueur),
    idclassement INTEGER AUTO_INCREMENT,
    idjoueur INTEGER NOT NULL,
    rang INTEGER DEFAULT NULL
  );

-- lancer de dé dans un tour
CREATE TABLE
  comprend (
    PRIMARY KEY (idpartie, num_tour, idlancer, numero_lancer_dans_tour),
    idpartie INTEGER NOT NULL,
    num_tour INTEGER NOT NULL,
    idlancer INTEGER NOT NULL,
    numero_lancer_dans_tour INTEGER NOT NULL
  );

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

-- un roulement de 1 dé dans un lancer de 6 dés
CREATE TABLE
  de_lance (
    PRIMARY KEY (roulement_de_de, rang_couleur_valeur, idlancer),
    roulement_de_de INTEGER NOT NULL AUTO_INCREMENT,
    idlancer INTEGER NOT NULL,
    rang_couleur_valeur VARCHAR(42) NOT NULL
  );

-- un lancer de 6 dés
CREATE TABLE
  effectue (
    PRIMARY KEY (idlancer),
    idjoueur INTEGER NOT NULL,
    idlancer INTEGER NOT NULL AUTO_INCREMENT
  );

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

CREATE TABLE
  classement_equipe (
    PRIMARY KEY (idclassement, idequipe),
    idclassement INTEGER AUTO_INCREMENT,
    idequipe INTEGER NOT NULL,
    rang INTEGER DEFAULT NULL
  );

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

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

CREATE TABLE
  est_contrainte (
    PRIMARY KEY (idcarte, idcontrainte),
    idcarte INTEGER NOT NULL,
    idcontrainte INTEGER NOT NULL
  );

CREATE TABLE
  est_en_lien (
    PRIMARY KEY (idclassement_1, idclassement_2),
    idclassement_1 INTEGER NOT NULL,
    idclassement_2 INTEGER NOT NULL,
    rang VARCHAR(42)
  );

CREATE TABLE
  est_en_position (
    PRIMARY KEY (idjoueur, idpartie, num_tour),
    idjoueur INTEGER NOT NULL,
    idpartie INTEGER NOT NULL,
    num_tour INTEGER NOT NULL,
    position VARCHAR(42)
  );

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

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

CREATE TABLE
  joue (
    PRIMARY KEY (idjoueur, idpartie),
    idjoueur INTEGER NOT NULL,
    idpartie INTEGER NOT NULL,
    couleur_pion MEDIUMINT UNSIGNED,
    rang 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
  meme_au_choix (
    PRIMARY KEY (idcontrainte),
    idcontrainte INTEGER NOT NULL,
    nombre VARCHAR(42),
    couleur VARCHAR(42)
  );

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

CREATE TABLE
  partie (
    PRIMARY KEY (idpartie),
    idpartie INTEGER NOT NULL AUTO_INCREMENT,
    date_partie DATE,
    horaire TIME,
    duree VARCHAR(42),
    etat VARCHAR(42),
    idplateau INTEGER,
    idtournoi INTEGER,
    niveau VARCHAR(42),
    UNIQUE (idtournoi, niveau)
  );

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

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

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

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

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

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

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

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

CREATE TABLE
  valide (
    PRIMARY KEY (idcontrainte, idlancer),
    idcontrainte INTEGER NOT NULL,
    idlancer INTEGER NOT NULL
  );

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

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

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

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

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

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

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 est_classe ADD FOREIGN KEY (idclassement) REFERENCES classement_individuel (idclassement);

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

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

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

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

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

ALTER TABLE est_en_lien ADD FOREIGN KEY (idclassement_2) REFERENCES classement (idclassement);

ALTER TABLE est_en_lien ADD FOREIGN KEY (idclassement_1) REFERENCES classement (idclassement);

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

ALTER TABLE est_en_position 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 face_de_de ADD FOREIGN KEY (idcontrainte) REFERENCES contrainte (idcontrainte);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

COMMIT;