proclème d'importation "fragmentée" de csv vers BDD

Petit nouveau ! | 3 Messages

17 mars 2010, 13:37

Bonjour,

je viens d'entamer un stage en bioinfo et j'ai pour mission de transformer tous leurs fichiers .csv (environ une trentaine contenant chacun entre 200 à 5000 lignes) en vrai SGBD.

J'ai déjà préparé la base de données, mon problème se situe au niveau de l'importation.
Chaque fichier csv contient le profil d'individus. Je dois importer les données pour chaque individu dans mes tables et là je coince complètement..

En effet, si j'importe d'abord chaque fichier en tant que table avant de les dispacher dans les vraies tables (le nom dans la table 'malade', le stade tumoral dans la table 'état de santé', le profil génomique dans 'gène', etc...) je vais avoir un nombre de redondance impressionnant, non?

De plus, comment faire persister le lien ligne comme étant un lien relationnel dans le SGBD afin de pouvoir garder toute les informations?
Je devrais avoir des tables d'association mais elles vont pas se remplir toutes seules! (et à la main.. je peux pas, y'a trop d'individus!)

Ai-je été claire? 8-|

Merci de votre aide!

ViPHP
ViPHP | 1024 Messages

17 mars 2010, 14:42

Hello,

Ce que je fais d'habitude, c'est d'importer les fichiers tels quels dans MySQL.
J'y ajoute des colonnes pour indiquer de nouveaux id ou si des traitements ont été effectués (par exemple un champ indiquant si oui ou non le profil a été migré vers la table "malade"). Ces colonnes sont mises à jour par le script de migration = les requêtes SQL.

A+

Pascal

Petit nouveau ! | 3 Messages

18 mars 2010, 10:51

Merci de répondre!

Je comprend ce que tu veux dire, mais je ne vois pas en quoi ça évite les redondances!

Exemple, pour 2000 individus, j'ai le choix entre 3 valeurs : T1, T2 et T3.
Si j'importe directement les données de la table source à la nouvelle, il va m'y mettre 1000*T1, 250*T2 et 750*T3 (ce qui est loin d'être pertinent..).
Alors que j'aurais préféré que les tables soient liées par une table relation qui permettent de dire ind1=T3, ind2=T3, etc... et du coup y'aurait qu'une fois T1, T2 et T3 dans ma table de destination!

Table_source
ind : 1, 2, 3, 4, ....
stade_T : T3, T3, T1, T2, ...

Table_destination
id : 1, 2, 3
stade_T : T1, T2, T3

Table_relation
ind : 1, 2, 3, 4, ...
id : 3, 3, 1, 2, ...

Or je dois le faire sur des milliers d'individus, y-a-t'il un moyen de faire une requête, un script qui permettent de traduire ma Table_source en Table_relation?? Parce que si je dois tout me taper à la main, j'en ai pour 6 mois! (très légèrement exagéré..)

C'est la première fois que j'applique du mySQL et je n'ai pas encore les réflexes...

ViPHP
ViPHP | 1024 Messages

18 mars 2010, 15:30

dans ce cas, pour les valeurs liées, il faut faire une requête sur la table de base pour obtenir les valeurs différentes :
SELECT DISTINCT type_maladie
FROM table_csv_de_base
GROUP BY type_maladie
Avec le bon SQL, tu peux faire directement un insert dans la table type_maladie en utilisant ce select (lire la doc mysql pour info...)

Il faut faire ça pour chaque donnée à extraire.

A+

Pascal

Petit nouveau ! | 3 Messages

18 mars 2010, 18:01

Ok, je vais m'y atteler,

Merci!