par
jeanBap » 17 mars 2010, 02:02
là aussi, j'ai trouvé en cherchant..en gros ma dernière version de table est moche. Je vous la remets.
CREATE TABLE Reportage (
Id INT AUTO_INCREMENT,
Name VARCHAR(25) NOT NULL,
Audit_Current ENUM('Y','N'),
Audit_DateTime DATETIME NOT NULL,
Audit_User VARCHAR(25) NOT NULL,
Audit_Version INT DEFAULT 1,
Audit_Status ENUM('DONE','PUBLISH','DISABLE'),
Audit_Action ENUM ('DO','PUBLISHED', 'SAVE','DISABLED','REJECT'),
PRIMARY KEY(Id, Audit_Current, Audit_Version)) TYPE=INNODB;
CREATE TABLE Reportage_HIST (
Id INT AUTO_INCREMENT,
Name VARCHAR(25) NOT NULL,
Audit_Current ENUM('Y','N'),
Audit_DateTime DATETIME NOT NULL,
Audit_User VARCHAR(25) NOT NULL,
Audit_Version INT DEFAULT 1,
Audit_Status ENUM('DONE','PUBLISH','DISABLE'),
Audit_Action ENUM ('DO','PUBLISHED', 'SAVE','DISABLED','REJECT'),
PRIMARY KEY(Id, Audit_Current, Audit_Version),
INDEX rep_ind (Id, Audit_Current,Audit_Version),
FOREIGN KEY (Id, Audit_Current, Audit_Version)
REFERENCES Reportage(Id, Audit_Current, Audit_Version)
ON UPDATE CASCADE ON DELETE SET NULL
) TYPE=INNODB;
cette partie n'est pas bonne.
FOREIGN KEY (Id, Audit_Current, Audit_Version)
REFERENCES Reportage(Id, Audit_Current, Audit_Version)
ON UPDATE CASCADE ON DELETE SET NULL
cette partie "ON DELETE SET NULL" dit si tu effaces le tuple référencé par la clef primaire dans Reportage alors mets la valeur NULL dans la clef étrangere de Reportage_HIST.
Or ma clef étrangère n'a pas de valeur par défault à NULL (par définition des champs de ma table).... Il faudrait que je mette
Id INT AUTO INCREMENT DEFAULT NULL,
Audit_Current VARCAHR(1) DEFAULT NULL,
AUdit_Version INT DEFAULT NULL.
Il me semble que cela n'est tout bonnement pas possible!!!!
J'ai donc changé ma clef étrangère en mettant
...
Reportage_Id INT(11) DEFAULT NULL,
....
FOREIGN KEY (Reportage_Id)
REFERENCES Reportage(Id)
ON UPDATE CASCADE ON DELETE SET NULL
Ainsi, je peux créer des reportage via des inserts. (Je suis tout de même obligé de faire des insertions dans Reportage_HIST.)
Je peux également mettre à jour les reportages tjs via Insert+delete et non par update, (je sais que je m'embête, mais le but est d'avoir des tables auditables et que chaque version des reportages restent en base... et de cette manière, l'utilisateur peut faire des aller-retour au niveau des versions...
Voili, voilou, si je n'ai pas été super clair (il est tard) n'hésitez pas à me demander des précisions...
là aussi, j'ai trouvé en cherchant..en gros ma dernière version de table est moche. Je vous la remets.
[sql]
CREATE TABLE Reportage (
Id INT AUTO_INCREMENT,
Name VARCHAR(25) NOT NULL,
Audit_Current ENUM('Y','N'),
Audit_DateTime DATETIME NOT NULL,
Audit_User VARCHAR(25) NOT NULL,
Audit_Version INT DEFAULT 1,
Audit_Status ENUM('DONE','PUBLISH','DISABLE'),
Audit_Action ENUM ('DO','PUBLISHED', 'SAVE','DISABLED','REJECT'),
PRIMARY KEY(Id, Audit_Current, Audit_Version)) TYPE=INNODB;
CREATE TABLE Reportage_HIST (
Id INT AUTO_INCREMENT,
Name VARCHAR(25) NOT NULL,
Audit_Current ENUM('Y','N'),
Audit_DateTime DATETIME NOT NULL,
Audit_User VARCHAR(25) NOT NULL,
Audit_Version INT DEFAULT 1,
Audit_Status ENUM('DONE','PUBLISH','DISABLE'),
Audit_Action ENUM ('DO','PUBLISHED', 'SAVE','DISABLED','REJECT'),
PRIMARY KEY(Id, Audit_Current, Audit_Version),
INDEX rep_ind (Id, Audit_Current,Audit_Version),
FOREIGN KEY (Id, Audit_Current, Audit_Version)
REFERENCES Reportage(Id, Audit_Current, Audit_Version)
ON UPDATE CASCADE ON DELETE SET NULL
) TYPE=INNODB;
[/sql]
cette partie n'est pas bonne.
[sql]
FOREIGN KEY (Id, Audit_Current, Audit_Version)
REFERENCES Reportage(Id, Audit_Current, Audit_Version)
ON UPDATE CASCADE ON DELETE SET NULL
[/sql]
cette partie "ON DELETE SET NULL" dit si tu effaces le tuple référencé par la clef primaire dans Reportage alors mets la valeur NULL dans la clef étrangere de Reportage_HIST.
Or ma clef étrangère n'a pas de valeur par défault à NULL (par définition des champs de ma table).... Il faudrait que je mette
Id INT AUTO INCREMENT DEFAULT NULL,
Audit_Current VARCAHR(1) DEFAULT NULL,
AUdit_Version INT DEFAULT NULL.
Il me semble que cela n'est tout bonnement pas possible!!!!
J'ai donc changé ma clef étrangère en mettant
[sql]
...
Reportage_Id INT(11) DEFAULT NULL,
....
FOREIGN KEY (Reportage_Id)
REFERENCES Reportage(Id)
ON UPDATE CASCADE ON DELETE SET NULL
[/sql]
Ainsi, je peux créer des reportage via des inserts. (Je suis tout de même obligé de faire des insertions dans Reportage_HIST.)
Je peux également mettre à jour les reportages tjs via Insert+delete et non par update, (je sais que je m'embête, mais le but est d'avoir des tables auditables et que chaque version des reportages restent en base... et de cette manière, l'utilisateur peut faire des aller-retour au niveau des versions...
Voili, voilou, si je n'ai pas été super clair (il est tard) n'hésitez pas à me demander des précisions...