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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  conception base de donnees +erreur (errno: 121)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conception base de donnees +erreur (errno: 121)

n°1501805
krifur
Posté le 11-01-2007 à 16:44:04  profilanswer
 

Salut a tous,  
 
suite des pb lies a ce  fil http://forum.hardware.fr/hfr/Progr [...] 1501641...
Je fait un ptit resumé, maintenant que tout marche a peu pres mais je doute en fait sur la conception de base:
 
Je veut faire une base de donnees de d'images, qui peuvent etre classifiable via un menue categorie et dont le nom peut etre soit en espagnol soit en francais:
 
J ai creer mes bases comme suit:
 

Citation :

CREATE TABLE `categories` (
  `index_cat` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `nom` VARCHAR(12) NOT NULL,
  PRIMARY KEY (`index_cat`)
)
TYPE = innodb
COMMENT = 'la table categories';
 
 
CREATE TABLE `images` (
  index_images MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,  
  format VARCHAR(12),  
  teinte VARCHAR(12) NOT NULL,  
  index_cat SMALLINT UNSIGNED,
  INDEX idx(index_cat),
  PRIMARY KEY (index_images),
  CONSTRAINT fk_index_cat FOREIGN KEY (index_cat) REFERENCES categories (index_cat) ON DELETE CASCADE
)
TYPE = innodb
COMMENT = 'la table images';
 
CREATE TABLE `tag_es` (
 
  index_es MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  tags_es VARCHAR(32) NOT NULL,  
  index_images MEDIUMINT UNSIGNED,
  INDEX idx(index_images),
  PRIMARY KEY (index_es),
  CONSTRAINT fk_index_images FOREIGN KEY (index_images) REFERENCES images (index_images) ON DELETE CASCADE
)
TYPE = innodb
COMMENT = 'la table espagnole';
 
 
CREATE TABLE `tag_fr` (
 
  index_fr MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  tags_fr VARCHAR(32) NOT NULL,  
  index_images MEDIUMINT UNSIGNED,
  INDEX idx(index_images),
  PRIMARY KEY (index_fr),
  CONSTRAINT fk_index_images FOREIGN KEY (index_images) REFERENCES images (index_images) ON DELETE CASCADE
)
TYPE = innodb
COMMENT = 'la table francaise';


 
Le pb est que mysql refuse de creer 2 tables qui ont une meme cle etrangere!?enfin d apres ce que j ai compris:

Citation :

ERROR 1005: Can't create table './ma_base/tag_fr.frm' (errno: 121)


 
du coup je me demande si c est pas au niveau conception que j ai foirer le truc :??: (faut dire que c est pas mon fort :o )
 
merci de l'aide


Message édité par krifur le 11-01-2007 à 19:31:29
mood
Publicité
Posté le 11-01-2007 à 16:44:04  profilanswer
 

n°1501880
krifur
Posté le 11-01-2007 à 19:53:17  profilanswer
 

je fait un mpd ca parle mieux ptet :D

 

categories: (index_cat,nom)

 

image: (index_images, format ,teinte,#index_cat)

 

tag_fr: (index_fr,tags_fr,#index_images)

 

tag_es: (index_es,tags_es,#index_images)

 

c 'est valable comme schema ?
L idee c est de separe les champs lies aux langues pour ne pas utiliser des tables inutiles en fonction du choix de l internaute(site multi-langues)


Message édité par krifur le 11-01-2007 à 19:59:45
n°1501925
krifur
Posté le 12-01-2007 à 00:09:02  profilanswer
 

bon pb resolut pour le ERROR 1005: Can't create table './ma_base/tag_fr.frm' (errno: 121)
 
en fait c est parce que je nommer la clé etrangere identiquement dans les 2 tables filles(index_images), j en ai renommer une et ca marche maintenant...
Je laisse le post au cas ou quelqu'un est quelquechose a dire sur la conception.
++

n°1502028
tg94
Posté le 12-01-2007 à 12:31:11  profilanswer
 

moi je trouve la conception des tables langues bizarre.
 
ça t'oblige à faire des requêtes dynamiques en fonction de la langue choisit alors que tu pourrais tout faire en SQL.
Si tu as beaucoup de tags ça pourrait influer sur les perfs.
 
moi je ferais
 
tags(index, langue, tag,#index_images) avec (index,langue) comme clé primaire


Message édité par tg94 le 12-01-2007 à 12:31:44
n°1502105
krifur
Posté le 12-01-2007 à 14:29:59  profilanswer
 

Salut, tu peut detailler un peu plus stp :D ?
 

Citation :

ça t'oblige à faire des requêtes dynamiques en fonction de la langue choisit alors que tu pourrais tout faire en SQL.


Ca je comprends pas trop...
La facon dont je voit mon site c est qu'une fois que l'internaute a choisit sa langue il n y a plus qu une table a chargé ce qui allége la complexité des requetes?

Citation :


 
moi je ferais
 
tags(index, langue, tag,#index_images) avec (index,langue) comme clé primaire


donc ca donnerait:
 
 
categories: (index_cat,nom)
image: (index_images, format ,teinte,#index_cat)  
tags(index, langue, tag, #index_images)  
 
mais la touts les tags sont dans une seule et meme table alors que y en a la moitie qui sert a rien ...
 :hello:  

n°1502505
tg94
Posté le 13-01-2007 à 12:35:26  profilanswer
 

krifur a écrit :

Salut, tu peut detailler un peu plus stp :D ?
 

Citation :

ça t'oblige à faire des requêtes dynamiques en fonction de la langue choisit alors que tu pourrais tout faire en SQL.


Ca je comprends pas trop...
La facon dont je voit mon site c est qu'une fois que l'internaute a choisit sa langue il n y a plus qu une table a chargé ce qui allége la complexité des requetes?

Citation :


 
moi je ferais
 
tags(index, langue, tag,#index_images) avec (index,langue) comme clé primaire


donc ca donnerait:
 
 
categories: (index_cat,nom)
image: (index_images, format ,teinte,#index_cat)  
tags(index, langue, tag, #index_images)  
 
mais la touts les tags sont dans une seule et meme table alors que y en a la moitie qui sert a rien ...
 :hello:


 
 
Si tu mets plusieurs tables pour plusieurs langues, il y aura forcément un endroit dans ton code où tu diras "si la langue sélectionnée est X, alors dans la requête faut mettre from tag_X"
-> tu passes par le PHP alors que tout pourrait être fait en SQL.
 
 
D'autres part, même si les 3/4 des tags sont pas utilisés, je ne vois pas le pb de les mettre dans une même table. Un SGBD, même MySQL sait gérer des millions de lignes, c'est pas 20 tags pour l'espagnol qui va ralentir qqch et ça fera un modèle de données plus propre.

n°1502617
krifur
Posté le 13-01-2007 à 21:01:44  profilanswer
 

ok; merci tg94 je vais essayer avec ton modele c est vrai que pour un pti site ca devrait aller, sinon j aimerai savoir comment inserer une requete dans les 2 tables, images et tag en "cascade" pour les effacer ok ca marche mais a la creation, comment faire un insert qui lie les 2 tables sans faire 2 requetes?
c est possible?

 

ps:j edite le titre
edit , ah beh non ca a pas l air possible :D

 

merci


Message édité par krifur le 13-01-2007 à 21:02:59
n°1502704
tg94
Posté le 14-01-2007 à 12:47:38  profilanswer
 

euh... en fait j'ai pas compris la ou les questions.

n°1502911
krifur
Posté le 15-01-2007 à 01:06:00  profilanswer
 

ok je la refait alors,
 
Grace a la cle etrangere creer avec cette manip:

Citation :

CONSTRAINT fk_index_images FOREIGN KEY (index_images) REFERENCES images (index_images) ON DELETE CASCADE  


 
il me suffit de faire  

Citation :

delete from images where index_images='23';  

pour virer une image de la table images et de la table tag
 
mais je voudrais savoir si une requete existe pour ajouter 2 entrees simultanement dans ces tables?
 
genre insert into images  ('','','','') et automatiquement que le champ tags de la table tag soit inscrit avec le numero index_images associes via la  cle etrangere...
 
voila , quelquechose qui permet de "on create cascade"...
 
 
 
 

n°1502962
tg94
Posté le 15-01-2007 à 10:09:01  profilanswer
 

tu peux le faire avec un trigger on insert sur la table images.
 
mais je ne suis pas sûr que MySQL puisse le faire.

mood
Publicité
Posté le 15-01-2007 à 10:09:01  profilanswer
 

n°1502981
krifur
Posté le 15-01-2007 à 10:49:34  profilanswer
 

http://dev.mysql.com/doc/refman/5. [...] igger.html
 
Le pb c est que j ai qu'une version 4.0 (ca va peut etre changer si etch passe en stable)
 
Ok donc je laisse la double insertion simultanee de cote, du coup pour remplir mes bases je fait un:
 
insert into images values ('','','','');
$plop = mysql_insert_id();
suivit d un insert into tags ('','','','". $plop ."');
 
y a pas mieux comme syntax?
merci pour tes reponses :hello:

n°1502990
tg94
Posté le 15-01-2007 à 11:00:14  profilanswer
 

je ne pense pas qu'il y ait mieux, en tout cas j'aurais fait qqch dans le même style.
 
Bon courage.

n°1503009
krifur
Posté le 15-01-2007 à 11:54:24  profilanswer
 

merci a toi   :jap:


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

  conception base de donnees +erreur (errno: 121)

 

Sujets relatifs
Erreur de hauteur : input dans divRester connecté à ma base via du PHP
Connection base de donnéesRequete ne retournant aucune erreur mais pas executée ???!!!!
importer donnée CSV dans base sql[Structure de données]Type PRIVATE et ACCESS
Convertir un .mdf vers base Oracle 10gORDER BY count(*) pour deux bases de données ensemble
Erreur d'exécution '6' : dépassement de capacité 
Plus de sujets relatifs à : conception base de donnees +erreur (errno: 121)


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