Aller au contenu

problème de foreignkey sur mysql (innodb)


blaise

Messages recommandés

bonjour et merci de bien vouloir prendre le temps de m'aider un instant.

en bref voici mon problème:

disons que j'ai deux tables innodb

une avec les lots

une avec les vente

mon obliguation: 0 OU 1 vente (max) par lot.

voici un bref détaillé de mes deux tables.

moi ce que j'aimerais, c'est que si il y a une vente lo_ve_FK soit différent de 0. si la vente n'a pas eu lieu, il référencie directement la bonne clé dans les ventes.

mais dans la configuration actuelle, je n'ai pas le droit d'avoir la clé étrangère à 0. elle doit obliguatoirement référence une vente.

j'ai ce problème qui se répercute à pls reprise dans mes relations.

et je dois absolument résoudre ce problème avant de programmer la suite de mon application.

c'est sans aucun doute un problème de conception auquel je ne pense pas...

CREATE TABLE `lot` (

`lo_id` bigint(20) unsigned NOT NULL auto_increment,

`lo_ve_FK` int(11) unsigned default '0',

PRIMARY KEY (`lo_id`),

KEY `lo_ve_FK` (`lo_ve_FK`),

CONSTRAINT `lot_ibfk_2` FOREIGN KEY (`lo_ve_FK`) REFERENCES `vente` (`ve_id`),

) ENGINE=InnoDB DEFAULT CHARSET=ascii

CREATE TABLE `vente` (

`ve_id` int(11) unsigned NOT NULL auto_increment,

`ve_dateacte` date default '0000-00-00',

PRIMARY KEY (`ve_id`),

) ENGINE=InnoDB DEFAULT CHARSET=ascii

j'espère avoir été assez précis, merci encore de votre attention et j'espère que vous aurez une réponse à me fournir.

Lien vers le commentaire
Partager sur d’autres sites

moi ce que j'aimerais, c'est que si il y a une vente lo_ve_FK soit différent de 0. si la vente n'a pas eu lieu, il référencie directement la bonne clé dans les ventes.

Tu as une table Vente qui contient des tuples sur des ventes qui n'ont pas eu lieu ? ou alors j'ai rien compris...

Lien vers le commentaire
Partager sur d’autres sites

wé le pb c que je m'y prenais mal

c les ventes qui doivent référencé les lots et pas l'inverse.

tous mes problème sont résolu, intégrité nikel.

trois jours que je réfléchissais à ce problème

et ct pire qu'une idiotie, ct de la pure connerie de ma part.

un prof m'a rappelé la notion de maitre esclave aujourd'hui,

j'ai refléchis deux minutes et la solution était claire :)

merci qd même pour l'aide

à titre informatif, après transform çà donne ± çà...

CREATE TABLE `lot` (

`lo_id` bigint(20) unsigned NOT NULL auto_increment,

`lo_li_FK` int(10) unsigned NOT NULL default '0',

PRIMARY KEY (`lo_id`),

KEY `lo_li_FK` (`lo_li_FK`),

CONSTRAINT `lot_ibfk_1` FOREIGN KEY (`lo_li_FK`) REFERENCES `lieu` (`li_id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=ascii

CREATE TABLE `vente` (

`ve_id` bigint(20) unsigned NOT NULL auto_increment,

`ve_lo_FK` bigint(20) unsigned NOT NULL default '0',

`ve_vend_FK` tinyint(4) unsigned NOT NULL default '0',

`ve_op_datefin` date default '0000-00-00',

`ve_dateacte` date default '0000-00-00',

PRIMARY KEY (`ve_id`),

KEY `ve_lo_FK` (`ve_lo_FK`),

KEY `ve_vend_FK` (`ve_vend_FK`),

CONSTRAINT `vente_ibfk_7` FOREIGN KEY (`ve_lo_FK`) REFERENCES `lot` (`lo_id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `vente_ibfk_8` FOREIGN KEY (`ve_vend_FK`) REFERENCES `vendeur` (`vend_id`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii

Lien vers le commentaire
Partager sur d’autres sites

lephasme, effectivement je m'étais mal fait comprendre. déso.

la phrase correct aurait été

moi ce que j'aimerais, c'est que si il y a une vente lo_ve_FK soit différent de 0(réf dans l'autre table). et si la vente n'a pas eu lieu, lo_ve_FK vale 0.

mais bon, le pb n'étais pas là comme su dis :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...