Bonsoir Ordigil,
Envoyé par
ordigil
je lui demande combien de lumières de type 9006 il a en inventaire.
Pour m’éclairer :-) dans cet exemple, quel est le nom de cette pièce dans votre table PART ?
Envoyé par
ordigil
Je me retrouve donc avec beaucoup de numéros de pièces pour des pièces identiques ou équivalentes.
Si le besoin s’en fait sentir, vous pouvez déclarer une table, appelons-la par exemple PART_ALIAS (voyez le diagramme ci-dessous), permettant de connaître les numéros affectés par chacun de vos fournisseurs. Pour sa part, l’attribut PartNumber de la table PART permet de connaître le numéro de pièce que vous affectez vous-même à une pièce (auquel cas, histoire d’éviter les quiproquos, PartNumber pourrait y être renommé en PartDzindzioNumber ou autre nom du même genre, voyez le diagramme ci-dessous). Mais si vous ne voulez pas mettre en oeuvre votre propre numérotation des pièces, supprimez cet attribut de la table PART et, si cela suffit, utilisez la table PART_ALIAS pour vos contacts avec les fournisseurs.
Envoyé par
ordigil
Si vous avez une autre solution à proposer je vous écoute ;-)
Je suis tout ouïe ;-) En relation avec ce qui précède, je suis plutôt favorable à une numérotation automatique assurée par vous-même (attribut PartDzindzioNumber, faisant l’objet d’une clé candidate) outre la mise en oeuvre de la table PART_ALIAS pour retrouver les équivalences chez les fournisseurs).
Envoyé par
ordigil
Le nom convient parfaitement. "Address book" = "Carnet d'adresses" C'est exactement ce que nous avons.
Le quart-heure sémantique ;-)
Du point de vue de l’utilisateur, "Address book" convient, je suis évidemment d’accord. Même chose du point de vue de l’informaticien. Même chose du point de vue de la théorie des ensembles : un carnet d’adresses est un ensemble dont les éléments sont les contacts. Mais quand on modélise une base de données relationnelle, on change de registre, on passe de l’informel au formel, on déclare des variables de type RELATION en se conformant en l’occurrence à la logique du 1er ordre et au calcul relationnel, fondements de la théorie relationnelle bâtie par Ted Codd (cf. A Relational Model for Large Shared Data Banks, paragraphe 1.5), soit :
« L'utilisation d'un modèle relationnel de données [...] permet de développer un sous-langage universel basé sur le calcul des prédicats. Si la collection des relations est en forme normale, alors un calcul des prédicats du premier ordre est suffisant. »
Dans ce contexte, modéliser un carnet d’adresses consiste à déclarer une variable, appelons-la CARNET, constituant un prédicat (CARNET) dont les propositions sont « carnet 1 », « carnet 2 », ..., « carnet n », mais Dzindzio n’a qu’un seul carnet à gérer ! Celui de ses fournisseurs, ateliers, garages et autres entités du même métal. Par contre, pour traiter des fournisseurs, des ateliers et compagnie, et si je reprends le terme générique « acteur » (un fournisseur est un acteur, un atelier est un acteur), les propositions de mon prédicat sont « acteur 1 », « acteur 2 », ..., « acteur n » : il s’ensuit qu’il est naturel de nommer « ACTEUR » ce prédicat.
Je le répète, si vous avez un autre nom à proposer, n’hésitez pas, mais pas de BOOK ! Un fournisseur n’est pas un carnet !
Vous pourriez aussi engager une disputatio et m’opposer ceci :
« Un carnet peut faire référence à au plus un shop, et un shop fait référence à au moins et au plus un carnet, à savoir le sien ! »
Auquel cas je m’inclinerai et conserverai le nom ADDRESS_BOOK tout en laissant tomber ACTEUR... Bien entendu, si on se situait à un niveau supérieur d’abstraction (modèle conceptuel des données (MCD) merisien par exemple, ou diagramme de classes UML), je réfuterais au nom de la spécialisation/généralisation des entités-types, mais je ne vais pas vous embêter avec ça…
Envoyé par
ordigil
C'est un peu difficile pour moi de tout reconstituer dans DZINDZIO_TRUCKS_MANAGEMENT_ENGLISH avec toutes ces clés
Déjà pour que vous puissiez mieux lire le diagramme, j’ai changé la notation des associations entre table, en remplaçant les flèches par quelque chose de plus explicite (notation « patte de corbeau », comme avec MySQL Workbench, cf. le post #9, ou encore ici).
En passant, observez l’association --|--------o-- entre ADDRESS_BOOK et SHOP : un acteur fait référence à au plus un shop, et un shop fait référence à au moins et au plus un acteur (et pas à un carnet...)
Quant aux clés candidates (primaires ou alternatives) affectées à une table, souvenez-vous que pour une valeur de clé, on garantit qu’on a au moins et au plus une valeur pour chaque attribut de la table.
Exemple 1 :
La paire {CamionId, CamionMilleageId} est clé (primaire) de la table CAMION_MILLEAGE, donc pour une valeur de cette paire on a une seule valeur pour chacun des attributs CamionId, CamionMilleageId, CamionMilleageDate, CamionMilleage.
La paire {CamionId, CamionMilleageDate} est clé (alternative) de la table CAMION_MILLEAGE, donc là aussi pour une valeur de cette paire on a une seule valeur pour chacun des attributs CamionId, CamionMilleageId, CamionMilleageDate, CamionMilleage.
La paire {CamionId, CamionMilleage} est clé (alternative) elle aussi de la table CAMION_MILLEAGE, donc là encore pour une valeur de cette paire on a une seule valeur pour chacun des attributs CamionId, CamionMilleageId, CamionMilleageDate, CamionMilleage.
Exemple 2 :
Le triplet {CamionId, CamionMilleageId, MaintenanceRepairId} est clé de la table M_R_NO_PART, donc pour une valeur de ce triplet on a une seule valeur pour chacun des attributs CamionId, CamionMilleageId, MaintenanceRepairId, et MaintenanceRepairCategoryId.
Exemple 3 :
Le quadruplet {CamionId, CamionMilleageId, MaintenanceRepairId, PartId} est clé (primaire) de la table M_R_PART, donc pour une valeur de ce quadruplet on a une seule valeur pour chacun des attributs CamionId, CamionMilleageId, MaintenanceRepairId, PartId et MaintenanceRepairCategoryId.
Par contre, le triplet {CamionId, CamionMilleageId, MaintenanceRepairId} n’est pas clé de la table M_R_PART, sinon pour une valeur de ce triplet on aurait une seule valeur pour l’attribut PartId, c’est-à-dire que pour une réparation on ne pourrait avoir qu’une seule pièce, contrairement à ce qui est demandé.
Envoyé par
ordigil
Peut-être pourrions-nous sortir Details et Notes de la Table MAINTENANCE_REPAIR et les inclure dans WORK_ORDER.
Je regarderai cela, mais essayons déjà d’entériner ce qui précède.
Le diagramme du jour :
Partager