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

SQL Oracle Discussion :

[9i]Organisation de données + vue


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 50
    Points : 26
    Points
    26
    Par défaut [9i]Organisation de données + vue
    Bonjour,

    Voici mon dilème :
    Je suis en train de bosser sur la refonte d'un erp d'une ancienne techno vers une application java utilisant une base Oracle.

    L'application va comporter dans les 1000 tables.
    Nous souhaitons donc la découper en module pour en faciliter le developpement et la maintenance.
    Le but étant que le developpeur d'un module (qui aura forcement besoin d'acceder aux données des autres modules)
    ne requete pas sur toutes les tables de l'application.
    Cela necessiterait qu'il metrise tout le schéma.
    J'avais pour idée que chaque module ait son schema et qu'il mette a dispo aux autres modules des vues pour l'acces aux données de son module.
    Cela permetrait de masquer la complexité de chaque modules (genre une vue regroupant 3 tables avec moins de colonnes).
    J'ai fait quelques tests de performances pour l'utilisation des vues, mais mes résultat était décevant...
    Car la performance est aussi une priorité pour l'application.
    Qu'en pensez vous?

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Les vues, ca me parait pas faisable.
    Notamment pour la maj.
    Par contre tu peux creer tes tables sous différents users.
    Et creer des synonymes soit publics (pour tous les users), soit privés (pour un seul user)
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Citation Envoyé par 6rose
    Bonjour,
    J'ai fait quelques tests de performances pour l'utilisation des vues, mais mes résultat était décevant...
    La conclusion est un peu rapide, entre la manipulation d'une table et celle d'une vue basee sur cette table, la difference se joue probalement en nanosecondes. Autrement dit, si les performances sont mauvaises au travers de la vue, elles le seront tout autant au travers de la table, ce qui peux signifier des problemes de requetes mal ecrites, un datamodel mediocre, l'absence d'indexes, etc...

  4. #4
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Je suis d'accord avec plabrevo la lenteur ne s'explique pas par l'usage des vues qui fonctionnent très bien même en dblink entre bases.
    Mais j'adopterais la même solution que Garuda regrouper les tables en autant de users que de modules vu le nombre de tables annoncées environ 1000 et l'emploi de synonymes en public ou privé
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Merci pour toutes vos reponses.

    Les vues répond bien a mes attentes, car chaque module a le droit de modifier uniquement les données de son module (gestion faite coté java).

    Par contre mes pb de performances avec vue, sont des problème de plan de jointure ex :

    Module 1

    Tables : Gencod, Type_Gencod, ...


    Module 2

    Tables : Collecte, ....

    Le module 1 est responsable des données des gencod (type, libelle, etc, ...). C'est le referentiel. Le module 2 se contente de faire des collectes de gencod.

    L'idée c'est que le module 2 à besoin d'afficher les infos des gencod de sa collecte si le gencod est connu dans le module 1.

    la requete basique serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * 
    from Collecte c
    left outer join Gencod g on (g.gencod = c.gencod)
    inner join Type_Gencod  t on (g.type_id = t.type_id)
    Ca c'est performant pas de problème mais les modules ne sont pas séparé.
    PS : je n'ai bien sur pas utilisé *, c'est juste pour l'exemple.

    Maintenant je decide de faire une vue pour donner l'acces aux données du module 1 au module 2

    Je construit une vue qui contiendra les infos du gencod et sont type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create vue Vue_Gencod as
    select *
    from Gencod g
    inner join Type_Gencod  t on (g.type_id = t.type_id)
    La requete devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * 
    from Collecte c
    left outer join Vue_Gencod v on (v.gencod = c.gencod)
    Plus simple, et je peux filtrer dans la vue uniqement les colonnes dont le module 2 a besoin.

    La colonne gencod est indexé, l'index est bien utilisé dans la premiere requete sans la vue.

    Avec la vue, il fait un full scan sur la table Gencod, du coup les performances sont tres médiocre.

    Par contre si je fait un inner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * 
    from Collecte c
    inner join Vue_Gencod v on (v.gencod = c.gencod)
    La l'index est bien utilisé et c'est rapide.

    Voilà, j'espère avoir été assez précis

Discussions similaires

  1. Organiser les données d'un fichier
    Par virtuadrack dans le forum C
    Réponses: 29
    Dernier message: 01/05/2007, 08h44
  2. [MySQL] Organisation de données
    Par jeremy_chauvel dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/01/2007, 17h10
  3. Méta base de données, vues et ajout de tickets
    Par ner0lph dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 07/12/2006, 00h58
  4. tomcat, upload et organisation des donnèes
    Par Pikwik dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 05/09/2006, 10h59
  5. [SWT]organisation des données dans un gridlayout
    Par whilecoyote dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2005, 17h24

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