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 :

Injection de données API Jive


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Points : 23
    Points
    23
    Par défaut Injection de données API Jive
    Bonjour,

    Je viens à vous car je dois présenter un modèle de données pour une application, j'ai réalisé le travail ci dessous dont j'aurai souhaité avoir des retours.

    Tout d'abord cela doit répondre à une première problématique concernant les requêtes exposé ici : http://www.developpez.net/forums/d16...ation-requete/

    L'application récupère des données provenant d'une API (Jive), puis effectue des sélections sur des données afin de générer des graphiques et autres calculs.
    Je ne rentrerai pas dans les détails de l'alimentation car ce n'est pas le sujet, le but est de valider un modèle.

    Concernant le système de f"acets", il s'agit de filtres que l'utilisateur peut effectuer en fonction d'un département, d'un utilisateur, d'une location ou d'un container.

    Vous trouverez ci joint un document plus détaillé concernant la description de chaque table.

    Merci d'avance pour les avis apportés

    K



    Nom : Schema.jpg
Affichages : 604
Taille : 519,1 Ko
    Images attachées Images attachées

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il est très difficile de critiquer un modèle sans avoir de règles de gestion, ni même un début de description du contexte dans lequel elle est utilisée

    De plus l'application existe déjà ainsi que les requêtes, du coup les modifications éventuelles ne se feront qu'à la marge

    Du coup, qu'attendez vous comme remarque ?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Tout de même quelques commentaires de détail concernant les attributs des tables

    - toutes vos colonnes de type integer sont définies en BIGINT, on réserve habituellement ce format pour les cas où l'integer ne suffit pas c'est à dire quand on a besoin de plus de 4 milliards d'identifiants
    Je doute que ce soit le cas dans toutes vos tables. C'est un point de détail mais pourquoi charger inutilement le réseau et l'espace disque. Quand en plus il s'agit d'identifiants, il est préférable des les choisir les plus courts possibles.

    - un mot de passe prévu sur 100 caractères, ça fait beaucoup trop (on est sensés mémoriser un mot de passe)

    - ce genre de phrase dans la pièce jointe est suspecte :
    Un container peut contenir 1 ou plusieurs tags. Il n’est actuellement pas possible de
    récupérer la liste de tous les tags utilisés dans Jive. Ainsi, il faudra avant chaque insertion
    vérifier si le tag est bien présent dans la table TR_TAGS_TA avant de l’ajouter à la table de
    jointure TJ_GROUP_TAGS_GT

    Ce n'est pas ainsi qu'il faut procéder, mais installer des contraintes de type "reference" entre votre table issue de la relation et la table issue de l'entité-type, ainsi, c'est le SGBD qui garantira à 100% l'intégrité des données et non l'application qui ne saurait le faire aussi bien.

    - je ne comprends pas en quoi des triggers vont optimiser votre base de données (au mieux c'est +/- neutre, au pire c'est plutôt le contraire), que signifie ce § en fin de document, quel sera le rôle de ces triggers ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Hello,

    J'ai bien pris note de vos remarques et je pense que les 4 milliards d'entrées ne seront jamais atteintes. De même pour la taille du champ password, pour le reste, voici quelques explications concernant l'alimentation de la base de données. Il existe 3 axes de données qui viennent d'une API dont je vais expliquer le format ci dessous :
    - Utilisateurs
    - Containers
    - Analytics

    Utilisateurs

    L'API renvoie les données sous la forme suivante :
    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
    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
    {
      "id" : "52121",
      "followerCount" : 0,
      "followed" : false,
      "published" : "2016-09-26T16:03:59.253+0000",
      "updated" : "2016-10-10T09:12:12.850+0000",
      "displayName" : "Thibault. K",
      "mentionName" : "Thibault. K",
      "emails" : [ {
        "jive_label" : "Email",
        "primary" : true,
        "type" : "work",
        "value" : "K@mail.com",
        "jive_displayOrder" : 0,
        "jive_showSummaryLabel" : false
      } ],
      "followingCount" : 0,
      "directReportCount" : 0,
      "jive" : {
        "enabled" : true,
        "external" : false,
        "externalIdentities" : [ ],
        "federated" : false,
        "lastProfileUpdate" : "2016-10-10T09:12:00.537+0000",
        "lastAuthenticated" : "2016-10-10T09:00:00.342+0000",
        "level" : {
          "description" : "Level 0",
          "imageURI" : "",
          "name" : "Level 0",
          "points" : 0
        },
        "locale" : "fr_FR",
        "externalContributor" : false,
        "profile" : [ {
          "jive_label" : "Department",
          "value" : "Ventes",
          "jive_displayOrder" : 2,
          "jive_summaryDisplayOrder" : 1,
          "jive_showSummaryLabel" : true
        }, {
          "jive_label" : "Localisation",
          "value" : "Rennes",
          "jive_displayOrder" : 3,
          "jive_showSummaryLabel" : false
        } ],
        "sendable" : true,
        "timeZone" : "America/Los_Angeles",
        "username" : "k@mail.com",
        "visible" : true,
        "termsAndConditionsRequired" : false,
        "status" : "registered"
      },
      "name" : {
        "familyName" : "K",
        "formatted" : "Thibault. K",
        "givenName" : "Thibault."
      },
      "thumbnailId" : "1010",
      "initialLogin" : "2016-10-10T09:00:00.342+0000",
      "type" : "person",
      "typeCode" : 3
    }
    Par parse on peut récupérer les données qui nous intéressent pour remplir la table users, cependant les données département et localisation ne sont pas liées. Il faut donc remplir la table T_LOCATION_LO et T_DEPARTMENT_DE au fur et à mesure (si les données n'existent pas). C'est pour cela que je fais mention de triggers, car il faut faire la liaison entre le département Ventes et Rennes si cela n'est pas fait.


    Containers

    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
    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
    {
        "id" : "1020",
        "followerCount" : 1,
        "followed" : false,
        "published" : "2014-10-07T23:59:59.539+0000",
        "updated" : "2015-03-04T00:08:56.560+0000",
        "iconCss" : "jive-icon-group",
        "placeID" : "1300",
        "tags" : [ "blog", "documents", "files", "discussions", "polls", "projects", "extStreamActivities", "videos", "updates", "events", "ideas" ],
        "description" : " ",
        "displayName" : "community-assets",
        "name" : "Community Assets",
        "status" : "Active",
        "viewCount" : 38,
        "visibleToExternalContributors" : false,
        "placeTopics" : [ ],
        "creator" : {
          "id" : "2075",
          "displayName" : "Kathryn Everest",
          "emails" : [ {
            "jive_label" : "Email",
            "primary" : true,
            "type" : "work",
            "value" : "kathryn.everest@go.jivesoftware.com",
            "jive_displayOrder" : 0,
            "jive_showSummaryLabel" : false
          } ],
          "jive" : {
            "enabled" : true,
            "level" : {
              "description" : "Level 0",
              "imageURI" : "",
              "name" : "Level 0",
              "points" : 0
            },
            "externalContributor" : false,
            "username" : "kathryn",
            "visible" : true
          },
          "name" : {
            "familyName" : "Everest",
            "formatted" : "Kathryn Everest",
            "givenName" : "Kathryn"
          },
          "type" : "person",
          "typeCode" : 3
        },
        "groupType" : "OPEN",
        "memberCount" : 1,
        "extendedAuthorsEnabled" : false,
        "type" : "group",
        "typeCode" : 700
      }
    De même pour les tags, il se peut que les tags ne soient pas présents dans la table des T_TAGS_TA. Il faut donc les compléter les tags avec l'existant.

    Analytics
    Cette fois-ci les données sont sous la forme
    Action
    ContainerId
    UserId
    Date

    Le seul "hic" c'est que parfois une action n'a pas de containerId, il faut quand même stocker l'action car elle sert à calculer des rapports d'activités, pour cela on peut spécifier un Id de container à 0 (cas d'un login ou register par exemple)

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Le souci c'est que vos explications concernent essentiellement le "comment" or, la modélisation de la base de données répond à "qui" et "quoi"
    Rédigez votre dictionnaire de données et les règles de gestion sous la forme
    'R1 : un container est un.... qui .... ?"
    "R2 : toute commande possède au moins une ligne de commande"
    "R3 : une commande concerne un et un seul client"
    etc...
    En pensant à mentionner les contraintes d'intégrité fonctionnelles CIF, exemple
    Rx : Un utilisateur habilité à créer des profils, ne peut être en même temps habilité à administrer les habilitations"

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour koven,

    Un modèle physique est très peu porteur d'information sur les processus de fonctionnement d'un système d'information. Un modèle Conceptuel de données (MCD) serait un support plus explicite pour comprendre ton SI.

    Pour des outils de modélisation, tu peux consulter ici et ici

    Mais comme le souligne escartefigue, rien ne vaut les règles de gestions!

    Bonjour chez vous
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. [Executable]creation d'un batch pour une application
    Par tarik75 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/08/2005, 15h33
  3. [Tomcat] définir un port pour une application
    Par Mrlud dans le forum Tomcat et TomEE
    Réponses: 10
    Dernier message: 14/06/2005, 17h33
  4. [Compilation] A quel moment pour une application ?
    Par Rick1602 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/03/2004, 20h36

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