Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Révision du MCD pour mieux gérer la taxonomie #71

Closed
camillemonchicourt opened this issue Jun 14, 2016 · 3 comments
Closed

Révision du MCD pour mieux gérer la taxonomie #71

camillemonchicourt opened this issue Jun 14, 2016 · 3 comments

Comments

@camillemonchicourt
Copy link
Member

Actuellement la bib_taxons se base sur le cd_nom.
A partir du moment où on associe chaque objet de bib_taxons à des attributs et à des listes, cela nécessite de doublonner les informations pour chaque synonymes, voire d'intégrer des erreurs (un cd_ref ayant plusieurs cd_nom, il pourrait se voire attribuer des attributs incohérents par exemple).

Néanmoins il reste important de pouvoir filtrer le taxref pour le limiter aux espèces présentes sur le territoire, de gérer la synonymie et de pouvoir adapter le nom français utilisé car il est parfois très long dans le taxref.

Pour améliorer le MCD, plusieurs pistes ont été discutées :

01

01

02

02

03

03

04

04

Celui retenu étant :

05

@camillemonchicourt
Copy link
Member Author

Retour de tests de @gildeluermoz :

On ne peut pas créer une clé primaire sur un champs dont les valeurs ne sont pas uniques :

ALTER TABLE taxonomie.cor_taxon_attribut
  ADD CONSTRAINT cor_taxon_attrib_taxref_fkey FOREIGN KEY (cd_ref)
      REFERENCES taxonomie.taxref (cd_ref) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION;  
ERREUR:  il n'existe aucune contrainte unique correspondant aux clés données pour la
table « taxref » référencée

DONC sa proposition :

J'ai juste nommé le champ cd_ref au lieu de cd_nom pour que ce soit plus parlant quand on remplit la table cor_taxon_attribut.

Ce que je propose évite de créer 2 tables, une des noms et une des taxons de la structure (avec seulement le cd_ref dedans). Cela permet aussi de conserver la logique du modèle actuel en ajoutant juste des contraintes. Maintenant c'est du coté de TaxHub qu'il faut gérer ces contraintes.

En résumé on fait pointer la fk (cd_ref) de cor_taxon_attribut sur le cd_nom de bib_noms (ou bib_taxons) et pas comme avant sur la clé primaire (id_taxon). Ce cd_nom de bib_noms est unique grâce à une contrainte d'unicité, on peut donc faire pointer une fk dessus.

  • on pointe bien sur nos taxons et pas sur tout le taxref,
  • on a bien une fk entre bib_noms et cor_taxon_attribut (donc on ne peut pas saisir des attributs pour des taxons qui ne sont pas dans nos taxons).
  • on peut saisir des taxons absents de taxref mais on ne pourra pas leur donner des attributs (car la FK ne pointe plus sur le id_taxon).

Ce qui donne :

taxhubdb-v2

bib_noms
CONSTRAINT is_unique_cd_nom UNIQUE (cd_nom),
CONSTRAINT is_valid_cd_ref CHECK (cd_ref = taxonomie.find_cdref(cd_nom))

cor_taxon_attribut
1 : CONSTRAINT is_cd_ref CHECK (taxonomie.find_cdref(cd_ref) = cd_ref);

Ce modèle demande une modification du modèle actuel (modif en rouge)
Contraintes :

  • Interdire la saisie de plusieurs taxons ayant le même cd_nom (is_unique_cd_nom)
  • Permettre la saisie de taxons absents du taxref (match simple permet les valeurs nulles
    sur les FK)
  • Interdire la saisie d'un cd_ref non valide dans la bib_noms ( is_valid_cd_ref )
  • Interdire la saisie d'attribut sur des taxons absents de la bib_noms (FK sur bib_noms
    et non sur taxref)
  • Interdire la saisie d'attributs sur un nom qui n'est pas un taxon de référence (is_cd_ref)

Aperçu de bib_noms :

bib_noms

A voir ce qui est préférable entre les 2 propositions (renommer ou pas bib_taxons en bib_noms).

Pour ce qui concerne les évolutions dans GeoNature garder une bib_taxons et un id_taxon c'est plus simple. Pour ce qui est des attributs, ce n'est pas implémenté pour le moment.

@amandine-sahl
Copy link
Contributor

amandine-sahl commented Jun 27, 2016

La contrainte "Interdire la saisie d'attribut sur des taxons absents de la bib_noms (FK sur bib_noms et non sur taxref)" ne peut pas fonctionner car elle implique que pour chaque taxon de bib_nom il y ait un enregistrement qui réponde à cd_nom == cd_ref ce qui n'est en rien une obligation.

Pour ce qui est de bib_taxon vs bib_nom ça m'est un peu égale et je comprend les problèmes de répercussion même si d'un point de vue sémantique je préfèrerai bib_nom car on ne manipule pas des taxons.

@amandine-sahl
Copy link
Contributor

Je ferme l'issue car nous avons réaliser les modifications validés. On ouvrira un autre ticket quand on voudra faire de nouvelle modification

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants