IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Merise Discussion :

problème de référence circulaire


Sujet :

Merise

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 35
    Points : 32
    Points
    32
    Par défaut problème de référence circulaire
    bonjour,
    j'ai créé un MCD et j'ai petit problème qui concerne 3 classes d'entités(direction_pro, ss_direction, secteurs)

    direction_pro (0,n) ====== (0,1) secteurs
    direction_pro (0,n) ====== (1,1) ss_direction
    ss_direction (1,n) ====== (0,1) secteurs

    et lors de la création de la base de données j'ai eu un problème quand j'ai voulu mettre on delete cascade, et quand j'ai posé le problème on m'a dit que je tente de faire une référence circulaire et dans ce cas il n'est pas possible de savoir par quelle branche la propagation du DELETE va se faire.
    En général ce genre de référence avec cycle est le résultat d'une mauvais modélisation au niveau conceptuel !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    lors de la création de la base de données j'ai eu un problème quand j'ai voulu mettre on delete cascade, et quand j'ai posé le problème on m'a dit que je tente de faire une référence circulaire et dans ce cas il n'est pas possible de savoir par quelle branche la propagation du DELETE va se faire.
    En général ce genre de référence avec cycle est le résultat d'une mauvais modélisation au niveau conceptuel !
    Quelles sont tes tables ?

    En reliant toutes les branches de ton schéma et en y indiquant les verbes des associations, j'obtiens cet exemple de schéma :

    direction_pro -0,n----Encadrer----1,1- ss_direction -1,n----Diriger----0,1- secteur
    |-----------------------------------------------------------------------0,n----Diriger----0,1------------|

    Déjà, si tu n'as pas de contrainte d'inclusion entre les deux associations "Diriger", une ss_direction peut diriger un secteur non dirigé par sa direction_pro. Normal ?

    Ensuite, les associations "Diriger" entraînent normalement la création de deux tables associatives. Voici un exemple de l'ensemble des tables que tu devrais avoir :
    direction_pro (dp_id, dp_code, dp_nom...)
    ss_direction (ssd_id, ssd_id_direction_pro, ssd_code, ssd_nom...)
    secteur (s_id, s_code, s_nom...)
    ssd_diriger_secteur (sds_id_secteur, sds_id_ss_direction)
    dp_diriger_secteur (dds_id_secteur, dds_id_direction_pro)

    Maintenant examinons le résultat de l'activation d'une contrainte d'intégrité ON DELETE CASCADE...

    1) Je supprime une sous-direction
    => les lignes de la table asociative ssd_diriger_secteur faisant référence à cette sous-direction sont supprimées.

    2) Je supprime une direction_pro
    => Les lignes de la table ss_direction faisant référence à cette direction pro sont supprimées.
    => Par enchaînement, les lignes de la table asociative ssd_diriger_secteur faisant référence aux sous-directions dépendant de la direction-pro supprimée sont supprimées.
    => Les lignes de la table dp_diriger_secteur faisant référence à cette direction sont supprimées.

    3) Je supprime un secteur
    => Les lignes de la table dp_diriger_secteur faisant référence à ce secteur sont supprimées.
    => Les lignes de la table ssd_diriger_secteur faisant référence à ce secteur sont supprimées.

    Je ne vois aucune référence circulaire !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    direction_pro -0,n----Encadrer----1,1- ss_direction -1,n----Diriger----0,1- secteur
    |-----------------------------------------------------------------------0,n----Diriger----0,1------------|


    (...) les associations "Diriger" entraînent normalement la création de deux tables associatives.

    Il s'agit de deux relations père/fils (ou maître et esclave). Je ne vois pas pourquoi il faudrait créer deux tables à partir des associations. L'identifiant de l'entité-type côté 0,n (ou 1,n) devrait migrer vers la table côté 0,1 (ou 1,1) et devenir une clef étrangère.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par MacFly58 Voir le message
    Il s'agit de deux relations père/fils (ou maître et esclave).
    Ça c'est toi qui le dit, pas les morceaux de MCD donnés par soul-31.

    Pour entrer dans de l'exemple plus concret que des codes, on peut très bien imaginer un groupe industriel avec la structure suivante :
    - La direction_pro "Europe" dirige en direct le secteur "Europe de l'est".
    - La sous_direction "Pologne" dirige le secteur "Pologne".
    - La direction_pro "Europe" encadre la sous-direction "Pologne".
    - La direction_pro "Europe" dirige en direct le secteur "Roumanie".

    La Roumanie est considérée comme un marché suffisamment important pour justifier un secteur mais pas encore suffisamment important pour justifier l'existence d'une sous-direction.

    On a bien deux associations distinctes et ça correspond bel et bien à mon schéma.

    Je ne vois pas pourquoi il faudrait créer deux tables à partir des associations. L'identifiant de l'entité-type côté 0,n (ou 1,n) devrait migrer vers la table côté 0,1 (ou 1,1) et devenir une clef étrangère.
    Pour la bonne raison qu'il faut éviter les clés étrangères NULL. Du fait de la cardinalité minimale à 0 sur les deux branches de l'association, l'implémentation normale est celle que j'ai donnée avec des tables associatives.
    Et ça permet au passage d'éviter le problème que rencontre soul-31.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Intéressant

    ss_direction -1,n----Diriger----0,1- secteur
    Vous créez également une table pour cette association bien qu'une cardinalité minimale soit à 1 ?

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par MacFly58 Voir le message
    Vous créez également une table pour cette association bien qu'une cardinalité minimale soit à 1 ?
    Oui car :
    1) Un secteur peut ne pas être dirigé et
    2) Une sous-direction peut diriger plusieurs secteurs

    La règle 1 et l'évitement d'une clé étrangère nullable fait que celle-ci ne peut pas figurer dans la table des secteurs.

    La règle 2 fait que la clé étrangère ne peut pas non plus figurer dans la table des sous-directions.

    Seule solution : La table associative.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Donc si je comprends bien, vous créez une table associative pour toute relation père-fils si la cardinalité minimale de l'entité fille est à 0 ?


    Cela me semble aller à l'encontre de la règle suivante :

    http://sqlpro.developpez.com/cours/m...passage#L5.1.2
    5.1.2. Relation de type 1:n (maître et esclave)
    Règle n°3 : Dans le cas d'entités reliées par des associations de type 1:n, chaque table possède sa propre clef, mais la clef de l'entité côté 0,n (ou 1,n) migre vers la table côté 0,1 (ou 1,1) et devient une clef étrangère (index secondaire).

    J'ai même l'impression que vous créez une table associative pour toute relation binaire où une cardinalité minimale vaut 0.
    Je me trompe ?

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    envoyé par MacFly58:
    Il s'agit de deux relations père/fils (ou maître et esclave). Je ne vois pas pourquoi il faudrait créer deux tables à partir des associations. L'identifiant de l'entité-type côté 0,n (ou 1,n) devrait migrer vers la table côté 0,1 (ou 1,1) et devenir une clef étrangère.
    c'est ce que j'avais fait au début et à cause de ça j'ai eu un problème quand j'ai ajouté la contrainte d'intégrité on delete cascade.

    je tiens a vous remercier pour votre réponse et après l'avoir lu, j'ai créé les deux tables d'associations (ssd_diriger_secteur, dp_diriger_secteur) et quand j'ai activé la contrainte d'intégrité on delete cascade, j'ai eu le résultat voulu mais avec un léger problème.

    - quand Je supprime une sous-direction

    => les lignes de la table asociative ssd_diriger_secteur faisant référence à cette sous-direction sont supprimées.
    => les lignes de la table secteurs qui sont dirigé par cette sous-direction ne sont pas supprimées.
    néanmoins ce petit problème peut être résolu au niveau du développement du l'application. merci encore pour votre aide

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par MacFly58 Voir le message
    Donc si je comprends bien, vous créez une table associative pour toute relation père-fils si la cardinalité minimale de l'entité fille est à 0 ?


    Cela me semble aller à l'encontre de la règle suivante :

    http://sqlpro.developpez.com/cours/m...passage#L5.1.2
    Et bien pour une fois je ne suis que partiellement d'accord avec SQLPro :

    Je suis d'accord avec son schéma qui est le suivant :
    Etre_humain -1,1----Réside----0,n- Appartement

    Effectivement, dans ce cas, on met en clé étrangère dans la table Etre_humain l'identifiant de l'appartement occupé.

    Par contre avec le schéma suivant, je crée une table associative pour les raisons déjà expliquées précédemment, et notamment le fait d'empécher la nullité d'une clé étrangère :
    Etre_humain -0,1----Réside----0,n- Appartement

    Et c'est fsmrel qui m'a convaincu de cette modélisation car j'avais une tendance naturelle à faire comme SQLPro dit avec ce dernier couple de cardinalités.

    J'ai même l'impression que vous créez une table associative pour toute relation binaire où une cardinalité minimale vaut 0.
    Je me trompe ?
    0,1 - 0,n => table associative
    0,n - 0,n => table associative
    0,1 - 0,1 => table associative

    J'ai fait tous les cas possibles je crois ? Donc la réponse est : "non, vous ne vous trompez pas !"

    Citation Envoyé par soul-31 Voir le message
    => les lignes de la table asociative ssd_diriger_secteur faisant référence à cette sous-direction sont supprimées.
    Jusque là c'est conforme à ce que j'ai écrit.
    => les lignes de la table secteurs qui sont dirigés par cette sous-direction ne sont pas supprimées.
    Et c'est tout à fait normal !
    Relisez mon scénario :
    La Roumanie est considérée comme un marché suffisamment important pour justifier un secteur mais pas encore suffisamment important pour justifier l'existence d'une sous-direction.
    Faisons le scénario inverse :
    La Roumanie a maintenant une sous-direction mais c'est la crise et on supprime la sous-direction roumaine. Doit-on pour autant supprimer le secteur roumain ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    J'ai été assez surpris par cette règle qui va à l'encontre de ce que j'ai pu apprendre dans ma formation d'informaticien. J'ai vérifié dans un livre, la règle mentionnée est celle émise par SqlPro.

    J'aimerai une précision :

    il faut éviter les clés étrangères NULL
    Pourriez-vous me dire pour quelles raisons exactement ? Le système me semble fonctionner même si nous avons des clés étrangères NULL.

    Merci

  11. #11
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Évoquer le trigger ON DELETE CASCADE dans le forum Merise est inhabituel, mais on va faire avec. Du point de vue de l’entreprise, vouloir supprimer les sous-directions et les secteurs quand on veut supprimer une direction paraît osé. J’aurais tendance à dire que l’on ne peut supprimer une direction que lorsqu’il n’y a plus de sous-directions ni de secteurs qui y sont rattachés, et que l’on ne peut pas supprimer de sous-direction tant que des secteurs y sont rattachés. Autrement dit, il paraît plus sage de commencer par rattacher les secteurs touchés à une autre direction (ou sous-direction) avant de faire le ménage. Même chose concernant le rattachement des sous-directions aux directions.

    Quoi qu’il en soit, un SGBD normalement constitué ne devrait pas être stalinien et se contenter d’émettre un warning au lieu de tout bloquer. En effet, en toute logique, un secteur est rattaché soit à une direction, soit à une sous-direction auquel cas il n’y a aucun danger. En outre, les SGBD n’ont pas le même comportement : SQL Server interdit que l’option CASCADE soit présente à la fois entre DIRECTION et SECTEUR d’une part, et entre SOUS_DIRECTION et SECTEUR d’autre part, tandis que DB2 for z/OS le permet... Vu le message que vous prenez dans les dents, vous utilisez vraisemblablement SQL Server.

    La modélisation proposée par CinePhil convient, mais si un secteur ne peut pas être rattaché à la fois à une direction et à une sous-direction, alors il faudra prévoir un trigger pour s’en assurer.

    Il existe aussi un scénario alternatif. En effet, l’entité-type DIRECTION et l’entité-type SOUS_DIRECTION peuvent être considérées comme des spécialisations d’une entité-type plus générale, appelons-la ENTITE (clin d’œil à CinePhil...), qui permet de factoriser les attributs tels que le nom d'une entité, son numéro Siret, etc., ainsi que les relations d'ENTITE avec les autres entités-types (SECTEUR, etc.) Le diagramme conceptuel correspondant est le suivant (à noter qu’un secteur est rattaché exactement à une entité) :

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Si possible, j'aimerai une réponse de CinePhil et/ou Fsmrel à la question que j'avais posée. Cependant, toutes les contributions sont les bienvenues.

    J'ai été assez surpris par cette règle qui va à l'encontre de ce que j'ai pu apprendre dans ma formation d'informaticien. J'ai vérifié dans un livre, la règle mentionnée est celle émise par SqlPro.

    J'aimerai une précision :

    Citation:
    il faut éviter les clés étrangères NULL
    Pourriez-vous me dire pour quelles raisons exactement ? Le système me semble fonctionner même si nous avons des clés étrangères NULL.

    Merci
    En fait, ce qui me pose problème, c'est le cas d'une relation binaire de type 0,1 - 0,n. Je comprends l'intérêt de créer une table associative pour éviter les clés étrangères NULL, mais cela me semble aller à l'encontre de ce qui préconisé dans la scolarité de nos futurs informaticiens. La règle habituellement enseignée me semble être :
    "L'identifiant de l'entité "père" devient un attribut de la table "fils". Cet attribut est une clé étrangère."

    Donc si le jour de l'examen un étudiant créé une table associative pour une relation père-fils 0,1 - 0,n, j'ai bien peur que le correcteur (en raison de son ignorance) ne lui donne pas la note maximale. Qu'en pensez-vous ?

    Merci.

  13. #13
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Tant qu’on en reste à l’aspect structurel des choses, faire intervenir NULL ça ne mange pas de pain, mais quand on prend en compte les aspects manipulation et intégrité, ça se gâte.


    Citation Envoyé par MacFly58 Voir le message
    En fait, ce qui me pose problème, c'est le cas d'une relation binaire de type 0,1 - 0,n. Je comprends l'intérêt de créer une table associative pour éviter les clés étrangères NULL, mais cela me semble aller à l'encontre de ce qui préconisé dans la scolarité de nos futurs informaticiens. La règle habituellement enseignée me semble être :
    "L'identifiant de l'entité "père" devient un attribut de la table "fils". Cet attribut est une clé étrangère."
    Tout d'abord, NULL est interdit de séjour dans la théorie relationnelle (familièrement Relationland). Maintenant, si les enseignants enseignent ce qu'ils veulent, de leur côté les ingénieurs s’engagent vis-à-vis de la maîtrise d’ouvrage dans les entreprises quant à la validité du contenu de la base de données. Que l’on enseigne les mêmes approximations et erreurs depuis plus de vingt ans est une chose, s’engager comme je le fais en tant que spécialiste des bases de données en est une autre et j'adhère évidemment à la théorie (et je vous laisse deviner ce que j’enseigne quand cela m’arrive).

    Par ailleurs il ne semble pas que tous les professeurs aient la même position, voyez par exemple la discussion ouverte par Nico128. Au cours de cette discussion, j’ai écrit :

    Citation Envoyé par fsmrel Voir le message
    La théorie relationnelle serait mise en échec si l’on y acceptait le Bonhomme NULL, lequel est accessoirement un inhibiteur pour l’optimiseur d’un SGBDR, car les lois de transformation utilisées pour rendre les requêtes plus performantes sont mises en échec (une équivalence telle que r JOIN rr qui est au cœur de ces lois ne vaut plus ; A = B et B= C n’implique plus que A = C, etc.) Vous comprendrez que je respecte scrupuleusement la théorie relationnelle...
    Prenons le cas du théorème de Heath, omniprésent dans la normalisation des bases de données :
    Si la relation R (A, B, C) satisfait à la dépendance fonctionnelle A B, alors R peut être décomposée selon ses projections R1 (A, B) et R2 (A, C), avec préservation du contenu de la base de données, c'est-à-dire que l’on retrouve très exactement R par la jointure naturelle de R1 et de R2.
    Ce théorème ne tient plus si A peut prendre des valeurs nulles. Par exemple, si R est ainsi représentée ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R ( A,     B,    C )
        a1     b1    c1 
        NULL   b2    c2
    Les projections R1 et R2 sont les suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R1 ( A,     B )            R2 ( A,     C )
         a1     b1                  a1     c1
         NULL   b2                  NULL   c2
    Et la jointure naturelle de R1 et R2 n’est pas égale à R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    R’ ( A,     B,    C )
         a1     b1    c1

    Un exemple de lecture intéressante, avec l' intervention de deux grands spécialistes des bases de données relationnelles, Hugh Darwen et Fabian Pascal :
    A propos de la norme SQL :
    The data type boolean comprises the distinct truth values True and False. Unless prohibited by a NOT NULL constraint, the boolean data type also supports the truth value Unknown as the null value. This specification does not make a distinction between the null value of the boolean data type and the truth value Unknown that is the result of an SQL <predicate>, <search condition>, or <boolean value expression>; they may be used interchangeably to mean exactly the same thing.
    Vous avez bien lu ? Selon la norme, il revient au même de dire : « Je ne sais pas » et « Je sais que l’information est absente » ! Si ceux qui font la norme profèrent de telles énormités, il serait donc souhaitable que les professeurs attirent l’attention de leurs élèves sur les risques encourus, NULL c’est aussi de la dynamite.

    Questions :

    Peut-on dire que NULL = NULL ?

    A quoi ressemble le résultat de NULL * NULL, de NULL / 0 ?

    Etc., etc., etc.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    J'ai consulté la doc de quelques universités, et je n'ai pas encore trouvé deux professeurs qui enseignent la même chose, c'est consternant.

    Et le professeur de Nico128 commet quand même une erreur sur la clé primaire de la table Association...

    Pour ma part, il est clair qu'actuellement les arguments de Fsmrel m'ont convaincu.

    Je vais clôturer ce topic car j'ai déjà largement fait dévier le sujet initial. Mais je compte bien refaire un topic pour faire le point sur les règles à suivre, et voir s'il faut corriger la FAQ. J'espère que le rédacteur de la FAQ pourra nous y aider, Nanci semble être également un éminent spécialiste.

    Quoiqu'il en soit, merci pour le partage de vos connaissances encyclopédiques.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de référence circulaire
    Par ZHNEE dans le forum Excel
    Réponses: 10
    Dernier message: 07/04/2015, 08h42
  2. problèmes de références circulaires
    Par issoram dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/05/2012, 19h23
  3. [XL-2007] Problème de références circulaires
    Par ESVBA dans le forum Excel
    Réponses: 2
    Dernier message: 18/05/2010, 13h51
  4. [AC-2003] Problème de référence circulaire
    Par keving01 dans le forum Modélisation
    Réponses: 1
    Dernier message: 07/10/2009, 10h32
  5. [E-03] Problème de référence circulaire
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2009, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo