Probleme de contrainte d unicité

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme de contrainte d unicité

par Xavioche » 16 avr. 2010, 11:53

ok je m explique surement très mal..

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.

Re: Probleme de contrainte d unicité

par Yosh » 16 avr. 2010, 11:26

Le cas de l'emprunte md5 est une bonne solution je pense, si c'est un fichier tu peux utiliser sha1_file

http://fr2.php.net/manual/fr/function.sha1-file.php

Re: Probleme de contrainte d unicité

par macgawel » 16 avr. 2010, 11:20

Et la table est structurée comment ?

- S'il s'agit d'un "tas de résultats", ru peux peut-être les stocker dans plusieurs champs.

- Un moyen de contourner le problème : tu rajoutes un champ à ta table, dans lequel tu stockes une somme ce contrôle du "tas de résultats" (via MD5, par exemple).
Les chances pour que deux chaines différentes aient le même checksum sont suffisament faibles pour être négligées. Donc, une contrainte d'unicité dessus te permettra de régler le problème. Au pire, si tu n'as vraiment pas de chance, tu perdras un résultat différent du premier (s'il a le même MD5, ce qui est relativement improbable)

Re: Probleme de contrainte d unicité

par Xavioche » 16 avr. 2010, 11:01

En fait, j'ai un logiciel auquel on donne en entrée une séquence d ADN et qui renvoi un tas de résultat .
Ce qui se passe c est que si dans le futur on améliore le logiciel il trouvera des résultats possiblement différents.

une séquence >>> tas de résultats ( 1)

la meme séquence plus tard>>>> tas de résultats (2) qui peut etre différents

Je veux donc stocker la séquence qu'une seule fois.
Et rajouter, le tas de résultats 2 seulement si il est différent du tas 1


C un peu compliqué a expliquer je dois avouer ..

Re: K7X9

par @rthur » 16 avr. 2010, 10:54

Par curiosité :

- Ca veut dire quoi, K7X9 ? Pas trouvé plus obscur, comme titre ?
Pour info, j'ai modifié le titre du topic et supprimé le sujet en doublon

Re: K7X9

par macgawel » 16 avr. 2010, 10:51

Par curiosité :

- Ca veut dire quoi, K7X9 ? Pas trouvé plus obscur, comme titre ?
- Quelle est la structure de la table ? En quoi est-il obligatoire de rendre ton champ unique ?
J'avoue qu'une contrainte d'unicité sur un champ Blob, j'ai du mal à comprendre l'intérêt... Accessoirement, ça a l'air infaisable au niveau de la base, techniquement parlant.

Re: K7X9

par Yosh » 16 avr. 2010, 10:48

C'est quoi le but???

Doit y avoir un petit soucis de conception là, non?

Rendre un text de 10000 caractères UNIQUE, c'est vraiment moyen je trouve...

Probleme de contrainte d unicité

par xavioche » 16 avr. 2010, 10:33

Bonjour,

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 ..

Si quelqu'un a une idée, je suis preneur..

Merci d'avoir lu :p