Probleme de contraintes ( ou de raisonnement)

xavier -  
blux Messages postés 27147 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, je suis en stage et je fais des base de données. J'ai un petit probleme.
Je pense que rendre un champ de type TEXT unique le résoudrai.
Mais ca ne marche pas.

Je cherche à rendre UNIQUE un champs de type TEXT.
En fait, je dois créer un champs pouvant faire au moins 10 000 caractères. Et ca me pose des problèmes lors de la mise en place des contraintes d'unicité.
J'utilise easyphp.


La commande:
ALTER TABLE 'sequencearn' ADD 'Sequence' TEXT UNIQUE

Le message d'erreur:
#1170 - La colonne 'Sequence' de type BLOB est utilisée dans une définition d'index sans longueur d'index

Après quelques recherches sur internet , j'ai essayé d'autre solution :
ALTER TABLE 'sequencearn' ADD 'Sequence' TEXT UNIQUE (
Sequence( 10000 )
)

Mais là, méchante erreur de syntaxe. Sur le site, il dise qu'il faut donner la taille sur laquelle l index va porter .


J'ai aussi essayé de changer le type en mettant un VARCHAR de taille 10 000.
mais en essayant de le rendre unique ca ne marche pas non plus.

ALTER TABLE 'sequencearn' ADD UNIQUE (
'Sequence'
)
#1071 - La clé est trop longue. Longueur maximale: 767

Comme il faut absolument que je m'assure que ce champs est unique, je sais pas comment faire.
J'ai pas envie de faire ca par un script. Ca va être un peu compliqué et long en temps ..



Je vous explique ce que je veux faire exactement.
Peut etre que je prend le probleme dans le mauvais sens et qu'une contrainte d'unicité ne m'aidera pas.

J'ai deux tables : Sequence et Resultats

Séquence(id_seq,taille,type,sequence); // le champs séquence est de type text il doit pouvoir contenir 10 000 caractere

Resultat(id,longueur,position ect plein de résultat) //dedans il y a la clé étrangere id_seq



Je parse un fichier, je récupère dedans le champ séquence de Séquence et les résultats de la table résultat qui sont associés à cette séquence. Donc pour une séquence précise j'ai un ensemble de résultats .
Ca marche tres bien.

Ceci étant dit, le logiciel qui sort ces résultats est appelé a évolué. Il peut donc arriver que je relance un parsing de fichier.
Si ce fichier contient la meme séquence qu'une deja entré dans la base, je stocke les résultats que si il sont différents de ceux deja present dans la base ( cette fonction sera implémenté en php)

Mon probleme est que actuellement, dans ma base de données, si je parse un fichier et que je récupere une séquence et que cette séquence est deja présente dans la base, son id ne sera pas le même. Il sera en effet incrémenté automatiquement .
Pour tester cela, j'ai modifier moi meme mon fichier a parser. J'ai mis une séquence que je savais dans la base. Et la, dans la base ces deux séquences n ont pas le même id.

Il faut que en parsant le fichier, si la séquence que je récupere est deja présente dans la base, son id soit le même.

D'ou mon idée de rendre le champ séquence unique. Comme ca, la base ne peut pas stocké deux séquence identiques.

Si quelqu'un peut m'aider, je suis preneur.
Merci d'avoir lu jusque ici....

1 réponse

blux Messages postés 27147 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Salut,

tu pourrais imaginer calculer un sha de ton champ et le stocker en tant avec une index unique.
0