Bonjour,
Dans la cadre de la création d'un WMS, j'ai les éléments suivants :
depot (id, ...)
emplacement (id, depot_id fk(depot.id), ...)
quai (id, emplacement_id fk(emplacement.id), ...)
reception (id, quai_id fk(quai.id), ...)
reception_colis (id, reception_id fk(reception.id), emplacement_id fk(emplacement_id), ...)
Souligné : clé primaire
Gras : clé étrangère fk(table.colonne)
Cette modélisation est insuffisante pour gérer la cohérence de la chose :
Ma réception est attendue à un quai, qui correspond à un emplacement particulier de mon dépôt.
A l'avance, j'ai prévu de mettre dans un emplacement donné chacun des colis contenus dans la réception.
Seulement, il faut que je m'assure que les emplacements prévus pour les colis de mon emplacement sont bien dans le même dépôt que le quai de déchargement...
Comment modéliser ça, au niveau du MPD ? (ou même SQL)
Un trigger pourrait faire l'affaire, mais niveau performances, je pense que c'est clairement pas le top.
Idéallement, il faudrait pouvoir faire une sorte de clé étrangère ne référençant non pas la table des emplacements, mais une vue qui fait la jointure entre le dépôt correspondant au quai de la réception, et les emplacements du dépôt en question...
Le SGBD cible est SQL Server 2012
J'aurai vu ce genre de solution :
reception_colis (id, reception_id fk(reception.id), emplacement_id fk(emplacement_id), quai_depot calc(select e.depot_id from reception r inner join quai q on q.id = r.quai_id inner join emplacement e on e.id = q.emplacement_id where r.id = reception_id), emplacement_depot calc(select e.depot_id from emplacement e where e.id = emplacement_id), ...)
Et une contrainte sur quai_depot = emplacement_depot
Seulement, non seulement je vois pas comment l'implémenter, mais surtout je doute un peu de la pertinence d'une telle solution.
Avez-vous une meilleure idée ?
Partager