IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Gestion de spectres d'étoiles variables


Sujet :

Schéma

  1. #21
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Bonjour Vincent,

    Citation Envoyé par aras-vbo Voir le message
    La partie Spectre a été bien remaniée. Je crois qu'elle en avait besoin.
    Les règles de gestion sont les suivantes :
    SP_01 : Un spectre est enregistré par 1 seul instrument
    SP_02 : Un spectre est enregistré à une date donnée (date + heure à la seconde près).
    SP_03 : Un spectre est enregistré pendant une certaine durée d'exposition (exprimée en secondes).
    SP_04 : Un spectre peut appartenir à une série de spectres ou non (une série est ici dans le sens de série temporelle).
    La modélisation de ces règles est correcte. Une remarque : lors de la dérivation en modèle logique (MLD) ou relationnel, les propriétés de l'association Enregistrer vont migrer dans la table SPECTRE.


    Citation Envoyé par aras-vbo Voir le message
    SP_AT_03 : Un spectre peut être dans 3 états de validation : en attente de validation, validé, non validé.
    Le booléen "est_valide" ne modélise que deux états. Etant donné que tu veux en gérer trois, il faut externaliser cette gestion dans une entité de type Id + Libellé.


    Citation Envoyé par aras-vbo Voir le message
    J'ai quelques difficultés à modéliser les mots-clés d'un spectre
    En résumé (écartons la solution intermédiaire n° 2), la solution 1 offre l'avantage de ne pas risquer d'incohérence entre les mots-clés et les informations stockées dans la base mais a pour inconvénient de risquer une perte d'information. La solution 3 est exactement inverse : risque d'incohérence mots-clés / reste de la base mais pas de perte d'information.

    Puisque la solution 3 te semble plus intéressante, c'est que le risque de perte d'information est plus gênant pour toi que le risque d'incohérence. Pour pallier ce risque, une solution est de mettre en place un traitement qui "compare" l'information contenue dans le mot-clé "redondant" à sa contrepartie au moment de l'extraction et du stockage du mot-clé. Pour reprendre ton exemple, ce traitement devrait vérifier que lorsqu'un observateur O1 soumet un spectre, la valeur contenue dans le mot-clé OBSERVER est bien un alias de O1.

    Pour la modélisation, je propose

    [ TYPE_MOTCLE ]--0,n----( MOTCLE )----0,n--[ SPECTRE ]

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Entité TYPE_MOT-CLE (id_type_motcle, nom_type_motcle, est_obligatoire_spectre, est_obligatoire_spectre_echelle) 
    Association MOTCLE (valeur_motcle)

    Le caractère obligatoire d'un mot-clé est lié au type de spectre (spectre ou spectre-échelle), pas à une occurrence particulière. C'est ce que modélisent les propriétés "est_obligatoire_spectre" et "est_obligatoire_spectre_echelle". A l'inverse, les associations "definie" relient une occurrence de type de mot-clé à une occurrence de spectre et spectre-échelle . Elles doivent donc être éliminées.

    La propriété racine_nom_ordre a disparu de l'entité SPECTRE_ECHELLE. Plus rien ne distingue un spectre d'un spectre-échelle. La spécialisation SPECTRE_ECHELLE est-elle toujours nécessaire ?


    Bravo pour la qualité du sujet et des explications.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  2. #22
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par JPhi33 Voir le message
    Le booléen "est_valide" ne modélise que deux états. Etant donné que tu veux en gérer trois, il faut externaliser cette gestion dans une entité de type Id + Libellé.
    Ou bien, solution dégradée, créer une contrainte "CHECK"

    Citation Envoyé par JPhi33 Voir le message
    Bravo pour la qualité du sujet et des explications.

  3. #23
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonjour JPhi33 (et bonjour aux autres intervenants)

    Citation Envoyé par JPhi33 Voir le message
    Le booléen "est_valide" ne modélise que deux états. Etant donné que tu veux en gérer trois, il faut externaliser cette gestion dans une entité de type Id + Libellé.
    Merci d'avoir repêré cette boulette. J'ai modifié mon MCD en conséquence.J'ai ajouté une entité VALIDATION_SPECTRE.

    Citation Envoyé par JPhi33 Voir le message
    En résumé (écartons la solution intermédiaire n° 2), la solution 1 offre l'avantage de ne pas risquer d'incohérence entre les mots-clés et les informations stockées dans la base mais a pour inconvénient de risquer une perte d'information. La solution 3 est exactement inverse : risque d'incohérence mots-clés / reste de la base mais pas de perte d'information.

    Puisque la solution 3 te semble plus intéressante, c'est que le risque de perte d'information est plus gênant pour toi que le risque d'incohérence. Pour pallier ce risque, une solution est de mettre en place un traitement qui "compare" l'information contenue dans le mot-clé "redondant" à sa contrepartie au moment de l'extraction et du stockage du mot-clé. Pour reprendre ton exemple, ce traitement devrait vérifier que lorsqu'un observateur O1 soumet un spectre, la valeur contenue dans le mot-clé OBSERVER est bien un alias de O1.

    Pour la modélisation, je propose

    [ TYPE_MOTCLE ]--0,n----( MOTCLE )----0,n--[ SPECTRE ]

    Entité TYPE_MOT-CLE (id_type_motcle, nom_type_motcle, est_obligatoire_spectre, est_obligatoire_spectre_echelle)
    Association MOTCLE (valeur_motcle)

    Le caractère obligatoire d'un mot-clé est lié au type de spectre (spectre ou spectre-échelle), pas à une occurrence particulière. C'est ce que modélisent les propriétés "est_obligatoire_spectre" et "est_obligatoire_spectre_echelle". A l'inverse, les associations "definie" relient une occurrence de type de mot-clé à une occurrence de spectre et spectre-échelle . Elles doivent donc être éliminées.

    La propriété racine_nom_ordre a disparu de l'entité SPECTRE_ECHELLE. Plus rien ne distingue un spectre d'un spectre-échelle. La spécialisation SPECTRE_ECHELLE est-elle toujours nécessaire ?
    Mon approche est la suivante :
    1 - il faut associer les spectres soumis à des informations minimales, obligatoires et validées qui peuvent déjà être enregistrées dans la base (un observateur, l'astre observé, l'instrument utilisé, etc.). Ces informations minimales permettent d'assurer la validité "scientifique" du spectre soumis. Elles permettent aussi de faire des requêtes efficaces sur les spectres.
    2 - il ne faut pas risquer de perdre les informations supplémentaires qui pourraient se trouver dans l'en-tête du fichier FITS de chaque spectre, même si ces informations supplémentaires ne font l'objet ni d'aucun traitement, ni de requête. Leur utilisation éventuelle serait de pouvoir reconstituer un en-tête FITS idéal du spectre soumis (c'est à dire "100% compatible ARAS").

    J'ai modifié le MCD en remplaçant mon approche initiale par la tienne, plus simple.


    Nom : ARAS-db_v07_forum.jpg
