Bonjour,
Une discussion entre CinePhil et FsmRel m'interpelle :
FmsRel:
Citation:
Envoyé par CinePhil Voir le message
Vous affaiblissez le degré d’abstraction et vous prenez le contrepied de Codd (RIP) et Date sans lesquels on en serait resté aux bases de données hiérarchiques, navigationnelles et autres listes inverses, s’ils n’avaient justement élevé le degré d’abstraction. En proposant l’opérateur NATURAL JOIN, la norme SQL a repris strictement les écrits de Date, à ceci près que dans le contexte de la théorie relationnelle, pour effectuer la jointure naturelle de A et B on écrit simplement A JOIN B. Ainsi, la jointure est effectuée sur les attributs ayant même nom (et même type, cela va sans dire). Si deux attributs n’ont pas même nom, pour la jointure on en renomme un au sein de la requête à l’aide de l’opérateur RENAME (comme en SQL on renomme au moyen de AS). Autrement dit, la recommandation implicite de Date est la suivante : si le même attribut (par exemple l’identifiant de la personne) figure dans des tables différentes, donnons-lui le même nom.Je n'aime pas le NATURAL JOIN, justement parce qu'il ne précise pas sur quelles colonnes porte la condition de jointure ; je ne l'emploie jamais.
Imaginons une jointure naturelle entre 2 tables. Dans ces 2 tables, 3 colonnes portent le même nom.
Si j'écris une requête NATURAL JOIN, comment le moteur relationnel va retrouver ses petits ? Comment choisi-t-il une colonne plutôt qu'une autre ?
Sachant bien sur que je m'amuse souvent à modifier les types et que j'ai une fâcheuse tendance à rajouter ou supprimer des colonnes quand le cœur m'en dit.
Actuellement j'utilise NATURAL JOIN aussi souvent que CinePhil car cela me semble sage. Mais la sagesse n'est pas incompatible avec l'ignorance, et j'aimerai creuser un peu ce sujet.
Merci.
Partager