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 Firebird Discussion :

Ajout dynamique dans une table


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut Ajout dynamique dans une table
    Bonjour,

    J'ai 3 tables :
    - OBJET: elle contient des informations sur des objets
    - INDICATEUR qui définit différents indicateurs de ces objets: longueur, largeur, hauteur.
    - INDICATEUR_VALEUR: contient la valeur d'un INDICATEUR pour un OBJET.

    Nom : IndicDyna.png
Affichages : 228
Taille : 17,0 Ko

    Lors de la création de la base, nous aurons 2 INDICATEUR et 1 OBJET, le contenu des tables sera le suivant:

    Table OBJET
    10 Cercle

    Table INDICATEUR
    1 Longueur
    2 Largeur

    Table INDICATEUR_VALEUR
    1 1 10 1.23
    2 1 10 2.36
    3 2 10 4.25
    4 2 10 5.25

    L'utilisateur aura ensuite la possibilité d'ajouter et supprimer des INDICATEUR (surface, volume...) dans l'interface: lors de l'ajout d'indicateurs, des enregistrements vides doivent être automatiquement crées dans INDICATEUR_VALEUR.

    Comment dois-je m'y prendre pour réaliser ceci ? Mon schéma de base est-il correct/optimal ?

    J'avais pensé ajouter des enregistrements dans INDICATEUR_VALEUR avec un trigger lors de l'insertion dans INDICATEUR. Est-ce une bonne solution ?

    Merci pour vos retours


    Delphi Berlin / FB 3.0

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Citation Envoyé par lefju cabro Voir le message
    L'utilisateur aura ensuite la possibilité d'ajouter et supprimer des INDICATEUR (surface, volume...) dans l'interface: lors de l'ajout d'indicateurs, des enregistrements vides doivent être automatiquement crées dans INDICATEUR_VALEUR.
    Comment dois-je m'y prendre pour réaliser ceci ?
    J'avais pensé ajouter des enregistrements dans INDICATEUR_VALEUR avec un trigger lors de l'insertion dans INDICATEUR.
    dans un Trigger, oui, mais pas lors de l'insertion (BEFORE INSERT) mais après (AFTER INSERT)

    Est-ce une bonne solution ?
    la seule chose qui me gène, vieux réflexe de personne qui a connu des disques de moins 50Mo c'est l'inutilité de lignes crées pour rien
    Donc, AMHA, le trigger s'il répond à la question "ajouter automatiquement des lignes lors de la création d'une nouvelle propriété (table INDICATEUR) n'est pas une bonne idée


    pour reprendre les données indiquées :
    Un cercle n'a pas de longueur ni de largeur mais un rayon se retrouverait donc avec plein de propriétés inutiles ! introduire Rayon dans la table INDICATEUR rajouterai à tout les types d'objets un RAYON inutile

    même les données que vous avez mis me pose problème ! vous avez un OBJET cercle code ID 10 or cet objet à 4 propriétés (INDICATEUR_VALEUR)! (2 longueurs, 2 largeurs) soit 3 de trop !
    1 1 10 1.23 << RAYON
    2 1 10 2.36 << Diamètre (soit 2* RAYON) c'était bien le double mais l'Indicateur_ID = 1 donc ce n'est pas le diamètre donc c'est un doublon de propriété
    3 2 10 4.25 << ne fait pas 2*1.23 donc ce n'est pas un diamètre mal nommé et une propriété plus qu'équivoque
    4 2 10 5.25 << cumul des 2 remarques plus haut


    un OBJET : un cercle de rayon 1.23 (avec une identification) à un Type (TYPEOBJET) Cercle et des propriétés (PROPRIETES) Rayon
    un OBJET : un carré de coté 2.4 à un type : Carré ou mieux Rectangle avec des propriétés longueur, largeur (spécificité du carré longueur=largeur) Carré est donc une classe de rectangle

    AMHA il manque quelque chose dans le schéma

    je partirai sur une base différente
    TYPEOBJET
    id description
    1 CERCLE
    2 RECTANGLE
    3 SPHERE

    PROPRIETES
    id description
    1 RAYON
    2 LONGUEUR
    3 LARGEUR

    PROPRIETESTYPES
    id idType idPropriété
    1 1 1
    2 2 2
    3 2 3
    4 3 1


    OBJETS
    id Nom type
    1 CERCLE_1 1
    2 CARRE_1 2
    3 RECTANGLE_1 2
    4 SPHERE_1 3
    5 CERCLE_2 1


    PROPRIETESOBJET
    id idobjet idptype valeur
    1 1 1 1.23 // rayon d'un cercle
    2 2 2 2.4 // coté d'un carré
    3 2 3 2.4 // inutile ?
    4 3 2 5.2 // longueur rectangle
    5 3 3 3 // largeur (ou hauteur) rectangle
    6 4 4 4.5 // rayon sphére
    7 5 1 0.5 // un autre cercle


    encore que : un carré un est rectangle particulier lui même étant un parallélogramme particulier (angles droits)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Bonjour SergioMaster,

    Merci pour votre réponse détaillée.

    dans un Trigger, oui, mais pas lors de l'insertion (BEFORE INSERT) mais après (AFTER INSERT)
    Oui je le pensais également comme cela.

    la seule chose qui me gène, vieux réflexe de personne qui a connu des disques de moins 50Mo c'est l'inutilité de lignes crées pour rien
    Donc, AMHA, le trigger s'il répond à la question "ajouter automatiquement des lignes lors de la création d'une nouvelle propriété (table INDICATEUR) n'est pas une bonne idée
    pour reprendre les données indiquées :
    Un cercle n'a pas de longueur ni de largeur mais un rayon se retrouverait donc avec plein de propriétés inutiles ! introduire Rayon dans la table INDICATEUR rajouterai à tout les types d'objets un RAYON inutile
    J'ai mal choisi mon exemple pour OBJET . Tous mes OBJET pourront être renseignés par tous les INDICATEUR disponibles car ils sont cohérents :
    Table OBJET
    10 Armoire
    11 Carton

    Table INDICATEUR
    1 Longueur
    2 Largeur

    Table INDICATEUR_VALEUR
    1 1 10 1.23 //longueur Armoire
    2 2 10 4.95 //largeur Armoire
    3 1 11 10.2 //longueur Carton
    4 2 11 9.25 //largeur Carton

    En rajoutant un INDICATEUR et avec le trigger sur le after Insert (initialisation -1) j'aurai:
    Table INDICATEUR
    1 Longueur
    2 Largeur
    3 Surface

    Table INDICATEUR_VALEUR
    1 1 10 1.23 //longueur Armoire
    2 2 10 4.95 //largeur Armoire
    3 1 11 10.2 //longueur Carton
    4 2 11 9.25 //largeur Carton
    5 3 10 -1 //surface Armoire
    6 3 11 -1 //surface Carton

    Dans ce cas, je n'aurais pas de ligne en plus (me semble-t-il).

    Est-ce que cela tient la route et optimisé ?

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par lefju cabro Voir le message
    J'ai mal choisi mon exemple pour OBJET
    c'est le moins que l'on puisse dire et m'est avis qu'il manque la hauteur plus que la surface (qui elle est normalement le produit largeur*longueur ,quoique avec des débords ce n'est pas forcément le cas)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Merci pour votre aide

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

Discussions similaires

  1. Ajouter champ dans une table ouverte
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 4
    Dernier message: 26/06/2007, 12h51
  2. Ajout ID dans une table
    Par n4rk0o dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2007, 18h24
  3. Ajout dynamique dans une liste <ul>
    Par sacados1 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/03/2007, 20h14
  4. Champ dynamique dans une table
    Par stef_078 dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 18h09
  5. ajout dynamique dans une listview
    Par k_boy dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 21/09/2006, 11h23

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