Affichages : 551
Taille : 183,0 Ko


    J'ai aussi ajouté une contrainte d'exclusion entre les relations Valider et Soumettre, pour faire apparaître le fait qu'un observateur ne peut pas valider les propres spectres qu'il soumet à la base.

    Citation Envoyé par JPhi33 Voir le message
    Bravo pour la qualité du sujet et des explications.
    Merci à vous pour votre aide et pour vos conseils. Ca me paraît primordial pour modéliser correctement de faire preuve d'humilité et d'avoir l'avis de personnes plus expérimentées que soit.


    J'ai 2 questions supplémentaires :

    1 - Comment assurer la validité des valeurs des mots-clés d'un en-tête au moment où je vais l'intégrer dans la base, dans le cas où j'utilise ton modèle, JPhi33 ? Une contrainte CHECK ?
    Par exemple, le mot-clé CDELT1 (la dispersion spectrale, exprimée en angstrom/pixel OU en nm/pixel) est obligatoire dans l'en-tête FITS que je vais extraire et insérer dans la base. Comment faire pour vérifier que son format est un bien un Float et que sa valeur est bien comprise entre 0.0001 et 30 ? Est-ce que je peux le faire directement dans la base ou est-ce que je dois coder un système de validation en amont ?

    2 - Lors du passage au niveau physique (j'anticipe un peu...), est-ce que j'ai intérêt à définir 3 schémas différents (User, Spectra et Catalog) pour "éclater" logiquement ma base ?

    Vincent

  4. #24
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par aras-vbo Voir le message
    1 - Comment assurer la validité des valeurs des mots-clés d'un en-tête au moment où je vais l'intégrer dans la base, dans le cas où j'utilise ton modèle, JPhi33 ? Une contrainte CHECK ?
    Par exemple, le mot-clé CDELT1 (la dispersion spectrale, exprimée en angstrom/pixel OU en nm/pixel) est obligatoire dans l'en-tête FITS que je vais extraire et insérer dans la base. Comment faire pour vérifier que son format est un bien un Float et que sa valeur est bien comprise entre 0.0001 et 30 ? Est-ce que je peux le faire directement dans la base ou est-ce que je dois coder un système de validation en amont ?
    Dans la mesure où ces mots clefs ne sont attributs d'aucune autre table une contrainte check peut être une solution, sous réserve qu'il n'y ait pas pléthore de valeurs possibles
    Un trigger en est une autre (vous pourriez lui communiquer l'attribut issu du spectre qui permet de déterminer le mot-clef)
    Par contre le type Float n'est pas adapté pour stocker des valeurs décimales. Le float a vocation à stocker des très grande valeurs sous formes de puissances de 10 avec une faible précision (perte des décimales). Pour ce genre de besoin, préférez du decimal (n,p)

    Citation Envoyé par aras-vbo Voir le message
    2 - Lors du passage au niveau physique (j'anticipe un peu...), est-ce que j'ai intérêt à définir 3 schémas différents (User, Spectra et Catalog) pour "éclater" logiquement ma base ?
    Peut être aurez vous même plusieurs bases de données, ca dépendra qui administre quoi et quelles sont les contraintes de service et d'exploitation. Certaines opérations techniques sur la base de donnée verrouillent la totalité de la base.

  5. #25
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Ce qui me gène dans votre modèle : email et site web... ALlez jusqu'au bout. Considérez dns et faites pointer vos email et vos sites web vers DNS !
    Dans l'association n:m utiliser entre instrument et utilisateur, rajouter des attributs comme la date, la durée...
    Pareil pour soumettre.

    Un instrument contient il toujours un télescope un spectrographe et une caméra ?

    Les associations "definie" entre spectre et type mot clzf ne sont elles pas exclusives ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #26
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Ce qui me gène dans votre modèle : email et site web... ALlez jusqu'au bout. Considérez dns et faites pointer vos email et vos sites web vers DNS !
    Est-ce qu'il s'agit de ne stocker les adresses courriel que jusqu'au @ ?
    Qu'en est il des adresses web ?

    Citation Envoyé par SQLpro Voir le message
    Un instrument contient il toujours un télescope un spectrographe et une caméra ?
    Oui si j'en crois la réponse n°9 page 1

  7. #27
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Est-ce qu'il s'agit de ne stocker les adresses courriel que jusqu'au @ ?
    Qu'en est il des adresses web ?
    Exemple :
    email : toto@ibm.com => dns = ibm.com
    page web : http://www.ibm.com => dns = ibm.com

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #28
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Enfin de retour après la longue pose faite dans ce projet.

    L'explication est simple. Nos collègues anglais de la British Astronomical Association ont mis en ligne leur propre base de données spectrale : https://britastro.org/specdb/ à la fin de l'année dernière. Suite à cela, nous avons décidé de la tester pendant 6 mois afin d'évaluer si elle pouvait devenir une alternative viable, utilisable dans le cadre de l'initiative ARAS.
    L'évaluation est mitigée. L'outil est intéressant mais très peu utilisé au final (sans doute parce qu'il est rattaché à une association nationale et non le résultat d'une initiative internationale). Du coup, les amateurs de tous les pays continuent d'envoyer les résultats à ARAS et ne publient pas ou peu dans la base BAA. Les professionnels continuent de faire des appels à observations dans ARAS et non dans le cadre de la BAA et, logiquement, ARAS centralise les résultats obtenus.

    Par conséquent, nous reprenons notre projet initial car la situation devient de plus en plus compliqué pour le gestionnaire des données d'ARAS.

    ----------------

    J'ai repris et modifié mon modèle (en version 8 maintenant). J'ai modifié la mise en page car j'ai constaté un souci logique dans mon modèle, que je vais expliquer après le schéma.

    Nom : ARAS-db_v08.jpg
Affichages : 532
Taille : 596,9 Ko

    Deux modifications ont été apportées :

    1 - Je n'ai pas pris en compte le fait que j'ai sans doute une association n-aire à gérer autour de l'entité Spectre mais que je peux décomposer sans toutefois pouvoir me débarrasser d'un couple à gérer. En effet, un spectre est impérativement le résultat de l'interaction entre un Astre, un ou plusieurs Observateurs mais aussi un couple indissociable Instrument-Site.
    Dans la dernière version de mon modèle, je n'avais pas lié le Spectre à un Site ; le lien était abusivement effectué par l'entité Instrument. Or, cela ne colle pas. Cela signifiait que le site d'enregistrement du spectre n'avait finalement aucune importance, ce qui n'est pas le cas ; l'un des paramètres, la vitesse héliocentrique, est liée à la position de l'instrument sur Terre... Je dois donc prendre en compte le fait que c'est le couple Site/Instrument qui enregistre le spectre et par conséquent créer une classe-association.

    Voici donc le détail de ce que cela donne.

    Nom : ARAS-db_v08_detail1.jpg
Affichages : 506
Taille : 300,7 Ko

    Est-ce que cela vous paraît cohérent ?

    2 - J'ai supprimé la décomposition atomique des adresses mails et des URLs de site d'Utilisateurs. Même si, dans l'absolu, je devrais les décomposer en préfixes et DNS, cela n'apporte rien, sinon de la complication. Je peux considérer une adresse mail ou une URL comme une entité atomique ; aucune requête ne sera sans doute jamais effectuée sur un DNS ou un préfixe.

    Pour répondre à Frédéric :
    - un Instrument est composé d'un seul Telescope, d'un seul Spectrographe et d'une seule Camera.
    A partir du moment où un Utilisateur modifie les caractéristiques physiques d'un élément (Telescope, Spectrographe ou Camera), on considère qu'il s'agit d'un autre Instrument. Je pense que gérer des configurations particulières de Spectrographe, par exemple (changer juste le réseau de diffraction et donc modifier sa résolution résultante) serait très compliquée à gérer dans la base.

    Vincent

  9. #29
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Bonsoir Aras-vbo, heureux de vous voir de retour avec ce sujet passionnant

    L'analyse de votre MCD va demander un peu de temps, il est riche et il faut se replonger dans le sujet qui date un peu

    Concernant la mesure du spectre, j'avoue être plus qu'en limite de compétence sur ces sujets mais bon , des fois les questions de béotiens peuvent aider
    Ne faut il pas plutôt enregistrer un spectre brut d'une part, et les éléments permettant de corriger la mesure en fonction de la localisation de l'instrument d'autre part ?

    Au sujet des adresses mail et web, je suis plutôt d'accord avec vous, sauf si vous avez par exemple un serveur de messagerie chez un hébergeur pour l'ensemble de vos abonnés, en cas de changement d'hébergeur, la solution préconisée par SQL Pro est avantageuse

    Comme vous n'avez pas réussi à afficher la longueur des attributs, vérifiez simplement que vous n'utilisez pas du varchar pour des attributs dont la longueur maxi est faible, car en ce cas l'avantage du varchar devient plutôt un inconvénient. Par longueur faible j'entends en deçà de 10-15 caractères. A l’extrême, un varchar de 1 ne présente que des inconvénients

  10. #30
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonjour Escartefigue,

    Le sujet date un peu. La remise en route et l'analyse de la base n'est pas simple, y compris pour moi, après plus de 6 mois d'arrêt.


    Les spectres publiés dans la base sont déjà traités. La base ne gèrera pas les fichiers bruts des spectres.

    Il faut bien distinguer 2 choses. Un spectre brut est juste une image brute, sortie du spectrographe, à laquelle sont ajoutées des informations de prises de vues dans un en-tête (mots-clés + valeurs). On l'appelle souvent une "image brute" ou une "brute".
    L'observateur va enregistrer plusieurs images brutes (en général une dizaine voire plus) puis il va les traiter dans un logiciel séparé, en utilisant d'autres types d'images supplémentaires (des fichiers cosmétiques pour corriger les biais de la caméra et du spectrographe, ainsi que des fichiers de calibration du spectre). Il peut aussi intégrer dans son traitement certains paramètres physiques. Ce traitement sert à construire le "produit" final : une courbe étalonnée en longueur d'onde. Ce sont ces courbes qui constituent les vrais "spectres" gérés dans la base. Ils contiennent aussi une image (la courbe proprement dite) et un en-tête (mots-clés + valeurs).

    Lorsqu'un observateur prend le spectre d'un astre, il n'est pas immobile par rapport à lui, du fait de la rotation de la Terre autour du Soleil et de la rotation de la Terre sur elle-même (mais aussi du fait du déplacement du système solaire dans la Galaxie). Ce biais, la vitesse radiale barycentrique de la Terre, peut être calculé précisément, même à posteriori, grâce à plusieurs paramètres : la position de l'astre observé, la date et l'heure de la prise de vues mais aussi la position de l'observateur à la surface de la Terre (la vitesse radiale d'un observateur sur l'équateur est plus importante que celle d'un observateur situé à Paris).
    Cette vitesse radiale barycentrique influe sur l'effet Doppler, c'est à dire le décalage des raies vers le rouge et vers le bleu du fait de la vitesse relative des 2 parties, observateur et observé. Les raies son décalées vers le bleu quand les 2 se rapprochent ; elles sont décalées vers le rouge lorsqu'elles s'éloignent.
    Pour certaines mesures, comme la détection des exoplanètes par exemple, c'est très important.

    En règle générale, on construit la courbe en n'introduisant aucun paramètre physique ou aucun traitement (comme la vitesse héliocentrique ou la normalisation du spectre).
    Si un professionnel veut utiliser la courbe, les données seront brutes. Il pourra alors si le besoin se fait sentir ajouter des paramètres physiques pour son interprétation. Il faut donc qu'il puisse quand même disposer des informations qui lui permette de les ajouter à bon escient. La position de l'instrument sur Terre est l'une de ces informations. Il faut donc qu'elle figure quelque part dans le spectre.


    Concernant les adresses, je vais peut-être revenir sur mon idée et décomposer. Je n'avais effectivement pas pensé au fait qu'on puisse avoir un jour la possibilité d'utiliser des adresses mails sur notre propre nom de domaine.


    Vincent

  11. #31
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Bonjour Vincent,

    Citation Envoyé par aras-vbo Voir le message
    Est-ce que cela vous paraît cohérent ?
    Oui, et tu le justifies parfaitement :
    Citation Envoyé par aras-vbo Voir le message
    l'un des paramètres, la vitesse héliocentrique, est liée à la position de l'instrument sur Terre... Je dois donc prendre en compte le fait que c'est le couple Site/Instrument qui enregistre le spectre


    En revanche, j'ai quelques remarques.

    1) Il semble que les cardinalités de l'association Posséder entre ASTRE et MAGNITUDE soient inversées.


    2) A propos de la magnitude, tu as précisé dans ton post #3 que
    Citation Envoyé par aras-vbo
    Une ETOILE possède une magnitude.
    mais l'entité MAGNITUDE est associée à ASTRE et non pas à ETOILE. Qu'en est-il ?
    Au passage, associer MAGNITUDE à ETOILE justifierait cette entité. En effet, telle que modélisée, une ETOILE n'est ni plus ni moins qu'un ASTRE comme tous les autres et ne justifie pas une entité spécifique.


    3) Concernant les alias : ALIAS_SITE, ALIAS_OBSERVATEUR et ALIAS_ASTRE, il s'agit d'entités faibles qui n'ont pas d'existence propre hors de leur entité de référence (respectivement SITE, OBSERVATEUR et ASTRE). Je préconiserais donc de les modéliser comme telles afin de les identifier relativement à leur entité de référence. Exemple :

    [ ALIAS_SITE ]-(1,1)---(nommer)----1,n->[ SITE ]
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  12. #32
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonsoir JPhi33,

    1) Les règles sont les suivantes :
    - un ASTRE peut posséder 0 ou n MAGNITUDE
    - Une MAGNITUDE se réfère nécessairement à un ASTRE
    J'ai l'impression que les cardinalités de mon association sont bonnes.

    Je vais sans doute essayer de reprendre l'intégralité des règles et les formaliser pour vérifier.

    2) J'ai mis en place un système d'héritage en partant d'une super-classe ASTRE. Tous les Astres, quels qu'ils soient, ont une propriété physique MAGNITUDE, connue ou non (0,n).
    Pour l'instant, la base ne gère que les ETOILES mais il est possible qu'à l'avenir nous gérions aussi les spectres d'autres types d'ASTRE, comme les NEBULEUSE ou les GALAXIE, qui possèdent aussi une MAGNITUDE. Dans ce cas, je préfère rattacher la MAGNITUDE à la super-classe ASTRE. J'ai donc anticipé l'évolution possible de la base dans mon schéma en modélisant une hiérarchie d'astres. Si je créé plus tard une entité NEBULEUSE, elle héritera de ASTRE.

    3) Effectivement, les alias n'ont aucune existence propre en dehors de l'entité de référence. Je vais donc suivre ton conseil. Je ne maîtrise pas trop cet aspect ; je vais me replonger dans l'identification relative...
    Dans ce cas, est-ce que je ne devrais pas faire de même avec l'entité EMAIL ou SITE_WEB ?

    Merci de ton retour et de tes propositions.

    Vincent

  13. #33
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Bonsoir Vincent,

    Citation Envoyé par aras-vbo Voir le message
    1) Les règles sont les suivantes :
    - un ASTRE peut posséder 0 ou n MAGNITUDE
    - Une MAGNITUDE se réfère nécessairement à un ASTRE
    J'ai l'impression que les cardinalités de mon association sont bonnes.
    Je me rends compte que la notion de magnitude a été largement débattue. Je n'avais pas tout lu... (désolé)
    Je prends cette synthèse comme référence (à toi de la corriger/compléter le cas échéant) :
    Citation Envoyé par aras-vbo Voir le message
    J'hésite à mettre dans ASTRE les différentes magnitudes car j'ai la hantise du NULL ...
    Certaines étoiles n'ont pas de magnitude visuelle à proprement parlé. C'est le cas des variables dont l'éclat varie et qui n'ont donc pas de magnitude fixe, juste des magnitudes max et min. Certaines variables mal connues n'ont soit pas de magnitude mini, soit pas de magnitude maxi, voire aucune des 2 et seulement une magnitude visuelle (on les sait variables intrinsèquement du fait de leur nature mais on n'a encore jamais observé de variation ou leur période est trop longue).
    Du coup, dans le doute, je préfère en faire des entités-types. Je ne sais pas si j'ai raison.
    La modélisation correspondante est celle-ci :

    [ ASTRE ]--0,n----( MAGNITUDE )----0,n--[ TYPE_MAGNITUDE ]

    L'association MAGNITUDE porte la propriété "magnitude_etoile" (qui devrait probablement être renommée "valeur_magnitude").
    La table qui en est dérivée est : MAGNITUDE(id_astre, id_type_magnitude, valeur_magnitude)

    Cette modélisation permet toutes les combinaisons possibles (je n'indique pas la valeur de la magnitude, sans intérêt pour l'explication) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    TYPE_MAGNITUDE
    id_type_magnitude intitule_type_magnitude
    ----------------- -----------------------
    1                 Fixe
    2                 Min
    3                 Max
    
    
    ASTRE
    id_astre
    --------
    1        <-- étoile à magnitude fixe
    2        <-- étoile variable magnitudes min et max connues
    3        <-- étoile variable magnitude min inconnue
    4        <-- étoile variable magnitude max inconnue
    5        <-- étoile variable magnitude inconnue
    
    
    MAGNITUDE
    id_astre id_type_magnitude
    -------- -----------------
    1        1                 <-- Magnitude fixe de l'astre 1
    2        2                 <-- Magnitude min de l'astre 2
    2        3                 <-- Magnitude max de l'astre 2
    3        3                 <-- Magnitude max de l'astre 3
    4        2                 <-- Magnitude min de l'astre 4
    et, évidemment, aucune occurrence de MAGNITUDE n'est liée à l'astre 5.


    Citation Envoyé par aras-vbo Voir le message
    J'ai donc anticipé l'évolution possible de la base dans mon schéma en modélisant une hiérarchie d'astres. Si je créé plus tard une entité NEBULEUSE, elle héritera de ASTRE.
    Oui mais en l'état, l'entité ETOILE ne se justifie pas : elle n'a aucune propriété ni association spécifique. Doit-on supposer que cette entité en aura dans le futur ?


    Citation Envoyé par aras-vbo Voir le message
    Dans ce cas, est-ce que je ne devrais pas faire de même avec l'entité EMAIL ou SITE_WEB ?
    Pour EMAIL, oui.
    Pour SITE_WEB, non. Un site web peut être associé à plusieurs observateurs : cardinalité 1,n côté SITE_WEB.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  14. #34
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonsoir à tous,

    Je préfère ne pas ouvrir de nouveau fil et reprendre la suite de la modélisation ici, afin de ne pas polluer le forum avec des discussions multiples sur le même sujet.
    Après une petite digression ici, concernant la modélisation des mots-clés des spectres, voici l'état final du MCD :

    Remarques :

    - Les entités relatives aux publications et aux campagnes de recherche ont été supprimées ; elles feront l'objet d'une prochaine release.
    - Certaines propriétés des spectres ont été supprimées de l'entité SPECTRE. Quelques unes d'entre elles étaient des propriétés techniques obligatoires (provenant du format de fichier FITS lui-même) mais qui ne présentent aucun intérêt et n'apportent aucune information sur le spectre en tant que tel. Elles possédaient en plus souvent la même valeur. Par conséquent, elles n'avaient aucune raison d'être stockée en base de données.
    - Inversement, d'autres valeurs qui sont pourtant facultatives et non présentes nativement dans le fichier FITS ont été ajoutées (le pouvoir de résolution ou l'unité de flux, par exemple) car elles ont un intérêt informatif pour le visiteur. Idem pour les bornes du spectre (lambda min et lambda max).
    - J'ai créé des domaines permettant de fixer les contraintes de valeurs des attributs qui le nécessitaient, en me basant sur les préconisations des mots-clés de la base BeSS existante.
    - Les pages web qui décrivent les astres majeurs possédant des spectres sera gérée manuellement, dans un premier temps et de façon temporaire (je l'espère...). J'ai donc ajouté une entité décrivant la page.

    Nom : ARAS_database_v1-0-03_MCD_FR.jpg
Affichages : 414
Taille : 581,6 Ko

    J'ai ensuite converti le MCD en anglais, en utilisant la convention de nommage des entités, liens, etc. suggérée par Frédéric Brouard. Elle me paraît assez pratique et pourra être comprise par des collègues spectroscopistes anglophones.

    Voici le résultat :

    Nom : ARAS_database_v1-0-03_MCD.jpg
Affichages : 429
Taille : 576,4 Ko

    Le MCD a ensuite été converti en MLD sous JMerise 0.4.0.1.
    Cette conversion m'a permis de corriger 2 liens entre entités dont les cardinalités étaient incorrectes.

    Le résultat est le suivant, après correction :

    Nom : ARAS_database_v1-0-03_MLD.jpg
Affichages : 464
Taille : 495,7 Ko

    Le code SQL pour PostgreSQL est le suivant :
    1 - J'ai créé manuellement les schémas et les domaines (non générés par JMerise)
    2 - J'ai réintégré les directives ALTER TABLE dans chaque table concernée, pour des questions de lecture.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
     
    -------------------------------------------------------------
    -- ARAS DATABASE v1.0.3 - PostgreSQL
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- SCHEMAS
    ------------------------------------------------------------
    CREATE SCHEMA S_SITE;
    CREATE SCHEMA S_USER;
    CREATE SCHEMA S_TELESCOPE;
    CREATE SCHEMA S_SPECTRUM;
    CREATE SCHEMA S_CATALOG;
    CREATE SCHEMA S_WEBSITE;
     
    ------------------------------------------------------------
    -- DOMAINS
    ------------------------------------------------------------
     
    -- Code of the observation site (ARAS code)
    CREATE DOMAIN D_A_SITECODE
    AS CHAR(6)
    CONSTRAINT CK_D_A_SITECODE CHECK (VALUE IS NOT NULL AND VALUE = UPPER(VALUE) AND VALUE ~* '#^[A-Z]{3}-[A-Z]{2}$#')
    COLLATE SQL_ASCII;
     
    -- Latitude of the observation site (BSS_LAT)
    CREATE DOMAIN D_N_LATITUDE
    AS NUMERIC(10,7)
    CONSTRAINT CK_D_N_LATITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -90 AND +90);
     
    -- Longitude of the observation site (BSS_LONG)
    CREATE DOMAIN D_N_LONGITUDE
    AS NUMERIC(10,7)
    CONSTRAINT CK_D_N_LONGITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN 0 AND 360);
     
    -- Altitude of the observation site (BSS_ELEV)
    CREATE DOMAIN D_N_ALTITUDE
    AS NUMERIC(6,2)
    CONSTRAINT CK_D_N_ALTITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN 0 AND 9000);
     
    -- User Email
    CREATE DOMAIN D_A_EMAIL
    AS VARCHAR(255)
    CONSTRAINT CK_D_A_EMAIL CHECK (VALUE IS NOT NULL AND VALUE = LOWER(VALUE) AND VALUE ~* '(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])')
    COLLATE SQL_ASCII;
     
    -- User Website
    CREATE DOMAIN D_A_WEBSITE
    AS VARCHAR(255)
    CONSTRAINT CK_D_A_WEBSITE CHECK (VALUE IS NOT NULL AND VALUE = LOWER(VALUE) AND VALUE ~* '@^(http\:\/\/|https\:\/\/)?([a-z0-9][a-z0-9\-]*\.)+[a-z0-9][a-z0-9\-]*$@i')
    COLLATE SQL_ASCII;
     
    -- User Code (ARAS)
    CREATE DOMAIN D_A_USERCODE
    AS CHAR(3)
    CONSTRAINT CK_D_A_USERCODE CHECK (VALUE IS NOT NULL AND VALUE = UPPER(VALUE) AND VALUE ~* '#^[A-Z]{3}$#')
    COLLATE SQL_ASCII;
     
    -- Right Ascension of an object
    CREATE DOMAIN D_N_RIGHTASCENSION
    AS NUMERIC(10,7)
    CONSTRAINT CK_D_N_RIGHTASCENSION CHECK (VALUE IS NOT NULL AND VALUE BETWEEN 0 AND 360);
     
    -- Declination of an object
    CREATE DOMAIN D_N_DECLINATION
    AS NUMERIC(8,6)
    CONSTRAINT CK_D_N_DECLINATION CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -90 AND 90);
     
    -- Magnitude of an object
    CREATE DOMAIN D_N_MAGNITUDE
    AS NUMERIC(4,2)
    CONSTRAINT CK_D_N_MAGNITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -27 AND 30);
     
    -- Spectrum Status
    CREATE DOMAIN D_A_SPMSTATUS
    AS VARCHAR(50)
    CONSTRAINT CK_D_A_SPMSTATUS CHECK (VALUE IS NOT NULL AND VALUE IN ('validated','in progress','refused'))
    COLLATE SQL_ASCII;
     
    -- Flux calibration
    CREATE DOMAIN D_A_FLXVALUE
    AS VARCHAR(30)
    DEFAULT 'relative'
    CONSTRAINT CK_D_A_FLXVALUE CHECK (VALUE IS NOT NULL AND VALUE IN 'relative', 'erg/cm^2/s/A')
    COLLATE SQL_ASCII;
     
    -- Applied Heliocentric Correction (BSS_VHEL)
    CREATE DOMAIN D_N_HELIOCORRECTION
    AS DECIMAL(6,3)
    DEFAULT 0.0
    CONSTRAINT CK_D_N_HELIOCORRECTION CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -200 AND 200);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA CATALOG
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table OBJECT : T_OBJECT_OBJ
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_OBJECT_OBJ(
    	OBJ_ID      SERIAL NOT NULL ,
    	OBJ_DISPLAY BOOL  NOT NULL ,
    	WPG_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_OBJECT_OBJ PRIMARY KEY (OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_OBJECT_OBJ
    ADD CONSTRAINT FK_T_OBJECT_OBJ_WPG_ID FOREIGN KEY (WPG_ID)
    REFERENCES S_WEBSITE.T_WEBPAGE_WPG(WPG_ID);
     
     
    ------------------------------------------------------------
    -- Table OBJECT ALIAS : T_OBJECT_ALIAS_OBA
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_OBJECT_ALIAS_OBA(
    	OBA_ID      SERIAL NOT NULL ,
    	OBA_NAME    VARCHAR (50) NOT NULL ,
    	USUAL_ALIAS BOOL  NOT NULL ,
    	OBJ_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_OBJECT_ALIAS_OBA PRIMARY KEY (OBA_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_OBJECT_ALIAS_OBA
    ADD CONSTRAINT FK_T_OBJECT_ALIAS_OBA_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table OBJECT COORDINATES : T_COORDINATE_COO
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_COORDINATE_COO(
    	COO_ID      SERIAL NOT NULL ,
    	COO_RA      D_N_RIGHTASCENSION NOT NULL ,
    	COO_DEC     D_N_DECLINATION NOT NULL ,
    	COO_EQUINOX FLOAT  NOT NULL ,
    	COO_SYS     CHAR (4)  NOT NULL ,
    	OBJ_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_COORDINATE_COO PRIMARY KEY (COO_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_COORDINATE_COO
    ADD CONSTRAINT FK_T_COORDINATE_COO_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table MAGNITUDE TYPE : T_MAG_TYPE_MGT
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_MAG_TYPE_MGT(
    	MGT_ID    SERIAL NOT NULL ,
    	MGT_VALUE VARCHAR (50) NOT NULL ,
    	CONSTRAINT PRK_T_MAG_TYPE_MGT PRIMARY KEY (MGT_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table MAGNITUDE : T_MAGNITUDE_MAG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_MAGNITUDE_MAG(
    	MAG_ID    SERIAL NOT NULL ,
    	MAG_VALUE D_N_MAGNITUDE NOT NULL ,
    	OBJ_ID    INT  NOT NULL ,
    	MGT_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_MAGNITUDE_MAG PRIMARY KEY (MAG_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_MAGNITUDE_MAG
    ADD CONSTRAINT FK_T_MAGNITUDE_MAG_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
    ALTER TABLE S_CATALOG.T_MAGNITUDE_MAG
    ADD CONSTRAINT FK_T_MAGNITUDE_MAG_MGT_ID FOREIGN KEY (MGT_ID)
    REFERENCES S_CATALOG.T_MAG_TYPE_MGT (MGT_ID);
     
     
    ------------------------------------------------------------
    -- Table héritée STAR : T_STAR_STR
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_STAR_STR(
    	OBJ_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_STAR_STR PRIMARY KEY (OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_STAR_STR
    ADD CONSTRAINT FK_T_STAR_STR_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table héritée VARIABLE STAR : T_VARIABLE_STAR_VST
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_VARIABLE_STAR_VST(
    	OBJ_ID INT  NOT NULL ,
    	VPE_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_VARIABLE_STAR_VST PRIMARY KEY (OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_VARIABLE_STAR_VST
    ADD CONSTRAINT FK_T_VARIABLE_STAR_VST_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
    ALTER TABLE S_CATALOG.T_VARIABLE_STAR_VST
    ADD CONSTRAINT FK_T_VARIABLE_STAR_VST_VPE_ID FOREIGN KEY (VPE_ID)
    REFERENCES S_CATALOG.T_VAR_PERIODE_VPE(VPE_ID);
     
     
    ------------------------------------------------------------
    -- Table VARIABLE PERIODE : T_VAR_PERIODE_VPE
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_VAR_PERIODE_VPE(
    	VPE_ID    SERIAL NOT NULL ,
    	VPE_VALUE INT  NOT NULL ,
    	OBJ_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_VAR_PERIODE_VPE PRIMARY KEY (VPE_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_VAR_PERIODE_VPE
    ADD CONSTRAINT FK_T_VAR_PERIODE_VPE_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table CATEGORY : T_CATEGORY_CTG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_CATEGORY_CTG(
    	CTG_ID   SERIAL NOT NULL ,
    	CTG_NAME VARCHAR (50) NOT NULL ,
    	CONSTRAINT PRK_T_CATEGORY_CTG PRIMARY KEY (CTG_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison CTG-CTG : T_L_CTG_CTG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_L_CTG_CTG(
    	CTG_ID                INT  NOT NULL ,
    	CTG_ID_T_CATEGORY_CTG INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_CTG_CTG PRIMARY KEY (CTG_ID,CTG_ID_T_CATEGORY_CTG)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_L_CTG_CTG
    ADD CONSTRAINT FK_T_L_CTG_CTG_CTG_ID FOREIGN KEY (CTG_ID)
    REFERENCES S_CATALOG.T_CATEGORY_CTG (CTG_ID);
     
    ALTER TABLE S_CATALOG.T_L_CTG_CTG
    ADD CONSTRAINT FK_T_L_CTG_CTG_CTG_ID_T_CATEGORY_CTG FOREIGN KEY (CTG_ID_T_CATEGORY_CTG)
    REFERENCES S_CATALOG.T_CATEGORY_CTG (CTG_ID);
     
     
    ------------------------------------------------------------
    -- Table de liaison OBJECT-CATEGORY : T_L_OBJ_CTG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_L_OBJ_CTG(
    	CTG_ID INT  NOT NULL ,
    	OBJ_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_OBJ_CTG PRIMARY KEY (CTG_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_L_OBJ_CTG
    ADD CONSTRAINT FK_T_L_OBJ_CTG_CTG_ID FOREIGN KEY (CTG_ID)
    REFERENCES S_CATALOG.T_CATEGORY_CTG (CTG_ID);
     
    ALTER TABLE S_CATALOG.T_L_OBJ_CTG
    ADD CONSTRAINT FK_T_L_OBJ_CTG_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA USER
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table USER : T_USER_USR
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_USER_USR(
    	USR_ID        SERIAL NOT NULL ,
    	USR_CODE      D_A_USERCODE NOT NULL UNIQUE,
    	USR_LASTNAME  VARCHAR (100) NOT NULL ,
    	USR_FIRSTNAME VARCHAR (100) NOT NULL ,
    	ROL_ID        INT  NOT NULL ,
    	CONSTRAINT PRK_T_USER_USR PRIMARY KEY (USR_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_USER_USR
    ADD CONSTRAINT FK_T_USER_USR_ROL_ID FOREIGN KEY (ROL_ID)
    REFERENCES S_USER.T_ROLE_ROL (ROL_ID);
     
     
    ------------------------------------------------------------
    -- Table USER ALIAS : T_USER_ALIAS_USA
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_USER_ALIAS_USA(
    	USA_ID   SERIAL NOT NULL ,
    	USA_NAME VARCHAR (255) NOT NULL UNIQUE,
    	USR_ID   INT  NOT NULL ,
    	CONSTRAINT PRK_T_USER_ALIAS_USA PRIMARY KEY (USA_ID,USR_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_USER_ALIAS_USA
    ADD CONSTRAINT FK_T_USER_ALIAS_USA_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
     
    ------------------------------------------------------------
    -- Table USER EMAIL : T_EMAIL_EML
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_EMAIL_EML(
    	EML_ID    SERIAL NOT NULL ,
    	EML_EMAIL D_A_EMAIL NOT NULL UNIQUE,
    	USR_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_EMAIL_EML PRIMARY KEY (EML_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_EMAIL_EML
    ADD CONSTRAINT FK_T_EMAIL_EML_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
     
    ------------------------------------------------------------
    -- Table USER WEBSITE : T_WEBSITE_WEB
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_WEBSITE_WEB(
    	WEB_ID  SERIAL NOT NULL ,
    	WEB_URL D_A_WEBSITE NOT NULL ,
    	CONSTRAINT PRK_T_WEBSITE_WEB PRIMARY KEY (WEB_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison USER-WEBSITE : T_L_USR_WEB
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_L_USR_WEB(
    	USR_ID INT  NOT NULL ,
    	WEB_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_USR_WEB PRIMARY KEY (USR_ID,WEB_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_L_USR_WEB
    ADD CONSTRAINT FK_T_L_USR_WEB_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_USER.T_L_USR_WEB
    ADD CONSTRAINT FK_T_L_USR_WEB_WEB_ID FOREIGN KEY (WEB_ID)
    REFERENCES S_USER.T_WEBSITE_WEB (WEB_ID);
     
     
    ------------------------------------------------------------
    -- Table de liaison USER-COUNTRY : T_L_USR_CNY
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_L_USR_CNY(
    	USR_ID INT  NOT NULL ,
    	CNY_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_USR_CNY PRIMARY KEY (USR_ID,CNY_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_L_USR_CNY
    ADD CONSTRAINT FK_T_L_USR_CNY_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_USER.T_L_USR_CNY
    ADD CONSTRAINT FK_T_L_USR_CNY_CNY_ID FOREIGN KEY (CNY_ID)
    REFERENCES S_SITE.T_COUNTRY_CNY (CNY_ID);
     
     
    ------------------------------------------------------------
    -- Table USER ROLE : T_ROLE_ROL
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_ROLE_ROL(
    	ROL_ID   SERIAL NOT NULL ,
    	ROL_NAME VARCHAR (100) NOT NULL UNIQUE,
    	CONSTRAINT PRK_T_ROLE_ROL PRIMARY KEY (ROL_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison USER-TELESCOPE-SITE : T_L_USE
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_L_USE(
    	T_L_USE_MAIN                BOOL  NOT NULL ,
    	USR_ID                      INT  NOT NULL ,
    	TLS_ID                      INT  NOT NULL ,
    	SIT_ID                      INT  NOT NULL ,
    	TLP_ID                      INT  NOT NULL ,
    	OTA_ID                      INT  NOT NULL ,
    	SPG_ID                      INT  NOT NULL ,
    	SNR_ID                      INT  NOT NULL ,
    	SPM_EXPOSURE_START_DATETIME TIMESTAMP  NOT NULL ,
    	CONSTRAINT PRK_T_L_USE PRIMARY KEY (USR_ID,TLS_ID,SIT_ID,TLP_ID,OTA_ID,SPG_ID,SNR_ID,SPM_EXPOSURE_START_DATETIME)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_TLS_ID FOREIGN KEY (TLS_ID)
    REFERENCES S_SITE.T_TELESCOPE_SITE_TLS (TLS_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_SIT_ID FOREIGN KEY (SIT_ID)
    REFERENCES S_SITE.T_SITE_SIT (SIT_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_TLP_ID FOREIGN KEY (TLP_ID)
    REFERENCES S_TELESCOPE.T_TELESCOPE_TLP (TLP_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_OTA_ID FOREIGN KEY (OTA_ID)
    REFERENCES S_TELESCOPE.T_OPTICAL_TUBE_OTA (OTA_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_SPG_ID FOREIGN KEY (SPG_ID)
    REFERENCES S_TELESCOPE.T_SPECTROGRAPH_SPG (SPG_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_SNR_ID FOREIGN KEY (SNR_ID)
    REFERENCES S_TELESCOPE.T_SENSOR_SNR (SNR_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_SPM_EXPOSURE_START_DATETIME FOREIGN KEY (SPM_EXPOSURE_START_DATETIME)
    REFERENCES public.SCHEDULE(SPM_EXPOSURE_START_DATETIME);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA TELESCOPE
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table OPTICAL TUBE : T_OPTICAL_TUBE_OTA
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_OPTICAL_TUBE_OTA(
    	OTA_ID   SERIAL NOT NULL ,
    	OTA_NAME VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_OPTICAL_TUBE_OTA PRIMARY KEY (OTA_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SPECTROGRAPH : T_SPECTROGRAPH_SPG
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_SPECTROGRAPH_SPG(
    	SPG_ID   SERIAL NOT NULL ,
    	SPG_NAME VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_SPECTROGRAPH_SPG PRIMARY KEY (SPG_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SENSOR : T_SENSOR_SNR
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_SENSOR_SNR(
    	SNR_ID   SERIAL NOT NULL ,
    	SNR_NAME VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_SENSOR_SNR PRIMARY KEY (SNR_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table TELESCOPE : T_TELESCOPE_TLP
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_TELESCOPE_TLP(
    	TLP_ID   SERIAL NOT NULL ,
    	TLP_CODE VARCHAR (25)  ,
    	TLP_NAME VARCHAR (250) NOT NULL ,
    	OTA_ID   INT  NOT NULL ,
    	SPG_ID   INT  NOT NULL ,
    	SNR_ID   INT  NOT NULL ,
    	CONSTRAINT PRK_T_TELESCOPE_TLP PRIMARY KEY (TLP_ID,OTA_ID,SPG_ID,SNR_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_TELESCOPE.T_TELESCOPE_TLP
    ADD CONSTRAINT FK_T_TELESCOPE_TLP_OTA_ID FOREIGN KEY (OTA_ID)
    REFERENCES S_TELESCOPE.T_OPTICAL_TUBE_OTA (OTA_ID);
     
    ALTER TABLE S_TELESCOPE.T_TELESCOPE_TLP
    ADD CONSTRAINT FK_T_TELESCOPE_TLP_SPG_ID FOREIGN KEY (SPG_ID)
    REFERENCES S_TELESCOPE.T_SPECTROGRAPH_SPG (SPG_ID);
     
    ALTER TABLE S_TELESCOPE.T_TELESCOPE_TLP
    ADD CONSTRAINT FK_T_TELESCOPE_TLP_SNR_ID FOREIGN KEY (SNR_ID)
    REFERENCES S_TELESCOPE.T_SENSOR_SNR (SNR_ID);
     
     
     
    ------------------------------------------------------------
    -- SCHEMA SITE
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table COUNTRY : T_COUNTRY_CNY
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_COUNTRY_CNY(
    	CNY_ID      SERIAL NOT NULL ,
    	CNY_ISOCODE VARCHAR (2) NOT NULL UNIQUE,
    	CNY_NAME    VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_COUNTRY_CNY PRIMARY KEY (CNY_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SITE : T_SITE_SIT
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_SITE_SIT(
    	SIT_ID        SERIAL NOT NULL ,
    	SIT_CODE      D_A_SITECODE NOT NULL UNIQUE,
    	SIT_LATITUDE  D_N_LATITUDE NOT NULL ,
    	SIT_LONGITUDE D_N_LONGITUDE NOT NULL ,
    	SIT_ALTITUDE  D_N_ALTITUDE NOT NULL ,
    	CNY_ID        INT  NOT NULL ,
    	CONSTRAINT PRK_T_SITE_SIT PRIMARY KEY (SIT_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLES_SITE.T_SITE_SIT
    ADD CONSTRAINT FK_T_SITE_SIT_CNY_ID FOREIGN KEY (CNY_ID)
    REFERENCES S_SITE.T_COUNTRY_CNY (CNY_ID);
     
     
    ------------------------------------------------------------
    -- Table SITE ALIAS : T_SITE_ALIAS_SIA
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_SITE_ALIAS_SIA(
    	SIA_ID   SERIAL NOT NULL ,
    	SIA_NAME VARCHAR (100) NOT NULL ,
    	SIT_ID   INT  NOT NULL ,
    	CONSTRAINT PRK_T_SITE_ALIAS_SIA PRIMARY KEY (SIA_ID,SIT_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SITE.T_SITE_ALIAS_SIA
    ADD CONSTRAINT FK_T_SITE_ALIAS_SIA_SIT_ID FOREIGN KEY (SIT_ID)
    REFERENCES S_SITE.T_SITE_SIT (SIT_ID);
     
     
    ------------------------------------------------------------
    -- Table TELESCOPE-SITE : T_TELESCOPE_SITE_TLS
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_TELESCOPE_SITE_TLS(
    	TLS_ID                      SERIAL NOT NULL ,
    	SIT_ID                      INT  NOT NULL ,
    	TLP_ID                      INT  NOT NULL ,
    	OTA_ID                      INT  NOT NULL ,
    	SPG_ID                      INT  NOT NULL ,
    	SNR_ID                      INT  NOT NULL ,
    	SPM_EXPOSURE_START_DATETIME TIMESTAMP  NOT NULL ,
    	CONSTRAINT PRK_T_TELESCOPE_SITE_TLS PRIMARY KEY (TLS_ID,SIT_ID,TLP_ID,OTA_ID,SPG_ID,SNR_ID,SPM_EXPOSURE_START_DATETIME)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_SIT_ID FOREIGN KEY (SIT_ID)
    REFERENCES S_SITE.T_SITE_SIT (SIT_ID);
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_TLP_ID FOREIGN KEY (TLP_ID)
    REFERENCES S_TELESCOPE.T_TELESCOPE_TLP (TLP_ID);
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_OTA_ID FOREIGN KEY (OTA_ID)
    REFERENCES S_TELESCOPE.T_OPTICAL_TUBE_OTA (OTA_ID);
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_SPG_ID FOREIGN KEY (SPG_ID)
    REFERENCES S_TELESCOPE.T_SPECTROGRAPH_SPG (SPG_ID);
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_SNR_ID FOREIGN KEY (SNR_ID)
    REFERENCES S_TELESCOPE.T_SENSOR_SNR (SNR_ID);
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_SPM_EXPOSURE_START_DATETIME FOREIGN KEY (SPM_EXPOSURE_START_DATETIME)
    REFERENCES public.SCHEDULE (SPM_EXPOSURE_START_DATETIME);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA SPECTRUM
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table SPECTRUM : T_SPECTRUM_SPM
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_SPECTRUM_SPM(
    	SPM_ID                      SERIAL NOT NULL ,
    	SPM_FITS_FILE               VARCHAR (100) NOT NULL ,
    	SPM_HELIO_CORRECTION        D_N_HELIOCORRECTION NOT NULL ,
    	SPM_TELLURIC_CORRECTION     CHAR (50)  NOT NULL ,
    	SPM_COSMIC_REMOVAL          CHAR (50)  NOT NULL ,
    	SPM_NORMALISATION           CHAR (50)  NOT NULL ,
    	SPM_DISPLAY                 BOOL  NOT NULL ,
    	OBJ_ID                      INT  NOT NULL ,
    	EXPOSURE_TIME               INT  NOT NULL ,
    	TLS_ID                      INT  NOT NULL ,
    	SIT_ID                      INT  NOT NULL ,
    	TLP_ID                      INT  NOT NULL ,
    	OTA_ID                      INT  NOT NULL ,
    	SPG_ID                      INT  NOT NULL ,
    	SNR_ID                      INT  NOT NULL ,
    	SPM_EXPOSURE_START_DATETIME TIMESTAMP  NOT NULL ,
    	SPS_ID                      INT  NOT NULL ,
    	CONSTRAINT PRK_T_SPECTRUM_SPM PRIMARY KEY (SPM_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_TLS_ID FOREIGN KEY (TLS_ID)
    REFERENCES S_SITE.T_TELESCOPE_SITE_TLS (TLS_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_SIT_ID FOREIGN KEY (SIT_ID)
    REFERENCES S_SITE.T_SITE_SIT (SIT_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_TLP_ID FOREIGN KEY (TLP_ID)
    REFERENCES S_TELESCOPE.T_TELESCOPE_TLP (TLP_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_OTA_ID FOREIGN KEY (OTA_ID)
    REFERENCES S_TELESCOPE.T_OPTICAL_TUBE_OTA (OTA_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_SPG_ID FOREIGN KEY (SPG_ID)
    REFERENCES S_TELESCOPES.T_SPECTROGRAPH_SPG (SPG_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_SNR_ID FOREIGN KEY (SNR_ID)
    REFERENCES S_TELESCOPE.T_SENSOR_SNR (SNR_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_SPM_EXPOSURE_START_DATETIME FOREIGN KEY (SPM_EXPOSURE_START_DATETIME)
    REFERENCES public.SCHEDULE (SPM_EXPOSURE_START_DATETIME);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_SPS_ID FOREIGN KEY (SPS_ID)
    REFERENCES S_SPECTRUM.T_SPM_SERIE_SPS (SPS_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM RESOLVING POWER : T_RESOLVING_POWER_RPO
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_RESOLVING_POWER_RPO(
    	RPO_VALUE DECIMAL (6,2)  NOT NULL ,
    	SPM_ID    INT  NOT NULL ,
    	OBJ_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_RESOLVING_POWER_RPO PRIMARY KEY (SPM_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_RESOLVING_POWER_RPO
    ADD CONSTRAINT FK_T_RESOLVING_POWER_RPO_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
    ALTER TABLE S_SPECTRUM.T_RESOLVING_POWER_RPO
    ADD CONSTRAINT FK_T_RESOLVING_POWER_RPO_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM FLUX : T_FLUX_FLX
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_FLUX_FLX(
    	FLX_VALUE D_A_FLXVALUE NOT NULL ,
    	SPM_ID    INT  NOT NULL ,
    	OBJ_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_FLUX_FLX PRIMARY KEY (SPM_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_FLUX_FLX
    ADD CONSTRAINT FK_T_FLUX_FLX_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
    ALTER TABLE S_SPECTRUM.T_FLUX_FLX
    ADD CONSTRAINT FK_T_FLUX_FLX_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table héritée ECHELLE SPECTRUM : T_ECHELLE_SPECTRUM_ESP
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_ECHELLE_SPECTRUM_ESP(
    	ESP_ECHELLE_ORD CHAR (100)  NOT NULL ,
    	SPM_ID          INT  NOT NULL ,
    	OBJ_ID          INT  NOT NULL ,
    	CONSTRAINT PRK_T_ECHELLE_SPECTRUM_ESP PRIMARY KEY (SPM_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_ECHELLE_SPECTRUM_ESP
    ADD CONSTRAINT FK_T_ECHELLE_SPECTRUM_ESP_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
    ALTER TABLE S_SPECTRUM.T_ECHELLE_SPECTRUM_ESP
    ADD CONSTRAINT FK_T_ECHELLE_SPECTRUM_ESP_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM SERIES : T_SPM_SERIE_SPS
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_SPM_SERIE_SPS(
    	SPS_ID       SERIAL NOT NULL ,
    	SPS_ZIP_FILE VARCHAR (255) NOT NULL ,
    	CONSTRAINT PRK_T_SPM_SERIE_SPS PRIMARY KEY (SPS_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM SUBMISSION : T_L_SUBMIT_SPM
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_L_SUBMIT_SPM(
    	SPM_SUBMISSION_DATE DATE  NOT NULL ,
    	USR_ID              INT  NOT NULL ,
    	SPM_ID              INT  NOT NULL ,
    	OBJ_ID              INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_SUBMIT_SPM PRIMARY KEY (USR_ID,SPM_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_L_SUBMIT_SPM
    ADD CONSTRAINT FK_T_L_SUBMIT_SPM_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_SPECTRUM.T_L_SUBMIT_SPM
    ADD CONSTRAINT FK_T_L_SUBMIT_SPM_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
    ALTER TABLE S_SPECTRUM.T_L_SUBMIT_SPM
    ADD CONSTRAINT FK_T_L_SUBMIT_SPM_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM STATUS : T_STATUS_STA
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_STATUS_STA(
    	STA_ID                SERIAL NOT NULL ,
    	STA_VALUE             D_A_SPMSTATUS NOT NULL ,
    	SPM_MODIF_STATUS_DATE DATE  NOT NULL ,
    	USR_ID                INT  NOT NULL ,
    	SPM_ID                INT  NOT NULL ,
    	OBJ_ID                INT  NOT NULL ,
    	CONSTRAINT PRK_T_STATUS_STA PRIMARY KEY (STA_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_STATUS_STA
    ADD CONSTRAINT FK_T_STATUS_STA_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_SPECTRUM.T_STATUS_STA
    ADD CONSTRAINT FK_T_STATUS_STA_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
    ALTER TABLE S_SPECTRUM.T_STATUS_STA
    ADD CONSTRAINT FK_T_STATUS_STA_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ(OBJ_ID);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA WEBSITE
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table WEBSITE PAGES : T_WEBPAGE_WPG
    ------------------------------------------------------------
    CREATE TABLE S_WEBSITE.T_WEBPAGE_WPG(
    	WPG_ID      SERIAL NOT NULL ,
    	WPG_URL     VARCHAR (25) NOT NULL UNIQUE,
    	WPG_COMMENT VARCHAR (2000)   ,
    	WPG_UPDATE  TIMESTAMP  NOT NULL ,
    	WPG_DISPLAY BOOL  NOT NULL ,
    	OBJ_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_WEBPAGE_WPG PRIMARY KEY (WPG_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_WEBSITE.T_WEBPAGE_WPG
    ADD CONSTRAINT FK_T_WEBPAGE_WPG_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
     
     
    ------------------------------------------------------------
    -- Table : SCHEDULE
    ------------------------------------------------------------
    CREATE TABLE public.SCHEDULE(
    	SPM_EXPOSURE_START_DATETIME TIMESTAMP  NOT NULL ,
    	CONSTRAINT PRK_SCHEDULE PRIMARY KEY (SPM_EXPOSURE_START_DATETIME)
    ) WITHOUT OIDS;


    Voici mes remarques sur le MLD et le script :

    1 - Problème de présence de la clé WPG_ID comme clé étrangère dans la table T_OBJECT_OBJ. On ne devrait avoir que la clé OBJ_ID comme clé étrangère dans la table T_WEBPAGE_WPG.
    L'association est la suivante :
    [T_OBJECT_OBJ] -- 0,1 -- display -- 1,1 -- [T_WEBPAGE_WPG]

    2 - Dans la table T_OBJECT_ALIAS_OBA, la clé primaire composite (OBA_ID, OBJ_ID) semble inutile puisque la clé OBA_ID est artificielle.

    3 - Problème de présence de la clé VPE_ID comme clé étrangère dans la table T_H_VARIABLE_STAR. On ne devrait avoir que la clé OBJ_ID comme clé étrangère dans la table T_VAR_PERIODE_VPE.
    L'association est la suivante :
    [T_VARIABLE_STAR] -- 0,1 -- own -- 1,1 -- [T_VAR_PERIODE_VPE]

    4 - Il est inutile que les clés OTA_ID, SPG_ID et SNR_ID se retrouve comme clé primaire composite de T_TELESCOPE_TLP alors qu'il existe une clé artificielle (TLP_ID). D'autant plus que cette table peut posséder des doublons : un utilisateur peut posséder exactement la même configuration (tube optique/spectrographe/caméra) qu'un autre. Le problème ne vient-il pas de l'identification relative ?

    5 - Présence d'une clé primaire composite inutile dans T_SPECTRUM_SPM. SPM_ID étant une clé artificielle, il est à priori inutile d'y ajouter OBJ_ID.

    6 - Présence de 3 clés étrangères superflues dans T_SPECTRUM_SPM : OTA_ID, SPG_ID et SNR_ID. Comme TLP_ID est déjà une clé primaire artificielle de T_TELESCOPE_TLP, il n'y a pas de raison que la clé composite se propage dans T_SPECTRUM_SPM.

    7 - La clé SIT_ID comme clé étrangère à part entière dans T_SPECTRUM n'est sans doute pas nécessaire. L'association du site avec le spectre s'effectue par la clé TLS_ID.

    8 - Le logiciel a généré la table SCHEDULE dans le schéma public. Par conséquent, le champ SPM_EXPOSURE_START_TIME s'est répercuté dans de nombreuses tables adjacentes. Sa position "logique" serait dans la table T_SPECTRUM_SPM, avec une remontée possible dans d'autres tables comme T_TELESCOPE_SITE_TLS où elle permettrait d'horodater la présence d'un télescope sur un site à un moment donné.

    9 - Le bonhomme NULL arrive avec le champ SPS_ID dans la table T_SPECTRUM_SPM, du fait de l'appartenance ou non d'un spectre dans une série de spectres.
    L'association est la suivante :
    [T_SPM_SERIE_SPS] -- 1,n -- include -- 0,1 -- [T_SPECTRUM_SPM]
    Je pourrais l'éviter en passant la cardinalité 0,1 à 0,n, ce qui génèrerait une table intermédiaire.

    10 - Présence superflue de la clé OBJ_ID dans la table de statut des spectres T_STATUS_STA, sachant que la clé SPM_ID est déjà présente.

    11 - Dans T_TELESCOPE_SITE_TLS, les clés OTA_ID, SPG_ID et SNR_ID sont inutiles car il existe déjà une clé étrangère artificielle (TLP_ID).
    De même, la clé étrangère SPM_EXPOSURE_START_TIME est superflue car déjà présente dans la table T_SPECTRUM_SPM.
    La clé primaire de la table peut se réduire à TLS_ID, créée à cette intention.

    12 - Dans T_H_ECHELLE_SPECTRUM_ESP, la clé OBJ_ID semble inutile.

    13 - Dans T_RESOLVING_POWER_RPO, la clé OBJ_ID est inutile.

    14 - Dans T_FLUX_FLX, la clé OBJ_ID est inutile.

    15 - Présence de 3 clés superflues dans T_L_USE : OTA_ID, SPG_ID et SNR_ID. Comme TLP_ID est déjà une clé primaire artificielle de T_TELESCOPE_TLP, il n'y a pas de raison que la clé composite se propage dans T_SPECTRUM_SPM.
    Idem pour SIT_ID, déjà présente au travers de TLS_ID.
    La clé primaire peut se réduire. Il faut y inclure le champ SPM_EXPOSURE_START_TIME de T_SPECTRUM_SPM pour la rendre unique. Le seul problème est qu'il n'y a pas de lien entre T_SPECTRUM_SPM et T_L_USE ...

    16 - Dans T_L_SUBMIT, la clé OBJ_ID est sans doute superflue.

    Pour terminer, voici le script SQL que j'ai modifié et que je soumets à vos critiques :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
     
    -------------------------------------------------------------
    -- ARAS DATABASE v1.0.3 - PostgreSQL
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- SCHEMAS
    ------------------------------------------------------------
    CREATE SCHEMA S_SITE;
    CREATE SCHEMA S_USER;
    CREATE SCHEMA S_TELESCOPE;
    CREATE SCHEMA S_SPECTRUM;
    CREATE SCHEMA S_CATALOG;
    CREATE SCHEMA S_WEBSITE;
     
    ------------------------------------------------------------
    -- DOMAINS
    ------------------------------------------------------------
     
    -- Code of the observation site (ARAS code)
    CREATE DOMAIN D_A_SITECODE
    AS CHAR(6)
    CONSTRAINT CK_D_A_SITECODE CHECK (VALUE IS NOT NULL AND VALUE = UPPER(VALUE) AND VALUE ~* '#^[A-Z]{3}-[A-Z]{2}$#')
    COLLATE SQL_ASCII;
     
    -- Latitude of the observation site (BSS_LAT)
    CREATE DOMAIN D_N_LATITUDE
    AS NUMERIC(10,7)
    CONSTRAINT CK_D_N_LATITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -90 AND +90);
     
    -- Longitude of the observation site (BSS_LONG)
    CREATE DOMAIN D_N_LONGITUDE
    AS NUMERIC(10,7)
    CONSTRAINT CK_D_N_LONGITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN 0 AND 360);
     
    -- Altitude of the observation site (BSS_ELEV)
    CREATE DOMAIN D_N_ALTITUDE
    AS NUMERIC(6,2)
    CONSTRAINT CK_D_N_ALTITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN 0 AND 9000);
     
    -- User Email
    CREATE DOMAIN D_A_EMAIL
    AS VARCHAR(255)
    CONSTRAINT CK_D_A_EMAIL CHECK (VALUE IS NOT NULL AND VALUE = LOWER(VALUE) AND VALUE ~* '(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])')
    COLLATE SQL_ASCII;
     
    -- User Website
    CREATE DOMAIN D_A_WEBSITE
    AS VARCHAR(255)
    CONSTRAINT CK_D_A_WEBSITE CHECK (VALUE IS NOT NULL AND  VALUE = LOWER(VALUE) AND VALUE ~* '@^(http\:\/\/|https\:\/\/)?([a-z0-9][a-z0-9\-]*\.)+[a-z0-9][a-z0-9\-]*$@i')
    COLLATE SQL_ASCII;
     
    -- User Code (ARAS)
    CREATE DOMAIN D_A_USERCODE
    AS CHAR(3)
    CONSTRAINT CK_D_A_USERCODE CHECK (VALUE IS NOT NULL AND VALUE = UPPER(VALUE) AND VALUE ~* '#^[A-Z]{3}$#')
    COLLATE SQL_ASCII;
     
    -- Right Ascension of an object
    CREATE DOMAIN D_N_RIGHTASCENSION
    AS NUMERIC(10,7)
    CONSTRAINT CK_D_N_RIGHTASCENSION CHECK (VALUE IS NOT NULL AND VALUE BETWEEN 0 AND 360);
     
    -- Declination of an object
    CREATE DOMAIN D_N_DECLINATION
    AS NUMERIC(8,6)
    CONSTRAINT CK_D_N_DECLINATION CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -90 AND 90);
     
    -- Magnitude of an object
    CREATE DOMAIN D_N_MAGNITUDE
    AS NUMERIC(4,2)
    CONSTRAINT CK_D_N_MAGNITUDE CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -27 AND 30);
     
    -- Spectrum Status
    CREATE DOMAIN D_A_SPMSTATUS
    AS VARCHAR(50)
    CONSTRAINT CK_D_A_SPMSTATUS CHECK (VALUE IS NOT NULL AND VALUE IN ('validated','in progress','refused'))
    COLLATE SQL_ASCII;
     
    -- Flux calibration
    CREATE DOMAIN D_A_FLXVALUE
    AS VARCHAR(30)
    DEFAULT 'relative'
    CONSTRAINT CK_D_A_FLXVALUE CHECK (VALUE IS NOT NULL AND VALUE IN 'relative', 'erg/cm^2/s/A')
    COLLATE SQL_ASCII;
     
    -- Applied Heliocentric Correction (BSS_VHEL)
    CREATE DOMAIN D_N_HELIOCORRECTION
    AS DECIMAL(6,3)
    DEFAULT 0.0
    CONSTRAINT CK_D_N_HELIOCORRECTION CHECK (VALUE IS NOT NULL AND VALUE BETWEEN -200 AND 200);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA CATALOG
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table OBJECT : T_OBJECT_OBJ
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_OBJECT_OBJ(
    	OBJ_ID      SERIAL NOT NULL ,
    	OBJ_DISPLAY BOOL  NOT NULL ,
    	CONSTRAINT PRK_T_OBJECT_OBJ PRIMARY KEY (OBJ_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table OBJECT ALIAS : T_OBJECT_ALIAS_OBA
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_OBJECT_ALIAS_OBA(
    	OBA_ID      SERIAL NOT NULL ,
    	OBA_NAME    VARCHAR (50) NOT NULL ,
    	USUAL_ALIAS BOOL  NOT NULL ,
    	OBJ_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_OBJECT_ALIAS_OBA PRIMARY KEY (OBA_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_OBJECT_ALIAS_OBA
    ADD CONSTRAINT FK_T_OBJECT_ALIAS_OBA_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table OBJECT COORDINATES : T_COORDINATE_COO
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_COORDINATE_COO(
    	COO_ID      SERIAL NOT NULL ,
    	COO_RA      D_N_RIGHTASCENSION NOT NULL ,
    	COO_DEC     D_N_DECLINATION NOT NULL ,
    	COO_EQUINOX FLOAT  NOT NULL ,
    	COO_SYS     CHAR (4)  NOT NULL ,
    	OBJ_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_COORDINATE_COO PRIMARY KEY (COO_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_COORDINATE_COO
    ADD CONSTRAINT FK_T_COORDINATE_COO_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table MAGNITUDE TYPE : T_MAG_TYPE_MGT
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_MAG_TYPE_MGT(
    	MGT_ID    SERIAL NOT NULL ,
    	MGT_VALUE VARCHAR (50) NOT NULL ,
    	CONSTRAINT PRK_T_MAG_TYPE_MGT PRIMARY KEY (MGT_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table MAGNITUDE : T_MAGNITUDE_MAG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_MAGNITUDE_MAG(
    	MAG_ID    SERIAL NOT NULL ,
    	MAG_VALUE D_N_MAGNITUDE NOT NULL ,
    	OBJ_ID    INT  NOT NULL ,
    	MGT_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_MAGNITUDE_MAG PRIMARY KEY (MAG_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_MAGNITUDE_MAG
    ADD CONSTRAINT FK_T_MAGNITUDE_MAG_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
    ALTER TABLE S_CATALOG.T_MAGNITUDE_MAG
    ADD CONSTRAINT FK_T_MAGNITUDE_MAG_MGT_ID FOREIGN KEY (MGT_ID)
    REFERENCES S_CATALOG.T_MAG_TYPE_MGT (MGT_ID);
     
     
    ------------------------------------------------------------
    -- Table héritée STAR : T_STAR_STR
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_STAR_STR(
    	OBJ_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_STAR_STR PRIMARY KEY (OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_STAR_STR
    ADD CONSTRAINT FK_T_STAR_STR_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table héritée VARIABLE STAR : T_VARIABLE_STAR_VST
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_VARIABLE_STAR_VST(
    	OBJ_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_VARIABLE_STAR_VST PRIMARY KEY (OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_VARIABLE_STAR_VST
    ADD CONSTRAINT FK_T_VARIABLE_STAR_VST_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table VARIABLE PERIODE : T_VAR_PERIODE_VPE
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_VAR_PERIODE_VPE(
    	VPE_ID    SERIAL NOT NULL ,
    	VPE_VALUE INT  NOT NULL ,
    	OBJ_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_VAR_PERIODE_VPE PRIMARY KEY (VPE_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_VAR_PERIODE_VPE
    ADD CONSTRAINT FK_T_VAR_PERIODE_VPE_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
    ------------------------------------------------------------
    -- Table CATEGORY : T_CATEGORY_CTG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_CATEGORY_CTG(
    	CTG_ID   SERIAL NOT NULL ,
    	CTG_NAME VARCHAR (50) NOT NULL ,
    	CONSTRAINT PRK_T_CATEGORY_CTG PRIMARY KEY (CTG_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison CTG-CTG : T_L_CTG_CTG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_L_CTG_CTG(
    	CTG_ID                INT  NOT NULL ,
    	CTG_ID_T_CATEGORY_CTG INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_CTG_CTG PRIMARY KEY (CTG_ID,CTG_ID_T_CATEGORY_CTG)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_L_CTG_CTG
    ADD CONSTRAINT FK_T_L_CTG_CTG_CTG_ID FOREIGN KEY (CTG_ID)
    REFERENCES S_CATALOG.T_CATEGORY_CTG (CTG_ID);
     
    ALTER TABLE S_CATALOG.T_L_CTG_CTG
    ADD CONSTRAINT FK_T_L_CTG_CTG_CTG_ID_T_CATEGORY_CTG FOREIGN KEY (CTG_ID_T_CATEGORY_CTG)
    REFERENCES S_CATALOG.T_CATEGORY_CTG (CTG_ID);
     
     
    ------------------------------------------------------------
    -- Table de liaison OBJECT-CATEGORY : T_L_OBJ_CTG
    ------------------------------------------------------------
    CREATE TABLE S_CATALOG.T_L_OBJ_CTG(
    	CTG_ID INT  NOT NULL ,
    	OBJ_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_OBJ_CTG PRIMARY KEY (CTG_ID,OBJ_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_CATALOG.T_L_OBJ_CTG
    ADD CONSTRAINT FK_T_L_OBJ_CTG_CTG_ID FOREIGN KEY (CTG_ID)
    REFERENCES S_CATALOG.T_CATEGORY_CTG (CTG_ID);
     
    ALTER TABLE S_CATALOG.T_L_OBJ_CTG
    ADD CONSTRAINT FK_T_L_OBJ_CTG_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA USER
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table USER : T_USER_USR
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_USER_USR(
    	USR_ID        SERIAL NOT NULL ,
    	USR_CODE      D_A_USERCODE NOT NULL UNIQUE,
    	USR_LASTNAME  VARCHAR (100) NOT NULL ,
    	USR_FIRSTNAME VARCHAR (100) NOT NULL ,
    	ROL_ID        INT  NOT NULL ,
    	CONSTRAINT PRK_T_USER_USR PRIMARY KEY (USR_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_USER_USR
    ADD CONSTRAINT FK_T_USER_USR_ROL_ID FOREIGN KEY (ROL_ID)
    REFERENCES S_USER.T_ROLE_ROL (ROL_ID);
     
     
    ------------------------------------------------------------
    -- Table USER ALIAS : T_USER_ALIAS_USA
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_USER_ALIAS_USA(
    	USA_ID   SERIAL NOT NULL ,
    	USA_NAME VARCHAR (255) NOT NULL UNIQUE,
    	USR_ID   INT  NOT NULL ,
    	CONSTRAINT PRK_T_USER_ALIAS_USA PRIMARY KEY (USA_ID,USR_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_USER_ALIAS_USA
    ADD CONSTRAINT FK_T_USER_ALIAS_USA_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
     
    ------------------------------------------------------------
    -- Table USER EMAIL : T_EMAIL_EML
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_EMAIL_EML(
    	EML_ID    SERIAL NOT NULL ,
    	EML_EMAIL D_A_EMAIL NOT NULL UNIQUE,
    	USR_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_EMAIL_EML PRIMARY KEY (EML_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_EMAIL_EML
    ADD CONSTRAINT FK_T_EMAIL_EML_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
     
    ------------------------------------------------------------
    -- Table USER WEBSITE : T_WEBSITE_WEB
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_WEBSITE_WEB(
    	WEB_ID  SERIAL NOT NULL ,
    	WEB_URL D_A_WEBSITE NOT NULL ,
    	CONSTRAINT PRK_T_WEBSITE_WEB PRIMARY KEY (WEB_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison USER-WEBSITE : T_L_USR_WEB
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_L_USR_WEB(
    	USR_ID INT  NOT NULL ,
    	WEB_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_USR_WEB PRIMARY KEY (USR_ID,WEB_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_L_USR_WEB
    ADD CONSTRAINT FK_T_L_USR_WEB_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_USER.T_L_USR_WEB
    ADD CONSTRAINT FK_T_L_USR_WEB_WEB_ID FOREIGN KEY (WEB_ID)
    REFERENCES S_USER.T_WEBSITE_WEB (WEB_ID);
     
     
    ------------------------------------------------------------
    -- Table de liaison USER-COUNTRY : T_L_USR_CNY
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_L_USR_CNY(
    	USR_ID INT  NOT NULL ,
    	CNY_ID INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_USR_CNY PRIMARY KEY (USR_ID,CNY_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_L_USR_CNY
    ADD CONSTRAINT FK_T_L_USR_CNY_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_USER.T_L_USR_CNY
    ADD CONSTRAINT FK_T_L_USR_CNY_CNY_ID FOREIGN KEY (CNY_ID)
    REFERENCES S_SITE.T_COUNTRY_CNY (CNY_ID);
     
     
    ------------------------------------------------------------
    -- Table USER ROLE : T_ROLE_ROL
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_ROLE_ROL(
    	ROL_ID   SERIAL NOT NULL ,
    	ROL_NAME VARCHAR (100) NOT NULL UNIQUE,
    	CONSTRAINT PRK_T_ROLE_ROL PRIMARY KEY (ROL_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison USER-TELESCOPE-SITE : T_L_USE
    ------------------------------------------------------------
    CREATE TABLE S_USER.T_L_USE(
    	T_L_USE_MAIN                BOOL  NOT NULL ,
    	USR_ID                      INT  NOT NULL ,
    	TLS_ID                      INT  NOT NULL ,
    	SPM_EXPOSURE_START_DATETIME TIMESTAMP  NOT NULL ,
    	CONSTRAINT PRK_T_L_USE PRIMARY KEY (USR_ID,TLS_ID,SPM_EXPOSURE_START_DATETIME)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_TLS_ID FOREIGN KEY (TLS_ID)
    REFERENCES S_SITE.T_TELESCOPE_SITE_TLS (TLS_ID);
     
    ALTER TABLE S_USER.T_L_USE
    ADD CONSTRAINT FK_T_L_USE_SPM_EXPOSURE_START_DATETIME FOREIGN KEY (SPM_EXPOSURE_START_DATETIME)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_EXPOSURE_START_DATETIME);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA TELESCOPE
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table OPTICAL TUBE : T_OPTICAL_TUBE_OTA
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_OPTICAL_TUBE_OTA(
    	OTA_ID   SERIAL NOT NULL ,
    	OTA_NAME VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_OPTICAL_TUBE_OTA PRIMARY KEY (OTA_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SPECTROGRAPH : T_SPECTROGRAPH_SPG
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_SPECTROGRAPH_SPG(
    	SPG_ID   SERIAL NOT NULL ,
    	SPG_NAME VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_SPECTROGRAPH_SPG PRIMARY KEY (SPG_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SENSOR : T_SENSOR_SNR
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_SENSOR_SNR(
    	SNR_ID   SERIAL NOT NULL ,
    	SNR_NAME VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_SENSOR_SNR PRIMARY KEY (SNR_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table TELESCOPE : T_TELESCOPE_TLP
    ------------------------------------------------------------
    CREATE TABLE S_TELESCOPE.T_TELESCOPE_TLP(
    	TLP_ID   SERIAL NOT NULL ,
    	TLP_CODE VARCHAR (25)  ,
    	TLP_NAME VARCHAR (250) NOT NULL ,
    	OTA_ID   INT  NOT NULL ,
    	SPG_ID   INT  NOT NULL ,
    	SNR_ID   INT  NOT NULL ,
    	CONSTRAINT PRK_T_TELESCOPE_TLP PRIMARY KEY (TLP_ID,OTA_ID,SPG_ID,SNR_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_TELESCOPE.T_TELESCOPE_TLP
    ADD CONSTRAINT FK_T_TELESCOPE_TLP_OTA_ID FOREIGN KEY (OTA_ID)
    REFERENCES S_TELESCOPE.T_OPTICAL_TUBE_OTA (OTA_ID);
     
    ALTER TABLE S_TELESCOPE.T_TELESCOPE_TLP
    ADD CONSTRAINT FK_T_TELESCOPE_TLP_SPG_ID FOREIGN KEY (SPG_ID)
    REFERENCES S_TELESCOPE.T_SPECTROGRAPH_SPG (SPG_ID);
     
    ALTER TABLE S_TELESCOPE.T_TELESCOPE_TLP
    ADD CONSTRAINT FK_T_TELESCOPE_TLP_SNR_ID FOREIGN KEY (SNR_ID)
    REFERENCES S_TELESCOPE.T_SENSOR_SNR (SNR_ID);
     
     
     
    ------------------------------------------------------------
    -- SCHEMA SITE
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table COUNTRY : T_COUNTRY_CNY
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_COUNTRY_CNY(
    	CNY_ID      SERIAL NOT NULL ,
    	CNY_ISOCODE VARCHAR (2) NOT NULL UNIQUE,
    	CNY_NAME    VARCHAR (100) NOT NULL ,
    	CONSTRAINT PRK_T_COUNTRY_CNY PRIMARY KEY (CNY_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table SITE : T_SITE_SIT
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_SITE_SIT(
    	SIT_ID        SERIAL NOT NULL ,
    	SIT_CODE      D_A_SITECODE NOT NULL UNIQUE,
    	SIT_LATITUDE  D_N_LATITUDE NOT NULL ,
    	SIT_LONGITUDE D_N_LONGITUDE NOT NULL ,
    	SIT_ALTITUDE  D_N_ALTITUDE NOT NULL ,
    	CNY_ID        INT  NOT NULL ,
    	CONSTRAINT PRK_T_SITE_SIT PRIMARY KEY (SIT_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLES_SITE.T_SITE_SIT
    ADD CONSTRAINT FK_T_SITE_SIT_CNY_ID FOREIGN KEY (CNY_ID)
    REFERENCES S_SITE.T_COUNTRY_CNY (CNY_ID);
     
     
    ------------------------------------------------------------
    -- Table SITE ALIAS : T_SITE_ALIAS_SIA
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_SITE_ALIAS_SIA(
    	SIA_ID   SERIAL NOT NULL ,
    	SIA_NAME VARCHAR (100) NOT NULL ,
    	SIT_ID   INT  NOT NULL ,
    	CONSTRAINT PRK_T_SITE_ALIAS_SIA PRIMARY KEY (SIA_ID,SIT_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SITE.T_SITE_ALIAS_SIA
    ADD CONSTRAINT FK_T_SITE_ALIAS_SIA_SIT_ID FOREIGN KEY (SIT_ID)
    REFERENCES S_SITE.T_SITE_SIT (SIT_ID);
     
     
    ------------------------------------------------------------
    -- Table TELESCOPE-SITE : T_TELESCOPE_SITE_TLS
    ------------------------------------------------------------
    CREATE TABLE S_SITE.T_TELESCOPE_SITE_TLS(
    	TLS_ID                      SERIAL NOT NULL ,
    	SIT_ID                      INT  NOT NULL ,
    	TLP_ID                      INT  NOT NULL ,
    	CONSTRAINT PRK_T_TELESCOPE_SITE_TLS PRIMARY KEY (TLS_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_SIT_ID FOREIGN KEY (SIT_ID)
    REFERENCES S_SITE.T_SITE_SIT (SIT_ID);
     
    ALTER TABLE S_SITE.T_TELESCOPE_SITE_TLS
    ADD CONSTRAINT FK_T_TELESCOPE_SITE_TLS_TLP_ID FOREIGN KEY (TLP_ID)
    REFERENCES S_TELESCOPE.T_TELESCOPE_TLP (TLP_ID);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA SPECTRUM
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table SPECTRUM : T_SPECTRUM_SPM
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_SPECTRUM_SPM(
    	SPM_ID                      SERIAL NOT NULL ,
    	SPM_FITS_FILE               VARCHAR (100) NOT NULL ,
    	SPM_HELIO_CORRECTION        D_N_HELIOCORRECTION NOT NULL ,
    	SPM_TELLURIC_CORRECTION     CHAR (50)  NOT NULL ,
    	SPM_COSMIC_REMOVAL          CHAR (50)  NOT NULL ,
    	SPM_NORMALISATION           CHAR (50)  NOT NULL ,
    	SPM_DISPLAY                 BOOL  NOT NULL ,
    	OBJ_ID                      INT  NOT NULL ,
    	EXPOSURE_TIME               INT  NOT NULL ,
    	TLS_ID                      INT  NOT NULL ,
    	SPM_EXPOSURE_START_DATETIME TIMESTAMP  NOT NULL ,
    	CONSTRAINT PRK_T_SPECTRUM_SPM PRIMARY KEY (SPM_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);
     
    ALTER TABLE S_SPECTRUM.T_SPECTRUM_SPM
    ADD CONSTRAINT FK_T_SPECTRUM_SPM_TLS_ID FOREIGN KEY (TLS_ID)
    REFERENCES S_SITE.T_TELESCOPE_SITE_TLS (TLS_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM RESOLVING POWER : T_RESOLVING_POWER_RPO
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_RESOLVING_POWER_RPO(
    	RPO_VALUE DECIMAL (6,2)  NOT NULL ,
    	SPM_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_RESOLVING_POWER_RPO PRIMARY KEY (SPM_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_RESOLVING_POWER_RPO
    ADD CONSTRAINT FK_T_RESOLVING_POWER_RPO_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM FLUX : T_FLUX_FLX
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_FLUX_FLX(
    	FLX_VALUE D_A_FLXVALUE NOT NULL ,
    	SPM_ID    INT  NOT NULL ,
    	CONSTRAINT PRK_T_FLUX_FLX PRIMARY KEY (SPM_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_FLUX_FLX
    ADD CONSTRAINT FK_T_FLUX_FLX_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
     
    ------------------------------------------------------------
    -- Table héritée ECHELLE SPECTRUM : T_ECHELLE_SPECTRUM_ESP
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_ECHELLE_SPECTRUM_ESP(
    	ESP_ECHELLE_ORD CHAR (100)  NOT NULL ,
    	SPM_ID          INT  NOT NULL ,
    	CONSTRAINT PRK_T_ECHELLE_SPECTRUM_ESP PRIMARY KEY (SPM_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_ECHELLE_SPECTRUM_ESP
    ADD CONSTRAINT FK_T_ECHELLE_SPECTRUM_ESP_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM SERIES : T_SPM_SERIE_SPS
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_SPM_SERIE_SPS(
    	SPS_ID       SERIAL NOT NULL ,
    	SPS_ZIP_FILE VARCHAR (255) NOT NULL ,
    	CONSTRAINT PRK_T_SPM_SERIE_SPS PRIMARY KEY (SPS_ID)
    ) WITHOUT OIDS;
     
     
    ------------------------------------------------------------
    -- Table de liaison SPECTRUM-SERIES : T_L_SPS_SPM
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_L_SPS_SPM(
    	SPS_ID 			INT NOT NULL,
    	SPM_ID 			INT NOT NULL,
    	CONSTRAINT PRK_T_L_SPS_SPM PRIMARY KEY (SPS_ID,SPM_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_L_SPS_SPM
    ADD CONSTRAINT FK_T_L_SPS_SPM_SPS_ID FOREIGN KEY (SPS_ID)
    REFERENCES S_SPECTRUM.T_SPM_SERIE_SPS (SPS_ID);
     
    ALTER TABLE S_SPECTRUM.T_L_SPS_SPM
    ADD CONSTRAINT FK_T_L_SPS_SPM_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM SUBMISSION : T_L_SUBMIT_SPM
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_L_SUBMIT_SPM(
    	SPM_SUBMISSION_DATE DATE  NOT NULL ,
    	USR_ID              INT  NOT NULL ,
    	SPM_ID              INT  NOT NULL ,
    	CONSTRAINT PRK_T_L_SUBMIT_SPM PRIMARY KEY (USR_ID,SPM_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_L_SUBMIT_SPM
    ADD CONSTRAINT FK_T_L_SUBMIT_SPM_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_SPECTRUM.T_L_SUBMIT_SPM
    ADD CONSTRAINT FK_T_L_SUBMIT_SPM_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
     
    ------------------------------------------------------------
    -- Table SPECTRUM STATUS : T_STATUS_STA
    ------------------------------------------------------------
    CREATE TABLE S_SPECTRUM.T_STATUS_STA(
    	STA_ID                SERIAL NOT NULL ,
    	STA_VALUE             D_A_SPMSTATUS NOT NULL ,
    	SPM_MODIF_STATUS_DATE DATE  NOT NULL ,
    	USR_ID                INT  NOT NULL ,
    	SPM_ID                INT  NOT NULL ,
    	CONSTRAINT PRK_T_STATUS_STA PRIMARY KEY (STA_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_SPECTRUM.T_STATUS_STA
    ADD CONSTRAINT FK_T_STATUS_STA_USR_ID FOREIGN KEY (USR_ID)
    REFERENCES S_USER.T_USER_USR (USR_ID);
     
    ALTER TABLE S_SPECTRUM.T_STATUS_STA
    ADD CONSTRAINT FK_T_STATUS_STA_SPM_ID FOREIGN KEY (SPM_ID)
    REFERENCES S_SPECTRUM.T_SPECTRUM_SPM (SPM_ID);
     
     
     
     
    ------------------------------------------------------------
    -- SCHEMA WEBSITE
    ------------------------------------------------------------
     
    ------------------------------------------------------------
    -- Table WEBSITE PAGES : T_WEBPAGE_WPG
    ------------------------------------------------------------
    CREATE TABLE S_WEBSITE.T_WEBPAGE_WPG(
    	WPG_ID      SERIAL NOT NULL ,
    	WPG_URL     VARCHAR (25) NOT NULL UNIQUE,
    	WPG_COMMENT VARCHAR (2000)   ,
    	WPG_UPDATE  TIMESTAMP  NOT NULL ,
    	WPG_DISPLAY BOOL  NOT NULL ,
    	OBJ_ID      INT  NOT NULL ,
    	CONSTRAINT PRK_T_WEBPAGE_WPG PRIMARY KEY (WPG_ID)
    ) WITHOUT OIDS;
     
    ALTER TABLE S_WEBSITE.T_WEBPAGE_WPG
    ADD CONSTRAINT FK_T_WEBPAGE_WPG_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES S_CATALOG.T_OBJECT_OBJ (OBJ_ID);

    Merci par avance,
    Vincent
    Images attachées Images attachées  

  15. #35
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir Vincent,

    J’ai évidemment pas mal de remarques à faire, tant au niveau MCD qu’après. Je suis bien pris, aussi je ne poste pas pour le moment, mais cela viendra.

    Deux bricoles en passant :

    L’attribut TLP_CODE est manifestement un identifiant « utilisateur », ce qui n’est pas le cas dans votre MCD.

    L’entité-type SCHEDULE doit disparaître. Il suffit de faire figurer Un attribut de type DATE dans les entités-types qui en ont besoin, telle TELESCOPE_SITE, sur laquelle je reviendrai.

    Je suggérerai un bon coup de rasoir d’Ockham dans les attributs composant les clés primaires et étrangères, rendant vos tables inutilement obèses (par exemple, les attributs OTA_ID, SPG_ID, SNT_ID sont-ils indispensables dans la table SPECTRUM ?)

    A bientôt
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  16. #36
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonsoir François,

    Mon deuxième code est justement une tentative de remise au carré du script généré par JMerise. Comme vous me l'aviez suggéré, il est intéressant de mettre les mains dans le cambouis pour épurer les scripts et chercher à les optimiser. J'ai donc suivi votre conseil.

    J'ai modifié le script initial de la façon suivante :

    1 - déclaration des schémas
    2 - déclaration des domaines avec les règles de validation CHECK pour certains attributs, notamment ceux qui dépendent de mots-clé. A ce propos, si on déclare un attribut NOT NULL dans la création d'un domaine, est-il toujours utile d'indiquer le champ comme NOT NULL dans la création de la table qui le contient ? Est-ce redondant ? Mieux vaut-il faire l'inverse (NOT NULL dans la création de la table et aucune indication dans la création du domaine) ?
    3 - suppression de la table SCHEDULE
    4 - création de l'attribut SPM_EXPOSURE_START_DATETIME dans la table T_SPECTRUM_SPM. C'est à cet endroit qu'il me paraît le plus logique de le placer.
    5 - suppression des attributs apparaissant dans les clés primaires et étrangères quand une clé primaire artificielle existait déjà. C'est vrai que ça a permis un ménage incroyable...

    L'attribut TLP_CODE n'est pas obligatoire donc il ne fait pas un bon candidat pour une clé, à mon avis.
    Il pourrait le devenir si le besoin s'en fait sentir mais cela poserait quelques problèmes pratiques pour nous car, d'une part il n'existe pas de convention de nommage mis en place, d'autre part il existe déjà des doublons.

    La remontée des clés telles que OTA_ID, SPG_ID, SNR_ID ou SIT_ID dans les différentes tables comme membre d'une clé composite vient-elle des différentes identification relatives modélisées dans le MCD ?

    Enfin, je me demande si je ne vais pas créer une table de liaison entre T_SPECTRUM_SPM (les spectres) et T_SPM_SERIES_SPS (les séries de spectres). J'avais modélisé cette association de la façon suivante :
    [SERIE] -- 1,n -- intégrer -- 0,1 [SPECTRE]
    Mais cela fait passer nécessairement la clé primaire de la table [SERIE] dans la table [SPECTRE] comme clé étrangère. Etant donné que la plupart des SPECTRE n'appartient pas à une SERIE, je me retrouverai avec un champ contenant quasiment que NULL dans la table [SPECTRE]. Ca ne me paraît pas tolérable.
    En modélisant de la sorte :
    [SERIE] -- 1,n -- intégrer -- 0,n [SPECTRE]
    je créé une table intermédiaire qui supprime le NULL mais avec le risque qu'un SPECTRE apparaisse dans plus d'une SERIE, ce qui n'est pas possible.

    Vincent

  17. #37
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir Vincent,

    Je commence à regarder votre script SQL.

    Attention, pour qu’une clé étrangère de la table T2 puisse faire référence à la clé primaire de la table T1, encore faut-il que T1 air été définie.

    Ainsi, la déclaration de la table T_COUNTRY_CNY doit-elle précéder celle de la table T_SITE_SIT.
    Même chose pour la table T_L_USR_CNY.

    Corriger « ALTER TABLES_SITE.T_SITE_SIT » en « ALTER TABLE S_SITE.T_SITE_SIT »

    Je remets mon scaphrandre et plonge...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  18. #38
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    A nouveau :


    La déclaration de T_ROLE_ROL doit précéder celle de T_USER_USR


    Je replonge.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  19. #39
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir Vincent,

    Je commence à regarder votre script SQL.

    Attention, pour qu’une clé étrangère de la table T2 puisse faire référence à la clé primaire de la table T1, encore faut-il que T1 air été définie.

    Ainsi, la déclaration de la table T_COUNTRY_CNY doit-elle précéder celle de la table T_SITE_SIT.
    Même chose pour la table T_L_USR_CNY.

    Corriger « ALTER TABLES_SITE.T_SITE_SIT » en « ALTER TABLE S_SITE.T_SITE_SIT »

    _______________________

    La définition de T_ROLE_ROL doit précéder celle de T_USER_USR
    _______________________

    Du fait de la représentation :

    [T_OBJECT_OBJ] --0,1------------(Décrire)-----------1,1--[T_WEBPAGE_WPG]

    Alors {OBJ_ID} doit être clé alternative de T_WEBPAGE_WPG.


    Citation Envoyé par aras-vbo Voir le message
    3 - Problème de présence de la clé VPE_ID comme clé étrangère dans la table T_H_VARIABLE_STAR. On ne devrait avoir que la clé OBJ_ID comme clé étrangère dans la table T_VAR_PERIODE_VPE.

    L'association est la suivante :
    [T_VARIABLE_STAR] -- 0,1 -- own -- 1,1 -- [T_VAR_PERIODE_VPE]
    Par conformité au MLD, modifier ainsi le script SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ALTER TABLE T_VARIABLE_STAR_VST
    ADD CONSTRAINT FK_T_VARIABLE_STAR_VST_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES T_STAR_STR (OBJ_ID) ;
    ...
    ALTER TABLE T_VAR_PERIODE_VPE
    ADD CONSTRAINT FK_T_VAR_PERIODE_VPE_OBJ_ID FOREIGN KEY (OBJ_ID)
    REFERENCES T_VARIABLE_STAR_VST (OBJ_ID);


    Citation Envoyé par aras-vbo Voir le message
    Dans la table T_OBJECT_ALIAS_OBA, la clé primaire composite (OBA_ID, OBJ_ID) semble inutile puisque la clé OBA_ID est artificielle.
    Vous pouvez effectivement utiliser une clé singleton.


    Citation Envoyé par aras-vbo Voir le message
    4 - Il est inutile que les clés OTA_ID, SPG_ID et SNR_ID se retrouve comme clé primaire composite de T_TELESCOPE_TLP alors qu'il existe une clé artificielle (TLP_ID). D'autant plus que cette table peut posséder des doublons : un utilisateur peut posséder exactement la même configuration (tube optique/spectrographe/caméra) qu'un autre. Le problème ne vient-il pas de l'identification relative ?
    Si deux configurations peuvent être exactement les mêmes, le triplet OTA_ID, SPG_ID et SNR_ID ne peut pas clé candidate, donc virer l’identification relative.


    Citation Envoyé par aras-vbo Voir le message
    5 - Présence d'une clé primaire composite inutile dans T_SPECTRUM_SPM. SPM_ID étant une clé artificielle, il est à priori inutile d'y ajouter OBJ_ID.
    Techniquement, l’attribut OBJ_ID peut être évacué de la clé primaire de la table T_SPECTRUM_SPM. L’intérêt de ne pas le faire, a trait à la performance : clustering synchrone, pouvant se propager sur les tables dépendant de T_SPECTRUM_SPM. A cette occasion, je constate qu’un aimable inconscient a modifié la structure de mon article :


    Citation Envoyé par aras-vbo Voir le message
    6 - Présence de 3 clés étrangères superflues dans T_SPECTRUM_SPM : OTA_ID, SPG_ID et SNR_ID. Comme TLP_ID est déjà une clé primaire artificielle de T_TELESCOPE_TLP, il n'y a pas de raison que la clé composite se propage dans T_SPECTRUM_SPM.
    Comme déjà évoqué, les attributs OTA_ID, SPG_ID et SNR_ID n’ont rien à faire dans T_SPECTRUM_SPM.


    Citation Envoyé par aras-vbo Voir le message
    7 - La clé SIT_ID comme clé étrangère à part entière dans T_SPECTRUM n'est sans doute pas nécessaire. L'association du site avec le spectre s'effectue par la clé TLS_ID.
    Bien sûr, d’autant plus que la présence de SIT_ID dans la clé primaire de la table T_TELESCOPE_SITE_TLS. Pour la nième fois, je rappelle que, pour interdire la bilocation, la clé primaire de la table T_TELESCOPE_SITE_TLS doit être la paire {TLS_ID, durée_de_la_période_d’exposition}. La durée de période d’exposition fait l’objet d’un opérateur de Allen.


    Citation Envoyé par aras-vbo Voir le message
    8 - Le logiciel a généré la table SCHEDULE dans le schéma public. Par conséquent, le champ SPM_EXPOSURE_START_TIME s'est répercuté dans de nombreuses tables adjacentes. Sa position "logique" serait dans la table T_SPECTRUM_SPM, avec une remontée possible dans d'autres tables comme T_TELESCOPE_SITE_TLS où elle permettrait d'horodater la présence d'un télescope sur un site à un moment donné.
    La table SCHEDULE, et surtout les contraintes d’intégrité engendrées doivent disparaître. Combien de DBA ont passé des nuits à faire ça, en ayant assez d’insérer dans ce genre de table chaque date depuis l’origine des temp jusqu’à la consommation des siècles...


    Citation Envoyé par aras-vbo Voir le message
    9 - Le bonhomme NULL arrive avec le champ SPS_ID dans la table T_SPECTRUM_SPM, du fait de l'appartenance ou non d'un spectre dans une série de spectres.
    L'association est la suivante :
    [T_SPM_SERIE_SPS] -- 1,n -- include -- 0,1 -- [T_SPECTRUM_SPM]
    Je pourrais l'éviter en passant la cardinalité 0,1 à 0,n, ce qui générerait une table intermédiaire.
    Dans tous les cas, il faut évidemment une table interfaçant T_SPECTRUM_SPM et T_SPM_SERIE_SPS, donc votre table T_L_SPS_SPM est légitime. Par contre, vous devez évacuer l’attribut SPS_ID de la clé de cette table.


    Citation Envoyé par aras-vbo Voir le message
    10 - Présence superflue de la clé OBJ_ID dans la table de statut des spectres T_STATUS_STA, sachant que la clé SPM_ID est déjà présente.
    Certes. Par contre, {USR_ID} doit être clé candidate (conséquence de la cardinalité 1,1).


    Citation Envoyé par aras-vbo Voir le message
    11 - Dans T_TELESCOPE_SITE_TLS, les clés OTA_ID, SPG_ID et SNR_ID sont inutiles car il existe déjà une clé étrangère artificielle (TLP_ID).
    Cf. plus haut.


    Citation Envoyé par aras-vbo Voir le message
    De même, la clé étrangère SPM_EXPOSURE_START_TIME est superflue car déjà présente dans la table T_SPECTRUM_SPM.
    La clé primaire de la table peut se réduire à TLS_ID, créée à cette intention.
    Comme déjà évoqué, la table SCHEDULE doit dégager, mais je rappelle que, pour éviter la bilocation, la clé primaire (ou une clé alternative) de T_TELESCOPE_SITE_TLS doit être la paire {TLS_ID, durée_de_la_période_d’exposition}.



    Citation Envoyé par aras-vbo Voir le message
    12 - Dans T_H_ECHELLE_SPECTRUM_ESP, la clé OBJ_ID semble inutile.

    13 - Dans T_RESOLVING_POWER_RPO, la clé OBJ_ID est inutile.

    14 - Dans T_FLUX_FLX, la clé OBJ_ID est inutile.
    Dans les 3 cas, elle est inutile.


    Citation Envoyé par aras-vbo Voir le message
    15 - Présence de 3 clés superflues dans T_L_USE : OTA_ID, SPG_ID et SNR_ID. Comme TLP_ID est déjà une clé primaire artificielle de T_TELESCOPE_TLP, il n'y a pas de raison que la clé composite se propage dans T_SPECTRUM_SPM.
    Comme pour les autres tables, OTA_ID, SPG_ID et SNR_ID doivent dégager.


    Citation Envoyé par aras-vbo Voir le message
    Idem pour SIT_ID, déjà présente au travers de TLS_ID.
    Oui, même punition, même motif.


    Citation Envoyé par aras-vbo Voir le message
    La clé primaire peut se réduire. Il faut y inclure le champ SPM_EXPOSURE_START_TIME de T_SPECTRUM_SPM pour la rendre unique. Le seul problème est qu'il n'y a pas de lien entre T_SPECTRUM_SPM et T_L_USE ...
    « La clé primaire peut se réduire » : de la table T_L_USE ? Si la clé primaire de T_TELESCOPE_SITE_TLS est la paire {TLS_ID, durée_de_la_période_d’exposition}, alors T_L_USE en hérite, et donc de la durée.


    Citation Envoyé par aras-vbo Voir le message
    16 - Dans T_L_SUBMIT, la clé OBJ_ID est sans doute superflue.
    Oui.

    Je reprends mon immersion.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  20. #40
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonjour François,

    Merci pour votre plongée dans les abysses de mon script.
    Je vais faire une réponse en 2 posts, ce sera plus simple : un sur la forme, le deuxième sur le fond.


    Sur l'ordre des déclarations

    J'avais cru comprendre que l'utilisation de schémas permettait de passer outre les déclarations séquentielles...
    Je me reporte au livre SQL 4ème édition où il est dit :
    Les avantages de la notion de SCHEMA sont considérables : outre la modularisation des objets de la base (permettant de la répartir dans différentes "unités"), le schéma permet de gérer des privilèges (autorisations) de manière souple et efficace, mais aussi de créer de toutes pièves tous les éléments d'une base de données sans que l'ordre ait une importance.
    Plus loin, il est aussi indiqué qu'il est donc facile de créer des tables sans se soucier des contraintes d'intégrité référentielle.
    Ceci dit, je peux changer l'ordre des déclarations, si besoin.

Discussions similaires

  1. Gestion d'une suite de variables
    Par Gaetan_ dans le forum Langage
    Réponses: 24
    Dernier message: 04/08/2011, 13h08
  2. [MCD] Gestion des spectres
    Par rabah88 dans le forum Schéma
    Réponses: 1
    Dernier message: 13/07/2011, 23h04
  3. Réponses: 4
    Dernier message: 30/12/2005, 12h07
  4. Méthode optimale gestion nombre variable items?
    Par fredtheman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 14/08/2004, 21h19
  5. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo