Bonjour à tous,
Je rencontre un problème avec une clé étrangère que j'ai besoin de mettre à null.

J'ai une table "versions" qui contient différentes versions de logiciel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
mysql> desc versions;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| libelle  | varchar(45)      | NO   |     |         |                |
| idProjet | int(11)          | NO   |     |         |                |
+----------+------------------+------+-----+---------+----------------+
Ainis qu'une table "taches" regroupant différentes actions à effectuer sur un logiciel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
mysql> desc taches;
+-------------+----------------------+------+-----+---------+----------------+
| Field       | Type                 | Null | Key | Default | Extra          |
+-------------+----------------------+------+-----+---------+----------------+
| id          | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| idProjet    | int(10) unsigned     | NO   | MUL |         |                |
| idVersion   | int(10) unsigned     | YES  | MUL | NULL    |                |
| idUser      | int(10) unsigned     | NO   | MUL |         |                |
| idClient    | int(10) unsigned     | NO   | MUL |         |                |
| idEtat      | smallint(5) unsigned | NO   | MUL |         |                |
| idSociete   | int(10) unsigned     | NO   |     |         |                |
| titre       | varchar(255)         | NO   |     |         |                |
| demandeur   | varchar(100)         | NO   |     |         |                |
| description | text                 | NO   |     |         |                |
| date_start  | datetime             | NO   |     |         |                |
| date_end    | datetime             | NO   |     |         |                |
| valid_teb   | tinyint(1)           | NO   |     |         |                |
| valid_pry   | tinyint(1)           | NO   |     |         |                |
| text        | text                 | NO   |     |         |                |
+-------------+----------------------+------+-----+---------+----------------+
La clé associée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
ALTER TABLE taches 
ADD CONSTRAINT fk_tache_version 
  FOREIGN KEY(idVersion) 
  REFERENCES versions (id) 
  ON DELETE CASCADE 
  ON UPDATE NO ACTION
Une taches peut ou non être associé à une version de logiciel. J'ai donc défini idVersion comment pouvant être null.
Mais je reçois une erreur de violation de contrainte. Je me dis que c'est normal car mon id dans la table version n'est pas défini comme pouvant être à null. Je modifie donc la crationde la table comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `versions` (
  `id` int(10) unsigned NULL auto_increment,
  `libelle` varchar(45) NOT NULL,
  `idProjet` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
Et à ma grande surprise id n'est toujours pas definissable à null. Surement du à la clé primaire et à l'auto incrément ?

Comment puis je résoudre ce problème ?