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

Discussion: Lien 0,n -- 1,n

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    novembre 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : novembre 2010
    Messages : 118
    Points : 127
    Points
    127

    Par défaut Lien 0,n -- 1,n

    Bonjour,
    C'est la première fois que ça m'arrive mais je doit faire un lien 0,n -- 1,n.
    Petite explication sur le pourquoi de ce lien assez rare finalement :
    Pour faire simple, j'avais un lien A -0,n----1,1- B avec la clé de A dans B mais on m'a dit que parfois (rare mais parfois) B pouvait avoir 2 voir 3 A !!! J'ai donc changé mon modèle avec le lien en -0,n----1,n-

    Mais ce type de lien se fait avec une table associative exactement comme le lien 0,n -- 0,n alors comment je garanti le 1 ?

    Merci

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    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 013
    Points : 31 729
    Points
    31 729
    Billets dans le blog
    5

    Par défaut

    Ma réponse donnée en chat à ypelissier :
    En toute rigueur, il faudrait créer une procédure pour qu'à l'insertion dans la table issue de l'entité-type située du côté du 1,n, une ligne soit ajoutée "en même temps" dans la table associative.
    On doit pouvoir aussi poser une contrainte CHECK ou une ASSERTION sur cette table. Et pour que la contrainte ne fasse pas planter les insertions, on est obligé du coup de passer par la procédure, ce qui sécurise la cohérence des données.
    Donc l'idée est de créer une procédure d'insertion d'une ligne en B qui insère en même temps une ligne dans la table associative. Il faut donc fournir à la procédure de quoi remplir la table associative, c'est à dire à minima la valeur de la clé étrangère référençant A.
    Et cette procédure peut être un trigger INSTEAD OF INSERTDu coup il faut aussi prévoir une assertion ou un trigger ON DELETE sur la table associative pour ne pas supprimer la dernière ligne référençant un B, sauf en cas de suppression du B (alors c'est le ON DELETE CASCADE de la clé étrangère qui devrait faire le boulot).
    Tout ce que je viens d'écrire est théorique parce que je ne l'ai jamais encore fait mais c'est le principe qui me vient à l'esprit.

    Je laisse les pros du SQL donner une réponse technique plus complète.
    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 habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    novembre 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : novembre 2010
    Messages : 118
    Points : 127
    Points
    127

    Par défaut Up

    Je me permet de remonter ce post...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    4 991
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 4 991
    Points : 10 230
    Points
    10 230

    Par défaut

    En fait, je pense que personne n'a répondu car il n'y a pas grand chose à ajouter à ce qu'a dit CinePhil

    Pour détailler un peu, vous pouvez créer une vue faisant la jointure entre les tables A et B.
    Placez ensuite un trigger INSTEAD OF INSERT sur cette vue pour répartir les données entre les table A et B lors de la création d'une (ou plusieurs) ligne(s) dans B
    il faudra aussi prévoir un trigger INSTEAD OF DELETE pour gérer les suppressions de A (ne pas supprimer le dernier A rattaché à B comme indiqué par CinePhil)
    Interdisez l'insertion directe dans B par un DENY, et la suppression directe dans A
    Cela devrait suffire.

    Pour aller plus loin, vous pouvez faire en sorte que cette vue gère également les autres manipulations possibles, et ne passer que par cette vue pour tout opérations depuis le programme client.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    novembre 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : novembre 2010
    Messages : 118
    Points : 127
    Points
    127

    Par défaut

    Merci beaucoup, je vais faire cela...

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

Discussions similaires

  1. [FLASH 5] Comment créer un lien hypertexte
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 30/03/2006, 13h26
  2. [Kylix] pb avec lien symbolique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 23h16
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 22h30
  4. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 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