DROP TABLE commande;
DROP TABLE produit;

-- creation du cluster
CREATE CLUSTER produit_commande(idProduit INT);

-- creation des tables dans le cluster
CREATE TABLE produit
(
   id INT PRIMARY KEY,
   nom VARCHAR(50) NOT NULL,
   couleur VARCHAR(50) NOT NULL,
   prix FLOAT NOT NULL
) CLUSTER produit_commande(id);

CREATE TABLE commande
(
   id INT PRIMARY KEY,
   jour DATE NOT NULL,
   client INTEGER NOT NULL CONSTRAINT commande_client REFERENCES client,
   produit INTEGER NOT NULL CONSTRAINT commande_produit REFERENCES produit
) CLUSTER produit_commande(produit);

CREATE INDEX idx_cluster_produit_commande ON CLUSTER produit_commande;
CREATE INDEX idx_cluster_couleur ON produit(couleur);

-- remplissage
DROP SEQUENCE seq_produit;
CREATE SEQUENCE seq_produit;

DECLARE
   num INTEGER;
   couleur VARCHAR(50);
BEGIN
FOR i IN 1..13500 LOOP

   num:=dbms_random.value(1,5);

   couleur := (CASE  num   
      WHEN 1 THEN 'rouge'
      WHEN 2 THEN 'vert'
      WHEN 3 THEN 'bleu'
      WHEN 4 THEN 'bleu'
      WHEN 5 THEN 'bleu'
      WHEN 6 THEN 'jaune'
      WHEN 7 THEN 'jaune'
      WHEN 8 THEN 'noir'
      WHEN 9 THEN 'blanc'
   END);

   INSERT INTO 
      produit 
   SELECT
      seq_produit.nextval,
      dbms_random.string('U',dbms_random.value(5,50)),
      couleur,
      dbms_random.value(20,60)*1.347
   FROM
      DUAL;

END LOOP;
END;
/

DROP SEQUENCE seq_commande;
CREATE SEQUENCE seq_commande;

DECLARE
   num INTEGER;
   client INTEGER;
   produit INTEGER;
BEGIN
FOR i IN 1..98000 LOOP

   num:=dbms_random.value(1,500);
   client:=dbms_random.value(1,10000);
   produit:=dbms_random.value(1,13500);

   INSERT INTO 
      commande 
   SELECT
      seq_commande.nextval,
      SYSDATE-num,
      client,
      produit
   FROM
      DUAL;

END LOOP;
END;
/

COMMIT;
