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

Langage SQL Discussion :

est qu'il est recommandé de créer les champs de calcul, statistiques dans les tables ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut est qu'il est recommandé de créer les champs de calcul, statistiques dans les tables ?
    bonjour

    la question est dans l'intitulé
    j'ai une table client et une table dossier
    un client a un ou plusieurs dossier
    le dossier a plusieurs statuts : en suspension , actif ou bien résilié

    je dois faire dans mon application Java des statistiques sur le nombre de suspension d'un dossier donné ....etc

    est qu'il est recommandé de faire un champ nb_suspension dans la table ou bien un petit programme PL/SQL qui fait le calcul à chaque changement du statut
    au lieu de faire la mise à jour dans la table sur le champ nb_suspension ...etc



    autre question //
    j'ai une autre table facture , un dossier a une ou plusieurs factures ......
    pour chaque facture il y a une date (champ date de facture )

    dans l'application aussi je dois afficher dans chaque dossier la date de la première facture et la dernière facture , la même question, est que je fais 2 champs pour stocker la date de la première et la dernière facture dans la table dossier ou bien je les trouver à partir de la table facture avec SQL ou PL/SQL

    je sais que tous les solutions sont justes mais je cherche la meilleure solution (performance ....etc)

    avantages et inconvénients

    merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En principe, on ne stocke pas de données calculées.

    Ce principe peut être remis en cause si les performances se dégradent mais après avoir bien normalisé sa BDD, l'avoir bien indexée et toutes autres opérations d'optimisation sur les tables, vues, requêtes... et même code de l'application utilisatrice. Car remettre en cause ce principe constitue une dénormalisation de la BDD.

    Pour le premier besoin, les statistiques peuvent généralement être faites efficacement avec une requête SQL. Java prépare la requête et la soumet au SGBD qui renvoie la réponse.

    Pour le second besoin, là aussi une simple requête SQL donne le résultat.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    merci pour ta résponse , autre question , pour les clés est qu'il est recommandé de les regrouper dans une seule table pour minimiser le nombre de jointures entre les tables ??

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il ne faut pas avoir peur des jointures ; les SGBD sont particulièrement optimisés pour ça parce que c'est leur boulot, leur raison d'être : les relations entre les tables.

    Il doit y avoir une clé primaire par table :
    - Mono-colonne, le plus souvent un simple identifiant de type entier non nul non signé et auto-incrémenté, lorsque la table est issue d'une entité du MCD.
    - Multi-colonnes, constituée des identifiants des entités participant à une association du MCD, lorsque la table est issue d'une association du MCD. Ces identifiants sont également clés étrangères dans la table.

    Exemple...
    Règle de gestion :
    "Une personne peut participer à un projet et un projet peut voir participer plusieurs personnes."

    MCD :
    Personne -0,n----Participer----0,n- Projet

    Tables :
    Personne (prs_id, prs_nom, prs_prenom...)
    Projet (prj_id, prj_nom...)
    Participation (prt_id_personne, prt_id_projet)

    Les clés primaires sont soulignées, les clés étrangères sont en italique.

    Encore une fois, il faut d'abord normaliser au maximum puis n'envisager la dénormalisation que lorsque les performances se dégradent.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Il ne faut pas avoir peur des jointures ; les SGBD sont particulièrement optimisés pour ça parce que c'est leur boulot, leur raison d'être : les relations entre les tables.
    mais lorsque le nombre de jointures s'augmente , le temps d'exécution s'augmente aussi , j'ai par exemple 4 tables et je dois stocker des données volumineuse sur ma BD , une table client oû chaque client a plusieurs dossiers et une table dossier oû chaque dossier a plusieurs factures , une table facture et autre table litige, pour chaque facture il est possible de faire des litiges
    la solution la plus simple et la plus relationnelle est faire comme suit :
    Client ( client_id , ......)
    Dossier ( dos_id, client_id ......)
    Facture ( fct_id , dos_id , ...)
    Litige ( litige_id, fct_id, .....)

    mais pourquoi on ne fait pas comme ceci :

    client ( client_id , ...)
    dossier ( dos_id , ....)
    facture(fct_id , ....)
    litige ( litige_id , ...)

    et autre table Ref (red_id , client_id , dos_id , fct_id , litige_id )

    la deuxième est mieux si je veux par exemple extraitre les informations du client qui a le litige numero X mais il est moins relationnelle comme ça non ?

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le premier schéma est le plus habituel.
    Le deuxième est plus bizarre !
    Il en existe un troisième qui consiste à faire une identification relative qui propage les clés primaires de table en table :
    Client -0,n----Avoir----(1,1)- Dossier -0,n----Contenir----(1,1)- Facture -0,n----Entrainer----(1,1)- Litige

    Les cardinalités entre parenthèses note l'identification relative. Au niveau des tables, ça donne ceci :
    Client (client_id,...)
    Dossier (client_id, dossier_id,...)
    Facture (client_id, dossier_id, facture_id,...)
    Litige (client_id, dossier_id, facture_id, litige_id,...)

    Si tu cherches tous les litiges ou toutes les factures du client X, pas besoin de jointures !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    hmm tu me conseilles d'utiliser le premier schéma donc

    Client ( client_id , ......)
    Dossier ( dos_id, client_id ......)
    Facture ( fct_id , dos_id , ...)
    Litige ( litige_id, fct_id, .....)



    ou bien le deuxième qui propage les clés primaires de table en table

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Oui.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    ok , merci pour les réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. impossible de récupérer les valeurs de ma base dans les champs
    Par abdelkarim_1987 dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2013, 10h05
  2. Réponses: 4
    Dernier message: 18/09/2011, 14h50
  3. Réponses: 12
    Dernier message: 12/07/2011, 18h19
  4. Réponses: 4
    Dernier message: 18/08/2009, 17h37
  5. Réponses: 15
    Dernier message: 15/04/2008, 14h25

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