| 741 | raphael | 1 | Créer une base de données tb_cel avant de lancer les scripts
 | 
        
           |  |  | 2 |   | 
        
           | 755 | raphael | 3 | == Sommaire ==
 | 
        
           |  |  | 4 | 1) à propos de la mise à jour de juillet 2013
 | 
        
           |  |  | 5 | 2) à propos de la table cel_references
 | 
        
           |  |  | 6 | ==============
 | 
        
           | 741 | raphael | 7 |   | 
        
           | 755 | raphael | 8 | 0) maj-referentiel-201307.sql
 | 
        
           |  |  | 9 | mise à jour des structure de table (les index notamment):
 | 
        
           |  |  | 10 |   | 
        
           |  |  | 11 | 1) maj-cleanup-201307.sql
 | 
        
           |  |  | 12 | uniformisation des données (lon/lat, date, ...)
 | 
        
           |  |  | 13 |   | 
        
           |  |  | 14 | 2) TODO: maj-nom-ret.sql
 | 
        
           |  |  | 15 | TODO (pas sur) MAJ du référentiel pour les observation ayant un nom_ret_nn
 | 
        
           |  |  | 16 |   | 
        
           |  |  | 17 | 3) maj-referentiel-201307.sql
 | 
        
           |  |  | 18 | MAJ du référentiel pour les observation ayant un nom_ret_nn
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 | 4) maj-referentiel-und-201307.sql
 | 
        
           |  |  | 21 | MAJ du référentiel pour les observation n'ayant pas de nom_ret_nn (tentative de détermination par nom)
 | 
        
           |  |  | 22 |   | 
        
           | 756 | raphael | 23 | 5) referonosaure.sql
 | 
        
           |  |  | 24 | MAJ des observations (valides) avec les nouvelles données générées, à partir de bdtfx/bdtxa
 | 
        
           | 755 | raphael | 25 |   | 
        
           |  |  | 26 |   | 
        
           |  |  | 27 |   | 
        
           |  |  | 28 |   | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 |   | 
        
           |  |  | 31 |   | 
        
           |  |  | 32 |   | 
        
           |  |  | 33 |   | 
        
           |  |  | 34 |   | 
        
           |  |  | 35 |   | 
        
           |  |  | 36 |   | 
        
           |  |  | 37 |   | 
        
           |  |  | 38 | === 2: À propos de la table cel_references ===
 | 
        
           |  |  | 39 | Celle-ci existe car:
 | 
        
           | 741 | raphael | 40 | * les projets doivent être indépendants (eflore, cel, projets nvjfl, ...)
 | 
        
           |  |  | 41 | * les données nécessaire à l'export et à l'import sont massif
 | 
        
           |  |  | 42 | * or les webservices s'appellent parfois récursivement, sont lents et inadaptés
 | 
        
           |  |  | 43 |   | 
        
           |  |  | 44 | La conséquence est que la construction d'une table dérivée de bdtfx/bdtxa contenant
 | 
        
           |  |  | 45 | les informations utiles pour CEL s'avère nécessaire.
 | 
        
           |  |  | 46 | cel_references.sh construit une telle table.
 | 
        
           |  |  | 47 |   | 
        
           |  |  | 48 | Suivent quelques éléments de compréhension et exemples de requêtes liés à cette initialisation:
 | 
        
           |  |  | 49 |   | 
        
           |  |  | 50 | 1) Détermination des nom vernaculaires meilleurs et uniques:
 | 
        
           |  |  | 51 |   | 
        
           |  |  | 52 | Ce sont ceux qui ont le num_statut le plus élevés pour un num_taxon donné dans nvjfl_v2007.
 | 
        
           |  |  | 53 | Plusieurs méthodes sont exposées ci-dessous, sachant que le couple (référentiel, num_nom) est la clef
 | 
        
           |  |  | 54 | unique de cel_references.
 | 
        
           |  |  | 55 | Il existe à ce jour 16146 nom communs français distincts, 12312 num_taxon pour code_lang = fra et aucun num_statut NULL en français.
 | 
        
           |  |  | 56 | 1.1:
 | 
        
           |  |  | 57 | SELECT n.num_taxon, n.nom_vernaculaire, n.num_statut, n2.num_statut FROM nvjfl_v2007 n LEFT JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon) WHERE n.num_taxon < 32 AND n.code_langue = 'fra' GROUP BY n.num_taxon, n.num_statut HAVING n.num_statut = MAX(n2.num_statut) LIMIT 100;
 | 
        
           |  |  | 58 | # 12311 résultats
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 | 1.2:
 | 
        
           |  |  | 61 | SELECT n.num_taxon, n.nom_vernaculaire FROM nvjfl_v2007 n INNER JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon AND n.code_langue = n2.code_langue AND n.num_statut > n2.num_statut) WHERE n.code_langue = 'fra' GROUP BY n.num_taxon;
 | 
        
           |  |  | 62 | # 2680 résultats
 | 
        
           |  |  | 63 |   | 
        
           |  |  | 64 | 1.3:
 | 
        
           |  |  | 65 | SELECT n.num_taxon, n.nom_vernaculaire FROM nvjfl_v2007 n LEFT JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon AND n.code_langue = n2.code_langue AND n.num_statut > n2.num_statut) WHERE n.code_langue = 'fra' AND n2.num_statut IS NOT NULL GROUP BY num_taxon;
 | 
        
           |  |  | 66 | # 2680 résultats
 | 
        
           |  |  | 67 | Mais problème ensuite: SELECT n.* from cel_references NATURAL JOIN nvjfl_v2007 n WHERE `nom_commun` = '' AND n.code_langue = 'fra';
 | 
        
           |  |  | 68 |   | 
        
           |  |  | 69 |   | 
        
           |  |  | 70 |   | 
        
           |  |  | 71 | 2) à propos de l'insertion dans cel_references proprement dit:
 | 
        
           |  |  | 72 | Le modèle simplifié théorique de base est le suivant:
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 | INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `nom_sci`, `auteur`, `nom_commun`) \
 | 
        
           |  |  | 75 |        SELECT "bdtfx", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, n.nom_vernaculaire, MAX(n.num_statut)	FROM bdtfx_v1_01 b LEFT JOIN nvjfl_v2007 n	ON (b.num_taxonomique = n.num_taxon AND n.code_langue = 'fra' )	GROUP BY b.num_nom \
 | 
        
           |  |  | 76 |        UNION \
 | 
        
           |  |  | 77 |        SELECT "bdtxa", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, n.nom_vernaculaire, NULL				FROM bdtxa_v1_00 b LEFT JOIN nva_v2013_06 n	ON (b.num_tax = n.num_taxon AND n.code_langue = 'fra' )			GROUP BY b.num_nom \
 | 
        
           |  |  | 78 |        UNION \
 | 
        
           |  |  | 79 |        SELECT "isfan", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, NULL FROM isfan_v2013 b;
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 | Mais évidemment, les noms communs n'existe que pour bdtfx, de même que les données baseflor/baseveg. Plusieurs tables temporaires sont donc nécessaires en particulier puisque toutes les colonnes n'ont pas
 | 
        
           |  |  | 82 | des indexes adaptés pour effectuer des JOIN efficace dans le cadre de ce script d'intégration particulier.
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 | Une version plus aboutie, mais spécifique à bdtfx, après création préalable de T_nvjfl_v2007, était la suivante (présence des noms communs):
 | 
        
           |  |  | 85 | INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `num_taxon`, `nom_sci`, `auteur`, `nom_commun`) \
 | 
        
           |  |  | 86 |        SELECT "bdtfx", b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci, b.auteur, n.nom_vernaculaire FROM bdtfx_v1_01 b LEFT JOIN T_nvjfl_v2007 n ON (b.num_taxonomique = n.num_taxon );
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 | À noter:
 | 
        
           |  |  | 90 | SELECT b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci FROM bdtfx_v1_01 b where b.num_taxonomique = '';
 | 
        
           |  |  | 91 | # 3968, c'est à dire des num_taxon vides, pourtant INDEX et NOT NULL.
 | 
        
           |  |  | 92 | Idem pour bdtxa
 | 
        
           |  |  | 93 |   | 
        
           |  |  | 94 |   | 
        
           |  |  | 95 | 3) à propos de baseveg/baseflor:
 | 
        
           |  |  | 96 | Note au 16/07/2013: les schémas sont susceptibles de changer à l'avenir.
 | 
        
           |  |  | 97 | La jointure entre bdtfx et baseflor se fait sur le référentiel ("bdtfx") et num_nom.
 | 
        
           |  |  | 98 | À partir de là nous disposons d'un catminat_code qui correspond au code_catminat dans baseveg, afin d'obtenir le syntaxon.
 | 
        
           |  |  | 99 | Quelques exemples:
 | 
        
           |  |  | 100 |   | 
        
           |  |  | 101 | SELECT code_catminat, syntaxon, lumiere, hum_atmos, temperature, oceanite, ph_sol, hum_edaph, texture_sol FROM baseveg_v2013_01_09;
 | 
        
           |  |  | 102 | SELECT * from baseflor_v2012_12_31 where cle = 1174;
 | 
        
           |  |  | 103 |   | 
        
           |  |  | 104 | SELECT * from baseveg_v2013_01_09 where code_catminat = '05/3.0.1.0.2' AND niveau = 'ALL';
 | 
        
           |  |  | 105 | # 7 résultats
 | 
        
           |  |  | 106 | SELECT f.num_nomen, f.num_taxon, f.catminat_code, f.ve_lumiere, f.ve_temperature, f.ve_continentalite, f.ve_humidite_atmos, f.ve_humidite_edaph, f.ve_reaction_sol, f.ve_nutriments_sol, f.ve_salinite, f.ve_texture_sol, f.ve_mat_org_sol FROM baseflor_v2012_12_31 f LEFT JOIN baseveg_v2013_01_09 v ON (f.catminat_code = v.code_catminat) WHERE f.BDNT = "BDTFX" and f.cle = 1174;
 | 
        
           |  |  | 107 | # 7 résultats
 | 
        
           |  |  | 108 | SELECT f.num_nomen, f.num_taxon, f.catminat_code, f.ve_lumiere, f.ve_temperature, f.ve_continentalite, f.ve_humidite_atmos, f.ve_humidite_edaph, f.ve_reaction_sol, f.ve_nutriments_sol, f.ve_salinite, f.ve_texture_sol, f.ve_mat_org_sol FROM baseflor_v2012_12_31 f LEFT JOIN baseveg_v2013_01_09 v ON (f.catminat_code = v.code_catminat AND v.niveau = 'ALL') WHERE f.BDNT = "BDTFX" and f.cle = 1174;
 | 
        
           |  |  | 109 | # 1 résultat
 | 
        
           |  |  | 110 | Nous utilisons v.niveau = ALL pour nous assurer la présence d'un seul f.num_nomen dans `T_basevegflor` et donc assurer l'unicité de la PRIMARY KET de `cel_references`
 |