Quand on analyse votre MPD, on constate que, soit vous n’êtes pas passé par l’étape MCD, soit que vous avez modifié le résultat de la dérivation du MCD en MPD. En effet, l’AGL produit un MPD dans lequel on a pour la table TABLEFILS :
— Soit une clé étrangère dont les éléments toto et titi sont tous deux à NULL (conséquence d’une cardinalité 0,1 entre TABLEPERE (d’identifiant {toto, titi} et TABLEFILS),
— Soit une clé étrangère dont aucun des éléments (toto et titi) n'est à NULL (conséquence d’une cardinalité 1,1 entre TABLEPERE et TABLEFILS),
Mais jamais un mix NOT NULL / NULL, qui ne peut exister que si l'on modifie ce que l'AGL a génénré.
Cela dit, en construisant vos tables directement au niveau MPD, puis en les connectant, j’observe un comportement tout à fait normal de la part de l’AGL quant aux clés primaires et étrangères :
Avec ensuite une génération de code SQL conforme à ce que vous attendez. Vous avez vraisemblablement fait une fausse manip à un moment donné. Pour que vous en ayez le cœur net, je vous invite à procéder comme j’ai fait.
Maintenant, si dans certaines lignes de la table TABLEFILS l’attribut titi est marqué NULL alors que l’attribut toto contient une valeur, par exemple 'xyzt', pour SQL Server (et les autres), l’information est toujours réputée valide, même si cette valeur 'xyzt' n’existe pas dans la table TABLEPERE (attribut toto) : Danger...
Partager