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

 Firebird Discussion :

Tables avec des relations & procédures dynamiques


Sujet :

Firebird

  1. #1
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 594
    Points
    594
    Par défaut Tables avec des relations & procédures dynamiques
    Est ce qu'il est possible de créer des tables avec les mêmes trigger les mêmes procedures les mêmes relations (avec FireBird) sans a avoir à les réécrire.
    exemple :
    des magasins pour une gestions des stocks de nouvelles tables pour la même structure les mêmes relations les mêmes procedures et les mêmes triggers.
    Merci.

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Il faut le faire mannuellement.

    Si ce n'est pas prévu c'est surtout qu'il est très rare de devoir le faire. Lorsqu'on a des tables identiques ou très semblables, il faut se poser la question si elles ne peuvent pas être fusionnées avec une colonne supplémentaire pour différencier les enregistrement qui auraient été dans la table 1 des enregistrements qui auraient étés dans la table2.

    Genre :
    Table 1 :ARTICLES_STOCK_MAGASIN1
    {ID_ART, LIBELLE, QUANTITE, ... }
    Table 2 :ARTICLES_STOCK_MAGASIN2
    {ID_ART, LIBELLE, QUANTITE, ... }
    N'est pas du tout optimisé et va poser plein de problemes par la suite pour la maintenance et les évolutions de la base.
    De plus il sera moins performant et plus difficile de faire des stats sur l'ensemble des magasins. De gérer la création d'un nouveau magasin etc...

    Ce qu'il vaut mieux :
    Table : MAGASIN
    {ID_MAG, NOM}
    Table :ARTICLE_STOCK
    {ID, FK_ID_MAG, ID_ART, LIBELLE, QUANTITE, ... }
    ID étant un numéro unique la clé primaire
    FK_ID_MAG une clé étrangère désignant le magasin
    ID_ART l'identifiant article (on créera un index non unique sur cette colonne)

    Avec cette méthode tout le stock se trouve dans une seule table. On peut très facilement ajouter/supprimer la gestion d'un magasin sans devoir toucher à la structure de la base.

    Donc à moins d'avoir une contrainte technique vous obligeant de duppliquer les tables, je vous conseil d'étudier votre modèle de données, pour qu'il colle plus à ce que doit être une base de données relationnelle.

  3. #3
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 594
    Points
    594
    Par défaut
    Désolé d'avoir donnée un exemple de stock (tu t'es investis à me le faire comprendre merci )

    En fait mes tables sont des ecritures comptables où chaque tables va représenter un dossier avec un exercice.
    Exemple : societe1_2004, societe2_2004, etc...
    Et c'est pour des comptables ou il peut avoir des dizaines de dossiers chaque année mais avec quelque tables en commun pour tous les dossiers.
    On peut toucher la barre des 500 000 enregistrements chaque année par table si on mettais tous les dossiers ensemble.
    C'est pour celà que j'ai penser qu'il fallait mieu les séparer. je ne sais plus maintenant.

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    D'un point de vue analyse il faut toutes les mettres dans la même table.

    Cette table aurait bien entendu une colonne "FK_ID_Dossier" (Clé étrangère vers la table des dossiers) qui te permettrait de ne pas mélanger les écritures.

    Ou même peut être (si tu n' as pas de table dossier) une colonne FK_ID_SOCIETE et une colonne FK_ID_EXERCICE.

    Donc ce qui ferait une table unique avec des triggers et procédures uniques. Bien plus facile à maintenir. L'unicité des informations et traitement c'est un des buts d'une analyse de la création d'une base de données. Cette étape s'appel la normalisation des données.

    Après en effet il peut arriver qu'on soit obliger de dénormaliser. Pour réduire ne nombre de table, pour améliorer certains traitements.

    La table contiendra 500 000 * 10 dossiers = environ 5 milions d'enregistrement. Ce qui commence à être une quantité respectable. Firebird / Interbase sont tailés pour ce genre de volume mais par contre il faut bien entendu être plus attentif aux traitements, requetes qui vont être effectués sur cette table.

    En d'autre terme tant que vous n'avez pas étudié la partie traitement sur cette table il n'y a aucunne raison de l'éclater en plusieures.

    Quand vous développerez vos procédures je vous conseil de générer vos 5 millions d'enregistrements afin de mieux apprécier vos optimisations.

  5. #5
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 594
    Points
    594
    Par défaut
    Merci.
    J'espère de ne pas paniquer avec une telle quantité de données.

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Commencez par l'analyse de vos besoins en terme de traitements et après vous y verrez plus clair et pourrez décidez des optimisations possibles de la base.
    La création d'index en est une mais la séparation des données dans des tables différentes peut en être une autre (un peu extreme à mon sens).

Discussions similaires

  1. [MySQL] Alimenter une table avec des champs generés dynamiquement
    Par m_jaz3 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/05/2013, 22h23
  2. réorganiser une table avec des variables dynamiques
    Par Stefan_H dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2007, 12h40
  3. [D7],[ADO] : ordonner une table avec des champs référencés
    Par iam dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/11/2006, 21h36
  4. [Oracle10] DROP TABLE avec des caractères bizarres
    Par molgow dans le forum Oracle
    Réponses: 1
    Dernier message: 04/10/2006, 08h49
  5. importer des tables avec les relations
    Par guigui5931 dans le forum Access
    Réponses: 5
    Dernier message: 23/06/2006, 12h14

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