> Tech > Le schéma base de données ManyToMany

Le schéma base de données ManyToMany

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Après avoir examiné la relation supertype- subtype, voyons un exemple de ces avantages par rapport aux relations M:N multiples. Les exemples de cet article utilisent deux bases de données : ManyToMany et SuperSub. Vous pouvez télécharger CreateAndPopulateDBs. sql qui contient le code permettant de créer ces bases de données et

Le schéma base de données ManyToMany

les procédures stockées de l’article,
sur www.itpro.fr. Les exemples fonctionnent
dans SQL Server 2000 et 7.0 et
j’ai indexé les tables dans les deux
bases de données de telle sorte que
toutes les colonnes jointes aient un index
sur elles. De plus, pour que la stratégie
d’indexation n’affecte pas les résultats,
évitez de filtrer les jeux de
résultats dans les procédures stockées
autres que sur les colonnes de clés primaires.
L’exemple est celui d’une société
fictive qui loue du matériel à  des entreprises.
Cette société de location a en
stock divers genres de camions, de
fournitures de bureau, et d’ordinateurs.
En mettant en oeuvre le schéma
de base de données de l’application
principale, le concepteur
a utilisé plusieurs relations
M:N qu’illustre la figure
3. Dans ce schéma de base de
données ManyToMany, la table
Leases est associée par l’intermédiaire
de trois tables d’association
M:N aux tables contenant
chaque type de matériel
que les clients peuvent louer.
Chaque table d’association enregistre
l’article loué et sa
quantité. (Pour plus de clarté, j’ai omis la table Customer.)
A première vue, il n’y a rien à  redire
à  ce schéma. Il ne transgresse
pas notablement la forme normale.
(On pourrait certes objecter que
Salesperson dans la table Leases pourrait
être multivaleur, qu’un camion
pourrait être peint en deux couleurs
ou, qu’à  l’avenir, le mobilier de bureau
pourrait ne pas avoir de poids ; mais ne
nous égarons pas.) Bien que le schéma
de base de données ManyToMany joue
son rôle, voyons quelques moyens
courants pour interroger cette
base de données et les résultats
de performance ainsi
obtenus.
Le listing 1 montre le code
T-SQL qui crée la procédure
stockée GetInvoiceDetails,
que les utilisateurs exécutent
fréquemment sur la base de
données ManyToMany. La procédure
GetInvoiceDetails
contient quatre blocs de code
qui renvoient des détails sur le
matériel d’une location donnée,
ainsi que le total général
de la facturation mensuelle
correspondante. Avec le
schéma M:N, il faut utiliser
UNION pour joindre trois requêtes
séparées pour renvoyer
l’information détaillée
de la location, ainsi que le montrent les
trois premiers blocs de la procédure
stockée. A noter que chaque requête
ajoute une colonne appelée ITEM pour
identifier le genre d’article loué. Le
quatrième bloc extrait le montant mensuel
total de chaque facture en additionnant
les colonnes total de ligne article
unies pour créer un montant
supercumulé. En utilisant un numéro
de location de 1, exécutons cette requête
sur la base de données Many-
ToMany:

USE ManyToMany
GO
EXEC GetInvoiceDetails 1

Comme le montre la figure 4,
chaque article sur lease-number 1 est
listé par type avec des totaux ligne article.
La dernière ligne du jeu de résultats
est le montant de la location mensuelle
totale. Un rapport de location
détaillé étant une requête courante, ce
serait probablement l’une des procédures
stockées les plus fréquentes
pour cette base de données.
Examinons maintenant la sortie
STATISTICS IO de cette procédure
stockée. Exécutez la procédure stockée
GetInvoiceDetails avec STATISTICS
IO sur on :

SET STATISTICS IO ON
EXEC GetInvoiceDetails 1

On obtient les résultats de la figure
5. (Pour garantir des résultats homogènes,
j’ai déjà  chargé les données en
cache en exécutant la procédure plusieurs
fois, donc il n’y a pas de lectures
physiques.) Cette procédure stockée
de détail location courante génère 35
balayages et 70 lectures logiques. Nous
verrons bientôt que ce nombre de lectures
est plus élevé qu’il ne faudrait.

Téléchargez cette ressource

Comment sécuriser une PME avec l’approche par les risques ?

Comment sécuriser une PME avec l’approche par les risques ?

Disposant de moyens financiers et humains contraints, les PME éprouvent des difficultés à mettre en place une véritable stratégie de cybersécurité. Opérateur de services et d’infrastructures, Naitways leur propose une approche pragmatique de sécurité « by design » en priorisant les risques auxquelles elles sont confrontées.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010