Ceci est une ancienne révision du document !
La relation d'agrégation est une forme particulière de relation one-to-many. C'est une composition sans appartenance : la suppression d'une instance de la classe regroupant les agrégats n'entraine pas la suppression des agrégats.
Un exemple de relation d'agrégation dans le diagramme UML ci-dessous :
Le symbole UML de l'agrégation
. On place le symbole du côté de la classe qui regroupe les agrégats.
Un entrepôt (Warehouse) peut stocker plusieurs colis (Packet), et un colis est entreposé dans un seul entrepôt : cela définit bien une association un à plusieurs (one to many).
En définissant une association de type agréation, on fait le choix de conserver les colis dans notre base de données même si on supprime notre entrepôt.
Pour pouvoir traduire cette relation d'agrégation il va falloir créer les contraintes appropriées lors de l'étape de traduction vers les MLD/MPD.
Ci-dessous une application minimale Flask définissant le modèle de données
from flask import Flask from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Warehouse(db.Model): __tablename__ = 'warehouse' id = db.Column(db.Integer, primary_key=True, index=True) name = db.Column(db.String(80), unique=True, index=True) # Association one-to-many packets = db.relationship("Packet", backref="warehouse") class Packet(db.Model): __tablename__ = 'packet' id = db.Column(db.Integer, primary_key=True, index=True) sender = db.Column(db.String(80)) recipient = db.Column(db.String(80)) warehouse_id = db.Column(db.Integer, db.ForeignKey('warehouse.id'), unique=False, nullable=True) # Création de l'application # On utilise la variable __name__ pour définir le nom du module courant # comme root applicatif pour notre application flask app = Flask(__name__) # Le chemin vers la base SQLite est relatif au dossier de l'application flask app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db" # Initialiser l'application Flask par l'intermédiaire de l'extension db.init_app(app)