Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 348 | Rev 755 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 348 Rev 741
Line 1... Line -...
1
Créer une base de données tb_cel avant de lancer les scripts
-
 
2
1
Créer une base de données tb_cel avant de lancer les scripts
-
 
2
 
-
 
3
 
-
 
4
À propos de la table cel_references: celle-ci existe car:
-
 
5
* les projets doivent être indépendants (eflore, cel, projets nvjfl, ...)
-
 
6
* les données nécessaire à l'export et à l'import sont massif
-
 
7
* or les webservices s'appellent parfois récursivement, sont lents et inadaptés
-
 
8
 
-
 
9
La conséquence est que la construction d'une table dérivée de bdtfx/bdtxa contenant
-
 
10
les informations utiles pour CEL s'avère nécessaire.
-
 
11
cel_references.sh construit une telle table.
-
 
12
 
-
 
13
Suivent quelques éléments de compréhension et exemples de requêtes liés à cette initialisation:
-
 
14
 
-
 
15
1) Détermination des nom vernaculaires meilleurs et uniques:
-
 
16
 
-
 
17
Ce sont ceux qui ont le num_statut le plus élevés pour un num_taxon donné dans nvjfl_v2007.
-
 
18
Plusieurs méthodes sont exposées ci-dessous, sachant que le couple (référentiel, num_nom) est la clef
-
 
19
unique de cel_references.
-
 
20
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.
-
 
21
1.1:
-
 
22
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;
-
 
23
# 12311 résultats
-
 
24
 
-
 
25
1.2:
-
 
26
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;
-
 
27
# 2680 résultats
-
 
28
 
-
 
29
1.3:
-
 
30
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;
-
 
31
# 2680 résultats
-
 
32
Mais problème ensuite: SELECT n.* from cel_references NATURAL JOIN nvjfl_v2007 n WHERE `nom_commun` = '' AND n.code_langue = 'fra';
-
 
33
 
-
 
34
 
-
 
35
 
-
 
36
2) à propos de l'insertion dans cel_references proprement dit:
-
 
37
Le modèle simplifié théorique de base est le suivant:
-
 
38
 
-
 
39
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `nom_sci`, `auteur`, `nom_commun`) \
-
 
40
       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 \
-
 
41
       UNION \
-
 
42
       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 \
-
 
43
       UNION \
-
 
44
       SELECT "isfan", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, NULL FROM isfan_v2013 b;
-
 
45
 
-
 
46
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
-
 
47
des indexes adaptés pour effectuer des JOIN efficace dans le cadre de ce script d'intégration particulier.
-
 
48
 
-
 
49
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):
-
 
50
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `num_taxon`, `nom_sci`, `auteur`, `nom_commun`) \
-
 
51
       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 );
-
 
52
 
-
 
53
 
-
 
54
À noter:
-
 
55
SELECT b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci FROM bdtfx_v1_01 b where b.num_taxonomique = '';
-
 
56
# 3968, c'est à dire des num_taxon vides, pourtant INDEX et NOT NULL.
-
 
57
Idem pour bdtxa
-
 
58
 
-
 
59
 
-
 
60
3) à propos de baseveg/baseflor:
-
 
61
Note au 16/07/2013: les schémas sont susceptibles de changer à l'avenir.
-
 
62
La jointure entre bdtfx et baseflor se fait sur le référentiel ("bdtfx") et num_nom.
-
 
63
À partir de là nous disposons d'un catminat_code qui correspond au code_catminat dans baseveg, afin d'obtenir le syntaxon.
-
 
64
Quelques exemples:
-
 
65
 
-
 
66
SELECT code_catminat, syntaxon, lumiere, hum_atmos, temperature, oceanite, ph_sol, hum_edaph, texture_sol FROM baseveg_v2013_01_09;
-
 
67
SELECT * from baseflor_v2012_12_31 where cle = 1174;
-
 
68
 
-
 
69
SELECT * from baseveg_v2013_01_09 where code_catminat = '05/3.0.1.0.2' AND niveau = 'ALL';
-
 
70
# 7 résultats
-
 
71
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;
-
 
72
# 7 résultats
-
 
73
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;
-
 
74
# 1 résultat
-
 
75
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`
-
 
76