Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
894 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MySQL création de BDD : clés primaires/étrangères types ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MySQL création de BDD : clés primaires/étrangères types ...

n°1985951
tony-974
Humble motard, c'est rare
Posté le 20-04-2010 à 15:08:20  profilanswer
 

Bonjour,
 
Si un initié à 2 minutes devant lui, je pense que répondre à mon (mes) problème(s) ne sera pas long. Merci d'avance de votre aide.
 
Voici une partie de la base de données que je souhaite créer (en test) :
 
MAGASIN ( magasin_id , magasin_name , magasin_city )  
BONBON ( bonbon_type , bonbon_libele , bonbon_price , ?magasin_id )  
PRIX ( magasin_id #,  bonbon_type # , prix )
 
Donc, pour un magasin et un type de bonbon il n'y a qu'un prix.
J'essaye de créer ses tables avec mysql mais "il" refuse de faire la clé étrangère avec magasin_id (int ou smallint ne fonctionne pas , ni même varchar(45)) dans la table PRIX.
En revanche pour bonbon_type (varchar(4)) il n'y a pas de soucis.
 
Question 1 : Est-ce que le problème vient du type de magasin_id ?
Question 1.1 : Si oui, quel type dois-je utiliser ? (Edit, "un entier" : Merci Fred999)
Question 1.2 : Sinon, d'où provient le problème ?
Question 1.3 : D'une manière général pour un identifiant ou un numéro de séquence, quel(s) type(s) utiliser ? (Edit : Merci Fred999)
 
Question 2 : Quel type dois-je utiliser pour du monétaire ? (On m'avait dit d'éviter le float...il fût un temps) (Edit : Merci Fred999)


Message édité par tony-974 le 20-04-2010 à 16:09:08

---------------
¤ JOE BAR TEAM ¤
mood
Publicité
Posté le 20-04-2010 à 15:08:20  profilanswer
 

n°1985964
Fred999
Rabat-joie
Posté le 20-04-2010 à 15:30:01  profilanswer
 

Re
 
Merci de poster le script complet pour les trois tables (en SQL), ce sera plus clair...
 
Quand tu dis "il refuse", c'est quoi le message d'erreur ?
 
Pour la 1.3, il faut utiliser un entier, après à toi de voir de quelle taille, selon le nombre d'enregistrements : cf. http://dev.mysql.com/doc/refman/5. [...] types.html
 
D'après ce lien, il vaut mieux utiliser du decimal pour une valeur monétaire.

n°1985973
tony-974
Humble motard, c'est rare
Posté le 20-04-2010 à 16:03:42  profilanswer
 

Edit : bas du post
 
Re,
 
Merci.
 
Ok pour les identifiants.
Ok pour le Décimal=Monétaire.
 
Voici ce que j'entre (via MySQL en graphique) :
 

Spoiler :


CREATE SCHEMA IF NOT EXISTS `test` ;
 
CREATE  TABLE IF NOT EXISTS `test`.`MAGASIN` (
 
  `magasin_id` INT NOT NULL ,
 
  `magasin_name` VARCHAR(45) NULL ,
 
  `magasin_city` VARCHAR(45) NULL ,
 
  PRIMARY KEY (`magasin_id`) ,
 
  INDEX `index2` (`magasin_id` ASC) );
 
CREATE  TABLE IF NOT EXISTS `test`.`BONBON` (
 
  `bonbon_type` VARCHAR(4) NOT NULL ,
 
  `bonbon_libele` VARCHAR(45) NULL ,
 
  PRIMARY KEY (`bonbon_type`) ,
 
  INDEX `index2` (`bonbon_type` ASC) );
 
CREATE  TABLE IF NOT EXISTS `test`.`PRIX` (
 
  `magasin_id` INT NOT NULL ,
 
  `bonbon_type` VARCHAR(4) NOT NULL ,
 
  `prix` DECIMAL(2) NULL ,
 
  PRIMARY KEY (`magasin_id`, `bonbon_type`) ,
 
  INDEX `fk_bonbon` (`bonbon_type` ASC) ,
 
  INDEX `fk_magasin` () ,
 
  CONSTRAINT `fk_bonbon`
 
    FOREIGN KEY (`bonbon_type` )
 
    REFERENCES `test`.`bonbon` (`bonbon_type` )
 
    ON DELETE NO ACTION
 
    ON UPDATE NO ACTION,
 
  CONSTRAINT `fk_magasin`
 
    FOREIGN KEY (`magasin_id` )
 
    REFERENCES `test`.`magasin` (`magasin_id` )
 
    ON DELETE NO ACTION
 
    ON UPDATE NO ACTION);
[/code]
 
Pour décimal je me suis trompé je crois qu'il faut mettre quelque chose comme (10,2)
 
Et voici le message d'erreur :
 
[code=sql]
ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ,
 
 
 
  CONSTRAINT `fk_bonbon`
 
 
 
    FOREIGN KEY (`bonbon_type` )
 
 
 
    REFERENCES ' at line 13
 
SQL Statement:
 
CREATE  TABLE IF NOT EXISTS `test`.`PRIX` (
 
 
 
  `magasin_id` INT NOT NULL ,
 
 
 
  `bonbon_type` VARCHAR(4) NOT NULL ,
 
 
 
  `prix` DECIMAL(2) NULL ,
 
 
 
  PRIMARY KEY (`magasin_id`, `bonbon_type`) ,
 
 
 
  INDEX `fk_bonbon` (`bonbon_type` ASC) ,
 
 
 
  INDEX `fk_magasin` () ,
 
 
 
  CONSTRAINT `fk_bonbon`
 
 
 
    FOREIGN KEY (`bonbon_type` )
 
 
 
    REFERENCES `test`.`bonbon` (`bonbon_type` )
 
 
 
    ON DELETE NO ACTION
 
 
 
    ON UPDATE NO ACTION,


 
 
 
En fait j'ai entré le fk_magasin à la main car en graphique c'était impossible...
 
Thanks
 
Edit : J'avais un soucis au niveau du fk qui était vide. Ce problème est corrigé depuis. Du moins ça fonctionne à la main mais pas en graphique, le tout c'est que ça fonctionne.


Message édité par tony-974 le 22-04-2010 à 13:23:40

---------------
¤ JOE BAR TEAM ¤
n°1986615
tony-974
Humble motard, c'est rare
Posté le 22-04-2010 à 13:28:18  profilanswer
 

J'ai maintenant un autre problème. Il s'agit sûrement de logique. Question de DF ou de SQL ou ptête bien de MERISE ...
Enfin bref, j'ai essayé de créer une table "enregistrement" ou "commande" ... Dans laquelle je souhaitais avoir un seq_no (int not null auto_increment) PK, date (date), client_no [table CLIENT], magasin_id FK, bonbon_type FK, prix FK ...
Et le problème que je rencontre à ce moment là est que je peux ajouter les 2 premières clés étrangères mais pas la troisième 'prix' (toutes trois de la table PRIX). Le message d'erreur n'est pas explicite, et aucune ligne n'est indiqué. C'est probablement quelque chose qui ne peut pas se faire dans une BD...


---------------
¤ JOE BAR TEAM ¤
n°1986629
Fred999
Rabat-joie
Posté le 22-04-2010 à 13:48:52  profilanswer
 

Une FK doit forcément être PK dans une autre table. Or le champ prix n'est pas clé de la table PRIX.
 
Je pense que tu devrais mettre sur papier toutes les informations nécessaires à ton modèle, ça t'aiderait.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MySQL création de BDD : clés primaires/étrangères types ...

 

Sujets relatifs
Clés primaires/étrangères obligatoires?soucis MYSQL
Configurer Mysql sous UnixCreation Classement PHP par mois
Création d'application autonome en php[BATCH] creation de repertoires par parcours de fichier texte
[PHP/MYSQL] formulaire et modification à distance de fichierCréation d'un outil de visualisation et de recherche PDF
Plus de sujets relatifs à : MySQL création de BDD : clés primaires/étrangères types ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR