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

Langage SQL Discussion :

Jointure, jointure, vous avez dit jointure ? [Débat]


Sujet :

Langage SQL

  1. #41
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Citation Envoyé par pacmann Voir le message
    la définition de l'opérateur de jointure matérialise une notion intuitive de lien. La notion définie / le concept créé a bien plus d'importance que la définition en elle-même
    Je ne saisis pas tout à fait le sens de votre remarque, mais j'ai l'impression que vous reprochez quelque chose à Ted Codd (qui, ne l'oublions pas, avait à convaincre des informaticiens et les comptables d’IBM plutôt que des mathématiciens). Peu importe. La notion intuitive de lien c’est bien, mais encore faut-il avoir les moyens d’identifier les « bons » liens. Par exemple, je vous propose l’image suivante, extraite de l’article de Date, An analysis of Codd's contribution to the Great Debate, illustrant deux types de liens entre tables :



    A gauche, dans le style coddien, le lien entre les tables DEPT et EMP n’est pas matérialisé (la jointure naturelle DEPT JOIN EMP fait office), alors qu’à droite, le lien matérialisé DEPTEMP cache en fait un jeu de pointeurs, permettant de naviguer de DEPT vers EMP et inversement. Sur la base de la définition rigoureuse du Modèle Relationnel de Données, (y-compris des opérateurs que nous avons évoqués), il a quand même fallu un bon moment pour que les partisans de la solution de droite avouent reconnaître la supériorité incontestable et écrasante de l’autre, dont la force tient pour beaucoup à sa simplicité. Ted Codd avait fait preuve de beaucoup de discernement, en réalité de génie, pour se contenter de l’image de gauche, qui traduit la définition de son principe de l’information (Information Principle) :
    « All information in the database must be cast explicitly in terms of values in relations and no other way. »
    En cela, on peut reconnaître que le concept créé a plus d’importance que la définition elle-même, mais, comme vous le faites observer en citant les Principia, faire abstraction de celle-ci est pénalisant.

    A ce sujet, permettez-moi une incidente (j'aime bien les incidentes). Comme je le raconte parfois ici, un « Grand débat » a eu lieu à Ann Arbor, en 1974, en réalité une joute décisive qui opposa Ted Codd à Charles Bachman (je n’ai pas dit Pachman...), champion des bases de données dites réseau (ou CODASYL). A l’occasion de son entraînement de préparation, Codd prit le soin, a posteriori, de fournir une définition pour le modèle réseau, chose qui paradoxalement n’avait jamais été faite ! bien que les bases de données y adhérant fussent très en vogue. Codd put ainsi mettre au jour les faiblesses de ce modèle. La tactique fut payante et dès le 1er round il envoya son rival mordre la poussière. Bachman n’était pourtant pas le premier venu, et avait même obtenu la Turing Award l’année précédente. Dix ans plus tard, arriva DB2, le premier SGBD relationnel capable non seulement de rivaliser, mais de littéralement surclasser (sur tous les plans) les SGBD réseau, et en très peu d’années ceux-ci furent balayés, au point que Bachman dut se résoudre à concevoir puis vendre (la feau des pesses) un outil permettant de migrer vers le relationnel. De la même façon, les promoteurs de Merise se mirent à décrire la production d’un modèle logique non plus basé exclusivement sur l’approche réseau, mais sur le Modèle Relationnel de Données (auquel ils n’ont du reste pas compris grand chose...) Ensuite, à grands renforts de trompettes, on nous annonça que les SGBD OO allaient supplanter les SGBD R. Certes, l’approche OO a beaucoup apporté avec le typage fort des données et l’héritage, mais elle a aussi pris un risque en se dispensant du principe de l'information énoncé plus haut, et en utilisant le mécanisme des pointeurs, habillés en identificateurs d’objets. Anyway, je ne sache pas que les SGBD R aient connu le sort qui leur était promis, celui des SGBD de type réseau (que nous sommes peu nombreux à savoir encore programmer, soit-dit en passant).


    Citation Envoyé par pacmann Voir le message
    Je ne sais pas exactement ce qu'est ou n'est pas une primitive (et donc en quoi Codd ne considérait pas la jointure comme une primitive !)
    Il es vrai que le terme est ambigu. Par exemple, pour les théoriciens de Merise, une primitive est une action élémentaire :
    Accès à une ligne d’une table par sa clé. Ajout d’une ligne, etc. Le but de la manœuvre est de calculer le coût des accès, disons en nombre d’entrées/sorties pour faire court. Cela avait un sens avec un SGBD réseau, mais ne signifie plus rien avec un SGBD R, car l’optimiseur a ses algorithmes et heuristiques qui invalident la plupart de ces calculs laborieux : en tant que vieux routier de l’administration des bases de données, je sais de quoi je parle.

    Dans le contexte du Modèle relationnel, primitive est un raccourci pour opération primitive, c'est-à-dire une opération qu'on ne définit pas au moyen d'autres opérations. Inversement, certaines opérations ne sont pas primitives parce qu’elles peuvent être définies à partir d’autres opérations. Ainsi, l'intersection est à considérer comme une opération qui n'est pas primitive, car a INTERSECT b revient à a MINUS (a MINUS b), ou b MINUS (b MINUS a).

    Je rappelle au passage quelques définitions telles qu’on les trouve chez Date (An Introduction to Database Systems, 8th edition).

    Produit cartésien (relationnel) :
    a TIMES b
    Le produit cartésien relationnel de deux relations a et b, a TIMES b, où a et b n’ont aucun attribut en commun, est une relation dont l’en-tête est l’union (au sens ensembliste) des en-têtes de a et de b, et dont le corps est constitué de l’ensemble des tuples t tel que t est l’union (au sens ensembliste) d’un tuple appartenant à a et d’un tuple appartenant à b. Clairement, le produit cartésien relationnel est une extension du produit cartésien de la théorie des ensembles (notamment, TIMES est commutatif et associatif).
    L’opérateur TIMES peut être considéré ici comme primitif.

    Restriction :
    a WHERE X θ Y
    La θ-restriction (restriction pour abréger) d’une relation a sur les attributs X et Y, a WHERE X θ Y est une relation ayant le même en-tête que la relation a et dont le corps est constitué de tous les tuples de a pour lesquels a WHERE X θ Y prend la valeur VRAI. L’opérateur WHERE peut être considéré ici comme primitif.

    L’opération de θ-jointure revient conceptuellement à un produit cartésien (relationnel) de deux relations, suivi d’une θ-restriction :
    (a TIMES b) WHERE X θ Y
    Dans ces conditions, l’opération de θ-jointure n’est donc pas ici une opération primitive. Par voie de conséquence, il en va de même pour l’opération de jointure naturelle.

    Maintenant, on peut adopter une attitude différente et considérer la jointure naturelle comme une opération primitive, ce que fait Chris Date, qui la note ainsi :
    a JOIN b
    Vous observerez qu'on ne précise pas quels attributs participent à l’opération : ce sont ceux qui, dans les relations a et b ont même nom (et sont évidemment du même type).

    Si les deux relations n’ont aucun attribut en commun, alors cette opération revient à un produit cartésien (on peut donc se passer de l’opérateur TIMES).

    De même, si les deux relations sont du même type, c'est-à-dire si tous leurs attributs participent à l’opération, alors cette opération revient à une intersection (on peut donc se passer de l'opérateur INTERSECT, mais pour le confort de l'utilisateur, il est préférable de n'en rien faire...)

    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.

  2. #42
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    A gauche, dans le style coddien, le lien entre les tables DEPT et EMP n’est pas matérialisé (la jointure naturelle DEPT JOIN EMP fait office), alors qu’à droite, le lien matérialisé DEPTEMP cache en fait un jeu de pointeurs, permettant de naviguer de DEPT vers EMP et inversement. Sur la base de la définition rigoureuse du Modèle Relationnel de Données, (y-compris des opérateurs que nous avons évoqués), il a quand même fallu un bon moment pour que les partisans de la solution de droite avouent reconnaître la supériorité incontestable et écrasante de l’autre, dont la force tient pour beaucoup à sa simplicité. Ted Codd avait fait preuve de beaucoup de discernement, en réalité de génie, pour se contenter de l’image de gauche, qui traduit la définition de son principe de l’information (Information Principle) :
    « All information in the database must be cast explicitly in terms of values in relations and no other way. »
    Pour aller dans ce sens, la norme SQL a évolué dans sa version SQL:1999 en proposant une abomination qui est le rajout du type REF... qui fournit un identifiant interne, masqué, un peu à la manière de pointeurs... Peu d'éditeurs de SGBDR ont implémenté ce type, et je ne connais pas de base de données en production dans lequel cela existe ! (et heureusement)

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #43
    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
    Oh le réveillage de post, Fred !

    Ce que tu décris ne ressemble t-il pas au ROWID de Oracle ?
    Ou bien je n'ai rien compris à ton message ?
    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 !

  4. #44
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour les enfants,


    Pour un réveillage, c’est un réveillage ... Ben Philippe, tu tombes bien, puis-je te demander un service ? En revoyant cette discussion, je constate que j’avais fourni à l’époque (vous étiez bien jeunes tous les deux ^^) des images qui depuis ont disparu... Je trolle, mais dans ta grande bonté, pourrais-tu changer les liens (REF ) ?


    1re image : post #5, sous le texte « Le temps d’exécution est d’environ une seconde et le plan d’exécution est le suivant : »

    Remplacer [img]http://img247.imageshack.us/img247/3298/sqlserverexplainfromjoije1.jpg[/im*] par :






    2e image : post #5, sous le texte « Alors le plan d’exécution est le même (ainsi donc que le temps d’exécution) : »

    Remplacer [img]http://img186.imageshack.us/img186/3488/sqlserverexplainfromwhepw6.jpg[/im*] par






    3e image : post #24, remplacer [img]http://img80.imageshack.us/img80/1671/tweedleeh4.jpg[/im*] par




    Je te remercie !
    (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.

  5. #45
    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
    C'est fait.
    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 !

  6. #46
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Merci Philippe !
    (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.

  7. #47
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Oh le réveillage de post, Fred !

    Ce que tu décris ne ressemble t-il pas au ROWID de Oracle ?
    Ou bien je n'ai rien compris à ton message ?
    Hélas oui !!!! A chaque fois que je voit des Oracliens, des Oracleurs ou des Oraclettes qui me sortent cette abomination j'ai envie de les tuer... Un peut à la Raoul Volfoni !


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #48
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Attention Fred ! les or* vont t'envoyer faire un séjour chez Dugoineau...



    (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.

  9. #49
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Bonjour,

    Je prend aussi la pelle pour détérer se post mais c'est cette discution là que je recherche pour avoir une réponse. J'ai vu sur developpez.net un sujet sur les jointures externes et SQLPro (Désolé je balance) disait en résumé; de faire attention aux résultat envoyé via des jointures externes selon le SGBD, en effet ça peut avoir des résultats différent. Mais je retrouve plus son intervention.
    Ai-je rêvé ou non ?
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  10. #50
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par berceker united Voir le message
    J'ai vu sur developpez.net un sujet sur les jointures externes et SQLPro (Désolé je balance) disait en résumé; de faire attention aux résultat envoyé via des jointures externes selon le SGBD, en effet ça peut avoir des résultats différent. Mais je retrouve plus son intervention.
    Ai-je rêvé ou non ?
    Non tu n'as pas rêvé !!!

    En effet, avant que les jointures externes n'aient été normalisées, chacun les faisaient à sa sauce et entre éditeurs cela n'était pas forcément compatible.

    Exemple : ORACLE avec (+)= et SQL Server avec *=

    Hé bien ceci ne donne pas les mêmes résultats....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #51
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Et bien en fait, je me suis souvenu que c'était moi qui avais posé la question et j'ai retrouvé ta réponse expliquant que les jointures externes coté Sybase étaient mathématiquement fausses.
    http://www.developpez.net/forums/d10...e/#post6723145
    Et tu as posé un excellent lien sur ce sujet et c'est ça que je cherchais : http://www.developpez.net/forums/d10...e/#post6723145

    Merci encore
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

Discussions similaires

  1. Réécriture d'adresse, vous avez dit "simple" ?
    Par Olivier Regnier dans le forum OVH
    Réponses: 10
    Dernier message: 31/12/2007, 06h31
  2. [ORA-00947]Vous avez dit bizarre ?
    Par 0xYg3n3 dans le forum Oracle
    Réponses: 0
    Dernier message: 29/09/2007, 16h21
  3. Intel vous avez dit Intel
    Par venomelektro dans le forum OpenGL
    Réponses: 7
    Dernier message: 14/10/2004, 19h25

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