bonjour,
alors voilà: je modélise une base de données pour gérer des logements (sites); ces derniers sont associés à des services
- je veux pouvoir associer ces sites à un ou plusieurs services
- je veux conserver une trace de ces associations
Actuellement j'ai 3 tables:
- Site(Site_Id, Site_Adresse, Site_Type,...)
- SiteUService (SiteUserv_Id, Site_Id, SiteUserv_Date)
- Service (Service_Id, Service_Nom): c'est une table liée qui provient d'une autre base de donnée dont j'aurai besoin pour d'autres BDD (véhicules, parc info...)
Relations:
Site (1,n) SiteUService: un site peut être associé à différents service au fil du temps
SiteUService (n,1) Service: un service peut être lié à plusieurs sites
Mon souci: je veux pouvoir associer 2 services en même temps (des services peuvent partager le même site). Ma requete actuelle:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT SiteUService.Service_Id AS [Service Associe], Site.* FROM Site INNER JOIN (SiteUService INNER JOIN Service ON SiteUService.Service_Id = Service.Service_Id) ON Site.Site_Id = SiteUService.Site_Id WHERE (((SiteUService.SiteUserv_Date)=(SELECT Max(SiteUserv_Date) FROM SiteUService WHERE SiteUService.Site_Id=Site.Site_Id))) ORDER BY Site.Site_Id;
Elle me sort bien le dernier site associé (date la plus récente); mais si je mets 2 services à la même date (dans ma table siteUService, je crée 2 entrées avec la même date), je n'obtiens qu'un résultat.
Une solution est de créer une autre table entre SiteUService et Service pour permettre plusieurs valeurs dans SiteUService.Service_Id. j'ai tenté avec un champ multivalué sur SiteUService.Service_Id mais il y a trop de complications par la suite
Cependant, il existe peut être mieux au niveau de la requete








Répondre avec citation
Partager