Vous pensez trop au lien entre optionnalité et identité. Jusqu'à ce que tout cela vous vienne plus naturellement, il est préférable de les considérer comme étant complètement indépendants .
À propos de l'optionnalité, il est important de se rappeler que l'optionnalité est directionnelle. Pour utiliser votre exemple de employee_equipment
:Bien sûr, les employés n'ont pas besoin d'équipement. La relation un-à-plusieurs de employee
à employee_equipment
est facultatif. En même temps, en le regardant du point de vue opposé, la relation est obligatoire. Vous ne pouvez pas avoir d'enregistrement dans employee_equipment
sauf s'il y a un employee
pour l'associer.
L'identité n'a rien à voir avec l'optionalité, sauf par coïncidence un lien d'identification est obligatoire de l'enfant au parent. Qu'il soit également obligatoire du parent à l'enfant n'est ni ici ni là en ce qui concerne l'identité.
Ce qui rend une relation identifiante, c'est que vous devez savoir de quel parent vous parlez (ainsi que d'autres choses) afin de savoir de quel enfant vous parlez. Autrement dit, la clé primaire de l'enfant doit inclure une clé étrangère vers le parent.
Tables d'intersection pures (par exemple employee_equipment
) en sont de bons exemples. La clé primaire d'une intersection pure est la combinaison des clés étrangères des deux tables parentes. Notez que certaines personnes peuvent également ajouter une clé de substitution à ces types de tables. Cela n'a pas tellement d'importance du point de vue de l'identité s'il existe plusieurs clés candidates. Ce qui est important pour déterminer l'identité est de savoir si la clé étrangère fait partie d'une clé candidate, si oui ou non cette clé candidate se trouve être la clé primaire.
Un autre bon exemple serait quelque chose comme le catalogue de métadonnées d'une base de données, où une colonne est identifiée par la table à laquelle elle appartient, tout comme la table est identifiée par le schéma dans lequel elle se trouve, et ainsi de suite. Sachant qu'une colonne s'appelle NAME
ne vous dit pas de quelle colonne il s'agit. Sachant que c'est le NAME
colonne dans le CUSTOMER
le tableau aide. (Il faudra aussi savoir quel schéma CUSTOMER
est dedans, et ainsi de suite).