1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| /* Administrateurs */
CREATE TABLE Admin (
Admin_Id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Admin_Nom TEXT NOT NULL,
PRIMARY KEY(Admin_Id)
);
/* Clients */
CREATE TABLE Client (
Cli_Id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Cli_Nom TEXT NOT NULL,
PRIMARY KEY(Cli_Id)
);
/* Table des mails envoyés par les admin aux clients */
/* Le séquenceur est relatif au couple {Admin, Client}. Il permet d'éviter les doublons */
CREATE TABLE AdminMail (
Admin_Id INTEGER UNSIGNED NOT NULL,
Cli_Id INTEGER UNSIGNED NOT NULL,
Sequenceur INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Date_Envoi DATE NOT NULL,
Sujet TEXT NOT NULL,
Commentaire TEXT NOT NULL,
PRIMARY KEY(Admin_Id, Cli_Id, Sequenceur),
FOREIGN KEY(Admin_Id)
REFERENCES Admin(Admin_Id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
/* Types de mails */
CREATE TABLE Type_Mail (
Type_Mail_Id TEXT NOT NULL AUTO_INCREMENT,
Type_Mail_Libelle TEXT NOT NULL,
PRIMARY KEY(Type_Mail_Id)
);
/* Type de mail d'un mail d'un admin, seulement si mail typé */
/* Pour éviter les valeurs nulles (on peut aussi utiliser une valeur par défaut) */
CREATE TABLE Admin_Mail_Type_Mail (
Cli_Id INTEGER UNSIGNED NOT NULL,
Admin_Id INTEGER UNSIGNED NOT NULL,
Sequenceur INTEGER UNSIGNED NOT NULL,
Type_Mail_Id TEXT NOT NULL,
PRIMARY KEY(Cli_Id, Admin_Id, Sequenceur),
FOREIGN KEY(Admin_Id, Cli_Id, Sequenceur)
REFERENCES AdminMail(Admin_Id, Cli_Id, Sequenceur)
ON DELETE CASCADE
ON UPDATE CASCADE
);
/* Mails reçus des clients */
/* Comme pour Outlook, il n'est pas nécessaire de mettre dans le même sac les mails reçus et les mails envoyés */
/* en cas de besoin, une bonne union entre les mails admin et les mails clients, et puis voilà (l'algèbre realtionnelle, ça sert) */
CREATE TABLE ClientMail (
Cli_Id INTEGER UNSIGNED NOT NULL,
Sequenceur INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
Date_Envoi DATE NOT NULL,
Sujet TEXT NOT NULL,
Commentaire TEXT NOT NULL,
PRIMARY KEY(Cli_Id, Sequenceur),
FOREIGN KEY(Cli_Id)
REFERENCES Client(Cli_Id)
ON DELETE CASCADE
ON UPDATE CASCADE
); |
Partager