Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Systèmes d'Information

  • Notions mathématiques
  • Calcul relationnel
  • Algèbre relationnelle
  • Langage de requêtes
  • Arbre de requêtes
  • Exercices
  • Introduction
  • Commandes de bases
  • Langage de définition de données (LDD)
  • Langage de manipulation de données (LMD)
  • Types de données
  • Exercice
  • Présentation
  • Calcul relationnel
  • Algèbre relationnelle
  • Division relationnelle
  • Relation
  • Fonction
  • Application
  • Injection
  • Surjection
  • Bijection
  • Association
    • cas possibles
    • Exercices
  • Exemples
  • Dépendances fonctionnelles
  • Décomposition de relations
  • Inférence logique
  • Normalisation
  • Aux pays des bières
  • Modélisation
  • Exercices
  • Liste des projets
  • Aux pays des bières
  • Au Tournoi des six nations
  • Salles de concerts
  • Généralités
  • Langage SQL
  • Modèle relationnel
  • Généralités
  • SQL
  • Algèbre relationnelle
  • Synthèse
Index

Archives

  • Site Web
  • Sources reStructuredText
  • EniBook 1.618033988
logo

Crédits

© Your Copyright

Aide

En-tête

MenuContenu
Sommaire,
Téléchargements
Aide sur les outils

Pied de page

ChevronAction
Aller en haut de la page courante
Aller en bas de la page courante
Passer à la page précédente
Passer à la page suivante

Associations

Dans le cas de relations binaires, il existe seize cas possibles d’association suivant la cardinalité de la relation entre les deux ensembles.

Dans cette partie nous étudions les différents cas possibles ainsi que leur traduction sous forme de tables à l’aide de clés étrangères et de tables associatives.

notations

Pour représenter sous forme de table les ensembles (A,B) on représentera les clés primaires en soulignant les attributs appartenant à la clé :

  • \(A (\underline{a\_id},...)\)

Les associations entre les entités seront représentées par des clés étrangères symbolisées par un hashtag préfixant le nom de l’attribut référençant la clé primaire de la table associée :

  • \(B (\underline{b\_id},..., \# a\_id)\)

cas possibles

Il existe 16 possibilités d’association entre deux entités \((A,B)\) :

  1. (0..1)—(0..1) : au plus un \(A\) peut être associé à au plus un \(B\)
  2. (0..1)—(1..1) : au plus un \(A\) est associé à un et un seul \(B\)
  3. (0..1)—(0..*) : au plus un \(A\) peut être associé à un ou plusieurs \(B\)
  4. (0..1)—(1..*) : au plus un \(A\) est associé à au moins un \(B\)
  5. (1..1)—(0..1) : un et un seul \(A\) peut être associé à au plus un \(B\)
  6. (1..1)—(1..1) : un et un seul \(A\) est associé à un et un seul \(B\)
  7. (1..1)—(0..*) : un et un seul \(A\) peut être associé à un ou plusieurs \(B\)
  8. (1..1)—(1..*) : un et un seul \(A\) est associé à au moins un \(B\)
  9. (0..*)—(0..1) : un ou plusieurs \(A\) peuvent être associé à au plus un \(B\)
  10. (0..*)—(1..1) : un ou plusieurs \(A\) peuvent être associé à un et un seul \(B\)
  11. (0..*)—(0..*) : un ou plusieurs \(A\) peuvent être associé à un ou plusieurs \(B\)
  12. (0..*)—(1..*) : un ou plusieurs \(A\) peuvent être associé à au moins un \(B\)
  13. (1..*)—(0..1) : au moins un \(A\) est associé à au plus un \(B\)
  14. (1..*)—(1..1) : au moins un \(A\) est associé à un et un seul \(B\)
  15. (1..*)—(0..*) : au moins un \(A\) peut être associé à un ou plusieurs \(B\)
  16. (1..*)—(1..*) : au moins un \(A\) est associé à au moins un \(B\)

Les cardinalités symétriques entre les entités \((A,B)\) relèvent du même type d’association.

Par exemple :

  1. (0..1)—(1..1) : au plus un \(A\) est associé à un et un seul \(B\)
  1. (1..1)—(0..1) : un et un seul \(A\) peut être associé à au plus un \(B\)

Il reste donc les 10 associations possibles :

  1. (0..1)—(0..1) : au plus un \(A\) peut être associé à au plus un \(B\)
  2. (0..1)—(1..1) : au plus un \(A\) est associé à un et un seul \(B\)
  3. (0..1)—(0..*) : au plus un \(A\) peut être associé à un ou plusieurs \(B\)
  4. (0..1)—(1..*) : au plus un \(A\) est associé à au moins un \(B\)
  5. (1..1)—(1..1) : un et un seul \(A\) est associé à un et un seul \(B\)
  6. (1..1)—(0..*) : un et un seul \(A\) peut être associé à un ou plusieurs \(B\)
  7. (1..1)—(1..*) : un et un seul \(A\) est associé à au moins un \(B\)
  8. (0..*)—(0..*) : un ou plusieurs \(A\) peuvent être associé à un ou plusieurs \(B\)
  9. (0..*)—(1..*) : un ou plusieurs \(A\) peuvent être associé à au moins un \(B\)
  10. (1..*)—(1..*) : au moins un \(A\) est associé à au moins un \(B\)

Le cas des 3 associations plusieurs à plusieurs :

  1. (0..*)—(0..*) : un ou plusieurs \(A\) peuvent être associé à un ou plusieurs \(B\)
  2. (0..*)—(1..*) : un ou plusieurs \(A\) peuvent être associé à au moins un \(B\)
  3. (1..*)—(1..*) : au moins un \(A\) est associé à au moins un \(B\)

nécessiteront de créer une table associative avec des clés étrangères référençant les clés primaires des deux entités (tables) en relation :

  • \(A (\underline{a\_id},...)\)
  • \(B (\underline{b\_id},...)\)
  • \(AB (\underline{\# a\_id,\# b\_id},...)\)

La clé primaire de la table associative pourra être défini par les deux clés étrangères, soulignées dans la représentation de la table \(AB\).

Les 4 associations un à plusieurs :

  1. (0..1)—(0..*) : au plus un \(A\) peut être associé à un ou plusieurs \(B\)
  2. (0..1)—(1..*) : au plus un \(A\) est associé à au moins un \(B\)
  1. (1..1)—(0..*) : un et un seul \(A\) peut être associé à un ou plusieurs \(B\)
  2. (1..1)—(1..*) : un et un seul \(A\) est associé à au moins un \(B\)

nécessiteront une clé étrangère du côté plusieurs (côté fils) de l’association.

  • \(A (\underline{a\_id},...)\)
  • \(B (\underline{b\_id},..., \# a\_id)\)

Pour les 2 associations un à un :

  1. (0..1)—(0..1) : au plus un \(A\) peut être associé à au plus un \(B\)
  2. (0..1)—(1..1) : au plus un \(A\) est associé à un et un seul \(B\)

On utilisera une clé étrangère d’un des côtés de cardinalité minimale 0.

Dans le premier cas :

  • \(A (\underline{a\_id},...)\)
  • \(B (\underline{b\_id},..., \# a\_id)\)

ou bien :

  • \(A (\underline{a\_id},..., \# b\_id)\)
  • \(B (\underline{b\_id},...)\)

Dans le deuxième cas :

  • \(A (\underline{a\_id},..., \# b\_id)\)
  • \(B (\underline{b\_id},...)\)

Pour la dernière association un à un :

  1. (1..1)—(1..1) : un et un seul \(A\) est associé à un et un seul \(B\)

On utilisera une clé étrangère d’un des côtés de l’association.

  • \(A (\underline{a\_id},...)\)
  • \(B (\underline{b\_id},..., \# a\_id)\) avec la contrainte UNIQUE sur l’attribut \(\# a\_id\)

ou bien :

  • \(A (\underline{a\_id},..., \# b\_id)\) avec la contrainte UNIQUE sur l’attribut \(\# b\_id\)
  • \(B (\underline{b\_id},...)\)

Pour ce dernier cas d’association un à un il sera sans doute envisageable de fusionner les deux entités en une seule table en choisissant comme clé celle d’une des deux entités.

La clé candidate de l’autre entité deviendra un attribut à valeur unique.

  • \(A (\underline{a\_id},...,b\_id,...)\) avec la contrainte UNIQUE sur l’attribut \(b\_id\)

ou bien :

  • \(B (\underline{b\_id},..., a\_id,...)\) avec la contrainte UNIQUE sur l’attribut \(a\_id\)

Exercices

association plusieurs-plusieurs
  • Question
  • Solution

créer en SQL une association plusieurs à plusieurs entre deux tables \(A(a_id,nom),B(b_id,nom)\)

Insérer les enregistrements :

  • A(1,'a1'),A(2,'a2'), B(1,'b1'), b(2,'b2')

Associer A(1,'a1') et `B(1,'b2')

Associer tous les A avec B(1,'b1')

Votre réponse :

Utiliser l’interpréteur ci-dessous pour répondre.

sql : essai.sql

    
>
Output

                

Interpréteur

MenuAction
Ré-initialiser les sorties
Faire apparaître le menu d'aide
Interpréter le programme

Editeur

MenuRaccouciAction
Ctrl+N Initialiser l'éditeur
Ctrl+O Charger le contenu d'un fichier dans l'éditeur
Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
Ctrl+P Imprimer le contenu de l'éditeur
Ctrl+Z Annuler la dernière modification
Maj+Ctrl+Z Rétablir la modification précedente
Ctrl+F Chercher une expression dans l'éditeur
Maj+Ctrl+F Chercher et remplacer une expression par une autre
F10 Ouvrir une documentation du langage

RaccourciAction
F1 Afficher cette aide
Tab Indenter la sélection
Maj+Tab Désindenter la sélection
Ctrl+A Sélectionner le contenu de l'éditeur
Ctrl+C Copier la sélection dans le presse-papier
Ctrl+V Remplacer la sélection par le contenu du presse-papier
Ctrl+X Supprimer la sélection et la copier dans le presse-papier
Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
Une solution possible :

Dans une association plusieurs à plusieurs entre deux tables :

  • \(A (\underline{a\_id},nom)\)
  • \(B (\underline{b\_id},nom)\)

il faut nécessairement créer une table associative :

  • \(AB (\underline{\# a\_id,\# b\_id})\)
DROP TABLE IF EXISTS AB;
DROP TABLE IF EXISTS A;
DROP TABLE IF EXISTS B;

CREATE TABLE A(nom text);
CREATE TABLE B(nom text);
CREATE TABLE AB(
                a_id  INTEGER NOT NULL,
                b_id INTEGER NOT NULL,
                PRIMARY KEY(a_id,b_id),
                       FOREIGN KEY(a_id) REFERENCES A(rowid),
                       FOREIGN KEY(b_id) REFERENCES B(rowid)
                      );
INSERT INTO  A(nom) VALUES ('a1');
INSERT INTO  A(nom) VALUES ('a2');
INSERT INTO  A(nom) VALUES ('a3');
INSERT INTO  B(nom) VALUES ('b1');
INSERT INTO  B(nom) VALUES ('b2');

INSERT INTO AB(A_id,B_id) SELECT a.rowid, b.rowid FROM A a, B b  WHERE  b.rowid=1 AND b.nom='b1';
INSERT INTO AB(A_id,B_id) SELECT a.rowid, b.rowid FROM A a, B b WHERE a.nom='a1' AND  b.nom='b2';

SELECT * FROM A;
SELECT * FROM B;
SELECT * FROM AB;

Modéliser les associations suivantes :

  1. un candidat dont on connait le nom du parti politique qui est un citoyen dont on connait le nom, le prénom et la ville où il habite.
  2. une personne dont on connait le nom, le prénom et la ville où il réside et qui peut posséder un livret A dont on connait le numéro et le solde.
  3. un médecin dont on connait le nom et la spécialité qui a des patients dont on connait le numéro de sécurité sociale. Chaque patient peut être suivi par plusieurs spécialistes.
  4. un client dont on connait le nom, le prénom et le solde de son compte qui habite à une adresse dont on connait le numero et le nom de la rue et le code postal de la ville où elle se trouve.
  5. un client dont on connait le nom, le prénom et le solde de son compte qui fait des commandes dont on connait la date et le montant.
  6. une commande dont on connait la date et le montant et qui est constitué de plusieurs produits dont on connait le nom et le prix unitaire. Chaque produit peut apparaître dans des commandes différentes.

Pour chacun des modèles proposés, représentez les tables correspondantes.

Regrouper les trois derniers cas pour proposer une structuration (les tables) d’une base de données qui permettrait à une entreprise de gérer des clients dont on connait l’adresse et qui passent des commandes constituées de plusieurs produits.

 
Systèmes d'Information : Associations, 13 avr. 2023.