Envoyé par
arnaudGo
pour faciliter la création d'écrans et de requêtes, j'aimerais rassembler toutes les observations dans une même table.
Pour rassembler toutes les observations, il est préférable d’en passer par une table virtuelle, c'est-à-dire une vue, qui soit l’union (au sens relationnel) des observations relatives aux clients, commandes, etc. Je suggère que vous ne touchiez pas à la structure des tables de base au motif qu’il s’agit de simplifier les traitements. Si vous touchez à cette structure, cela vous conduira à violer les règles de la normalisation.
Disons qu’au niveau tabulaire, vous pourriez avoir la structure de base suivante concernant les relations entre les observations et les clients (même principe pour Commande, etc.) :
Client (ClientId, ...)
Observation (ObservId, ...)
ObservClient (ObservId, ClientId, ...)
Structure dans laquelle les clés primaires sont soulignées. Concernant la table ObservClient, l’attribut ObservId est aussi clé étrangère par référence à Observation et l’attribut ClientId est non seulement clé étrangère par référence à Client, mais aussi clé alternative (en SQL : Unique). On peut aussi préférer que ce soit ClientId qui y soit clé primaire, auquel cas c’est ObservId qui devient clé alternative. Je n’ai pas d’état d’âme, sinon que la première proposition va plus dans le sens de la généralisation (au sens généralisation/spécialisation).
Envoyé par
arnaudGo
Ma table Client (ou ma table Facture, Commande, ...) contient une clé étrangère pointant vers Observation
Dans la suggestion que je viens de faire, les rôles sont inversés (toujours en vertu du principe de rejet des valeurs nulles...)
J'aimerais bien avoir votre opinion ainsi que celle de JPhi33.
Partager