Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2007, 15h52   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut chaine trop longue pour être indexée

Bonjour,

J'ai une table composée d'une colonne id AUTO_INCREMENT et une colonne sequence TEXT.

Cette sequence est >= 500 caractères (ADN).

Lorsque je veux créer un index UNIQUE ou mettre sequence en clé primaire (en plus de l'id) j'ai une erreur de longueur de clé.

Sauriez-vous vous comment résoudre ce problème (éventuellement un CHECK) ?

En vous remerciant,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 21h17   #2
Expert Confirmé
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Pour les colonnes BLOB et TEXT la longueur d'index est obligatoire
http://dev.mysql.com/doc/refman/5.0/...ate-index.html
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2007, 11h28   #3
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour et merci de la réponse,

Ca marche parfaitement dans ce contexte, merci !

Mon problème maintenant est que je travaille sur des séquences d'ADN composées des lettres A, T, G ou C.

Sachant que 2 séquences peuvent varier d'une seule lettre et que la longueur est variable, il m'est impossible de préciser une taille de comparaison pour l'index UNIQUE, et la comparaison doit donc se faire sur tous les caractères pour des séquences de même longueur.

Le moyen d'effectuer ceci est-il de créer un trigger qui me permettrait de vérifier la préexistence avant insertion de 'sequence' ?

Ex:

Code :
1
2
3
4
5
SELECT INTO variable sequence FROM TABLE WHERE sequence = ?
IF FOUND
 RETURN 1
ELSE
 RETURN 0
Et selon le code de retour effectuer l'insertion ou pas.

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2007, 14h23   #4
Expert Confirmé
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Pour éviter ce genre de pb, il faudrait peut-être regarder du coté des mécanismes genre CRC afin d'obtenir une valeur qui sera indexable.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2007, 17h02   #5
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
C'est-à-dire obtenir un nombre à partir d'un CRC et indexer ce nombre à la place de la séquence ?

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2007, 21h40   #6
Expert Confirmé
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par ctobini Voir le message
C'est-à-dire obtenir un nombre à partir d'un CRC et indexer ce nombre à la place de la séquence ?

C. Tobini
C'est cela même
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 10h36   #7
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour et désolé de ma réponse tardive,

J'ai finalement opté pour une indexation sur la totalité de la longueur. J'ai théoriquement un maximum de 500 caractères, en indiquant une taille supérieure, l'indexation se fait dynamiquement sur la taille d'index maximum.

C'est lourd mais je n'ai pour l'instant pas énormémement de sondes à gérer, je préfère avoir la certitude d'avoir une séquence unique par table que prendre le risque d'avoir des doublons, ce qui serait catastrophique

J'ai jeté un oeil du côté des forums d'algo en exposant mon problème et en regardant les mécanismes CRC et je n'ai pas la certitude d'avoir un INT unique, c'est un gros risque pour de la production !

Merci encore et bonne journée,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h01.


 
 
 
 
Partenaires

Hébergement Web