Bonjour,
J'ai le système suivant :
une table rubrique (PK : rub_id qui a déja une foreign key sur une table catégorie) qui est reliée à des fiches rubriques annuelles (PK:rub_id, frub_annee) et j'ai des sous-rubrique qui sont reliées aux fiches rubriques (PK : srub_id ).
Je voudrais créer des clés étrangères entre ces tables mais je n'y arrive pas, ni avec phpmyadmin ni avec des commandes alter table. Sous phpmyadmin il me dit aucune clé définie et avec la commande alter table il me dit qu'il n'arrive pas à créer le fichier FRM correspondant.
Je vous donne le code des différentes tables. Si quelqu'un a une idée de l'origine du blocage cela m'aiderai beaucoup.
Merci d'avance.

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE TABLE `rubrique` (
  `rub_id` tinyint(3) unsigned NOT NULL auto_increment,
  `cat_id` tinyint(3) unsigned NOT NULL default '0',
  `rub_titre` varchar(80) NOT NULL default '',
  `rub_ordre` tinyint(3) unsigned NOT NULL default '1',
  `rub_publie` enum('OUI','NON') NOT NULL default 'NON',
  PRIMARY KEY  (`rub_id`),
  KEY `rub_ordre` (`rub_ordre`),
  KEY `cat_id` (`cat_id`),
  KEY `rub_publie` (`rub_publie`)
) TYPE=InnoDB;
 
ALTER TABLE `rubrique`
  ADD CONSTRAINT `rubrique_ibfk_1` FOREIGN KEY (`cat_id`) REFERENCES `categorie` (`cat_id`) ON UPDATE CASCADE;
 
 
CREATE TABLE `fiche_rubrique` (
  `rub_id` tinyint(4) NOT NULL default '0',
  `frub_annee` smallint(6) NOT NULL default '0',
  `frub_texte` text NOT NULL,
  `frub_visuel` varchar(60) default NULL,
  `frub_copyright` varchar(50) default NULL,
  `frub_legende` varchar(40) default NULL,
  `frub_publie` enum('OUI','NON') NOT NULL default 'NON',
  PRIMARY KEY  (`rub_id`,`frub_annee`),
  KEY `frub_publie` (`frub_publie`)
) TYPE=InnoDB;
 
CREATE TABLE `sous_rubrique` (
  `srub_id` tinyint(3) unsigned NOT NULL auto_increment,
  `rub_id` tinyint(3) unsigned NOT NULL default '0',
  `rub_annee` smallint(6) NOT NULL default '0',
  `srub_titre` varchar(100) NOT NULL default '',
  `srub_sous_titre` varchar(60) default NULL,
  `srub_texte` text NOT NULL,
  `srub_visuel` varchar(50) default NULL,
  `srub_copyright` varchar(60) default NULL,
  `srub_legende` varchar(60) default NULL,
  `srub_ordre` tinyint(4) NOT NULL default '0',
  `srub_publie` enum('OUI','NON') NOT NULL default 'NON',
  PRIMARY KEY  (`srub_id`),
  KEY `srub_ordre` (`srub_ordre`),
  KEY `srub_publie` (`srub_publie`),
  KEY `rub_id` (`rub_id`,`rub_annee`)
) TYPE=InnoDB;