Salut,
Personnellement j'ai mis au point une technique (qui a surement déjà du être faite) qui consiste à créer une table d'identification d'élément pour chaque nature d'élément. Cette table contient uniquement un Guid qui est la clef et dont la valeur par défaut est newid().
Ensuite, je crée une "sous" table qui contient vraiment les infos intéressantes qui n'a pas de clef primaire mais qui a une rowguid.
La liaison doit permettre d'avoir des enregistrements dans la table mère qui n'en ont pas dans une de ses tables filles (ça fait un lien avec une clef de chaque côté dont le "fil" est en pointillés).
Imaginons une gestion des tiers (Ma clef primaire porte le nom de ma table) voir ma charte de nommage : http://sossoa.blogspot.com/2007/12/c...de-donnes.html
Table
TIERS_MT_Tiers (les personnes)
TIERS_MT_Tiers uniqueidentifier
Table
TIERS_ST_PP (les personnes physiques)
TIERS_ST_PP uniqueidentifier
FK_UTIL_BT_Genres uniqueidentifier
txtNom nvarchar(50)
txtPrenom nvarchar(50)
Table
TIERS_ST_PM (les personnes morales)
TIERS_ST_PM uniqueidentifier
txtRaisonSociale nvarchar(50)
Enfin la table adresse qui est la même quelque soit le type de tiers et qui point sur la table mère et non sur les sous-tables filles
TIERS_ST_Adresses (les adresses postales)
TIERS_ST_Adresses uniqueidentifier
FK_TIERS_MT_Tiersuniqueidentifier
txtAdresse1 nvarchar(50)
txtAdresse2 nvarchar(50)
txtAdresse3 nvarchar(50)
txtCP nvarchar(10)
txtVille nvarchar(50)
TIERS_MT_Tiers sert un peu de table "abstraite" comme le ferait une classe abstraite. D'ailleurs, au risque de choquer ceux qui prônent le découplage Base / objets, les unes fonctionnent très bien avec les autres et ça permet même de créer entités objet à persistance quasi automatique.
Ça évite aussi d’avoir a faire des UNION qui, comme vous le savez ne sont pas hyper performants.
Quelques petites procédures stockées sont quand même à prévoir pour l'exploitation d'une telle structure.
Si quelqu'un est allé plus loin dans ce sens, j'aimerais bien partager ses expériences.
Je ne conseille pas cette structure pour de très gros projets car ça complique pas mal par contre, pour faire du dev ultra rapide en ASP.net c'est pratique.
++
Laurent
Partager