|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 424 ![]() |
ça va trop vite, je voulais me prendre le temps de me pencher sur le sujet avant d'intervenir...
Mais je n'ai pas pu résister parce que le dernier post de fsmrel à attisé ma curiosité ! J'ai du commencer par chercher la définition de tous les termes employés R1 X R2 = R1 : c'est une équation ? Si oui, sur quoi porte l'égalité ? => Sur l'intention : l'égalité n'a pas de solution, si on suppose qu'une intention ne peut être l'ensemble vide (au sens degré nul). Sinon, toute R2 est solution (parce que le vide, ça absorbe énormément) => Sur l'extention : Si on définit l'extention du produit cartésien comme le produit cartésien mathématique (SELECT R1.*, R2.*) on ne peut avoir l'égalité à moins que l'extention de R1 soit vide (c'est à dire aucune donnée) Par contre, avec un tout petit abus de langage, on peut considérer que lorsque le cardinal de R2 (je pense au cardinal de son extention) vaut 1, R1 * R2 ressemble beaucoup à R2. Je crois qu'on peut dire que R1 est simplement une projection de R1 * R2 (Un peu d'indulgence s'il vous plait, même en y mettant toutes mes forces, j'ai un peu de mal à conceptualiser le truc...) |
|
00
|
|
|
#22 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 632 ![]() |
Citation:
Si la valeur de R1 est r1 et celle de R2 est r2, alors on veut que la valeur du résultat du produit cartésien soit r1... Cela aboutit à quelques contraintes sympathiques. Soit n1 le degré de R1 (le nombre d’attributs de son en-tête) et n2 le degré de R2. Soit c1 le cardinal de R1 et c2 celui de R2. Toujours au sens de Codd, le degré de la relation résultant du produit cartésien est égal à n1 + n2 et son cardinal est égal à c1 x c2. Comme vous l’avez souligné, on doit vérifier : n1 + n2 = n1La conclusion est intéressante quant aux propriétés de r2... Il s’agit en réalité d’une constante faisant partie du Modèle Relationnel de Données et elle s’appelle Table_Dee (elle a du reste une petite sœur qui s’appelle Table_Dum). Si vous avez cinq minutes, je vous suggère à ce sujet de jeter un coup d’œil à un article de Chris Date, mais ne vous sentez quand même pas obligé, tout ceci n’est qu’une récréation... Incidemment, pour produire Table_Dee en SQL, il faudrait que l’on soit autorisé à écrire quelque chose comme : SELECTou plus simplement : ;Quant à produire Table_Dum : SELECTRigolo, non ?
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
00
|
|
|
#23 | |
|
Membre confirmé
![]() Inscription : juillet 2005 Messages : 405 ![]() |
Citation:
C'est sans doute parce que mes récréations se passe devant une mousse et une partie de cartes
|
|
|
|
00
|
|
|
#24 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 632 ![]() |
Bonjour Marchand de sable,
Citation:
Table_Dee et Table_Dum sont de curieux petits personnages, sortis de l'imagination de Hugh Darwen, tandis qu'il avait en tête la comptine de Tweedle Dee et de Tweedle Dum qui récitèrent leurs poésies à Alice quand celle-ci fut passée de l'autre côté du miroir. Comme vous êtes amateur de cartes, je vous conseille de jeter un coup d'oeil au Double Dummy Corner de Hugh. ![]() Pour mémoire, je rappelle que c'est grâce à Hugh qu'en SQL vous pouvez utiliser des expressions de tables dans la clause FROM : ... FROM [...,] (SELECT ... FROM ... ) ...
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
00
|
|
|
#25 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 424 ![]() |
Bonsoir !
fsmrel, marchand_de_sable : effectivement, c'est très divertissant. Et ça fait vraiment plaisir de s'adresser à un spécialiste qui accepte de répondre à des novices Par rapport à l'article de Cris Date, je crois qu'on m'avait déjà fait ce genre de blague, mais avec une phrase du genre "je mens toujours". Si je mens toujours, la phrase est vraie, il y a un problème puisque je viens du coup de dire la vérité... Mais quant à la relation table_dee, ne peut-on pas se poser la même question que pour la proposition mise en défaut dans son article ? C'est à dire : la relation table_dee existe-t-elle vraiment ou encore table_dee est-elle une relation ? En fait, l'existence de la table_dum me pose moins de problème, puisque, d'un point de vue intention, c'est l'ensemble vide. Mais pour moi, la définition de la table_dee revient à considérer un élément appartenant à l'ensemble vide... Soit R, tel qu'il existe une suite finie d'ensemble A1, ..., An et R est inclus dans A1 x ... x An. Alors considérer la relation que n=0, c'est juste définir un cas limite, soit considérer que l'ensemble vide est un élément de l'ensemble des relations. Mais dire qu'il existe a € R dans ce cas, ne serait-ce pas simplement faux ? Sinon, comment définit-on le fait d'appartenir à une relation ? |
|
00
|
|
|
#26 |
|
Membre confirmé
![]() Inscription : juillet 2005 Messages : 405 ![]() |
Arrfff, je ne connaîs pas le Bridge...
Mais je garde le lien, il serait peut-être temps que je m'y mette. |
|
|
00
|
|
|
#27 | ||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 424 ![]() |
Je me permets de revenir sur un vieux post de fsmrel !
Citation:
Je ressens la clause SELECT comme un opérateur très fonctionnel (par opposition à la relation simple : elle effectue un lien n..1 entre deux ensembles), qui s'applique sur le sous-ensemble du produit cartésien. C'est un peu faux et simpliste, mais bon... Citation:
SELECT * FROM A, B ne donne pas la même chose que SELECT * FROM B, A puisque le résultat n'est pas considéré comme un ensemble de champ, mais bien comme une séquence. Si on peut s'abstraire de cet ordre, c'est parce qu'on connaît l'ordre qui a été choisi au moment de la requête, ou qualifier les champs du résultat. Cela revient à considérer, plutôt que le n-uplet <a1, ..., an>, l'ensemble des couples {<nom1, a1>; ...; <nomn, an>}, ou encore considérer non pas le sous-ensemble du produit cartésient, mais la donnée de ce sous-ensemble et d'un élément appartenant à l'ensemble des intentions... Quant à l'associativité, elle découle naturellement de "l'abus de langage" (ou simplification de notation) de CODD. Ce genre de chose doit être assez courante. Genre quand on considère qu'une matrice réelle de taille (1, 1) est un réel, ou encore le polynôme P avec la fonction x -> P(x), ... Citation:
C'est un peu comme si on considère l'addition sur les réels, l'addition sur les entiers 5 * 1,5 est parfaitement défini sur les réels, mais si on considère le '+' du groupe des entiers (N, +), cela n'a pas de sens de dire 5 + 1,5... Le but de ces remarques, c'est juste de dire que je ne trouve pas qu'on s'éloigne de la théorie mathématique, mais plutôt qu'on "l'approfondit", qu'on la spécialise dans une direction. Qu'on en "hérite" (pour faire informaticien Citation:
Nous avons de manière de voir les choses : - considérer la relation R=A x B, puis R'=a WHERE p (avec a € R) - considérer A Join B ON p. Si le résultat est le même après passage de l'optimisateur, d'un point de vue conceptuel, ça peut s'interpréter différemment : p est soit un lien logique entre deux ensembles, ou p est simplement la caractérisation d'un sous ensemble... |
||||
|
00
|
|
|
#28 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 632 ![]() |
Bonsoir,
Citation:
Citation:
Une relvar (variable relationnelle) prend successivement des valeurs qui sont des relations. Toute relvar est astreinte à être dotée d’une clé. Une relvar de degré zéro n’échappe pas à la règle et elle a pour clé l’ensemble vide, ø. Incidemment, il n’est pas interdit qu’une relvar de degré > 0 ait ø pour clé : ceci permet par exemple de limiter à un le nombre de tuples de cette relvar (cas par exemple de la racine d’une structure arborescente), même s’il existe d’autres moyens, moins élégants d’assurer la contrainte.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
||
|
|
00
|
|
|
#29 | |||||
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 632 ![]() |
Citation:
SELECT colx, coly, ...il suffit de présenter ainsi les choses, c'est-à-dire dans l’ordre selon lequel les choses se passent (au moins conceptuellement) : FROM ...SELECT est l’opérateur qui permet de présenter le résultat final, par projection sur colx, coly, .... Dans le contexte de la tambouille SQL, ce résultat n’est pas forcément une relation car les doublons y sont autorisés : si l’on a le moindre doute, il est prudent d’utiliser la clause DISTINCT. Malgré cela, le résultat peut encore ne pas être une relation : les colonnes ne sont pas nécessairement nommées et l’on peut avoir des doutes quant à leur domaine de référence. Il est possible aussi de faire figurer plusieurs fois la même colonne... Par ailleurs, ce résultat peut comporter des valeurs nulles, auquel cas il peut s’avérer impossible de respecter l’intégrité d’entité (toute relation doit être munie d’une clé et celle-ci ne peut pas comporter d’attribut pouvant être marqué null). Citation:
SELECT A.*, B.*Les produits A TIMES B et B TIMES A donnent lieu au même résultat, en revanche, dans un 2e temps, c’est bien le simulacre de projection qui produit des résultats différents. Citation:
Citation:
Citation:
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|||||
|
|
00
|
|
|
#30 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Petite chose importante : oui le plan d'exécution est le même (ou devrait l'être) que la jointure INTERNE se fasse dans le where ou dans le JOIN.
Pour les jointures externes, ce n'est pas la même chose car chaque éditeur ayant fait a sa tête, ni la syntaxe ni les résultats ne sont les mêmes... Par exemple les jointures externes de SQL Server avec *= ne donnent pas les mêmes résultats que le OUTER JOIN ! En revanche en ce qui concerne SQL Server, l'optimiseur tire partit de beaucoup de choses, y compris les contraintes. Par exemple vous serez surpris de constater que la plan de requête change si vous cherchez une valeur négative sur une colonne pourvue d'une clause CHECK avec VALUE > 0... Et là ce n'est plus de l'optimisation de la requête que nous devons parler, mais de l'optimisation du plan lui même. En effet avec les JOIN, l'optimiseur pré suppose que la jointure est naturelle et que dans ce cas les colonnes en jeu sont indexées ce qui la plupart du temps s'avère exact (sauf aux rigolos qui n'ont toujours pas compris ce qu'étais un SGBD relationnel et s'obstinent à éviter les contraintes d'intégrité référentielles et les index qui vont avec... mais bon passons). Autrement dit : avec un modèle respectant les règles de l'art et dont les clefs étrangères sont proprement indexées, l'optimiseur passera moins de temps à trouver le plan parfait. Ou plus exactement il aura plus de chance dans le temps qui lui est impartit, de trouver le meilleur plan de requête. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#31 |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 632 ![]() |
Bonsoir SQLpro,
A propos des erreurs commises par certains optimiseurs, je vous conseille la lecture de A cure for Madness (1re partie) de Chris Date, ainsi que la suite qu'il en a donnée : A cure for Madness (2e partie). Peut-être avez-vous déjà lu ces articles, quoi qu'il en soit, chacun peut vérifier très rapidement que SQL Server n'est pas délinquant en ce qui concerne le problème particulier évoqué par CJD...
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
00
|
|
|
#32 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Oui, je connais bien ce test, assez rigolo, que je passe de temps en temps pour savoir comment se comporte certains moteurs SQL !!!
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#33 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Citation:
L'expression de table est en fait un genre de vue introduite par le mot clef WITH et dont la particularité (outre les possibilité de récursion) est de n'exister que le temps d'exécuter la requête. A lire sur les expressions de tables : http://sqlpro.developpez.com/cours/s...te-recursives/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#34 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 632 ![]() |
Citation:
"Can a table expression be used anywhere where a table name can be used?Les gens qui font la norme ont été attentifs à ce qu’a écrit Hugh qui fut le représentant d’IBM UK dans les instances, à partir de 1988. Sans son plaidoyer, il se pourrait que l’on ne puisse toujours pas écrire : FROM t1, ..., (Select ...) As Tj, ...Pour des raisons d’antériorité et en hommage à Hugh et à ses collègues d’IBM UK qui ont fait BS12 entre 1978 et 1982 (et assassiné par le Monstre en 1985), je continuerai donc à utiliser l’expression originale "expressions de tables" ("relational expressions" dans BS12), en dépit des glissements sémantiques opérés ultérieurement par les gens de la norme. Vous pouvez retrouver l’article d'Andrew Warden dans Relational Database, Writings 1985-1989.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
||
|
|
00
|
|
|
#35 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Oui, mais ta position ne va pas faciliter la lecture des internautes.... Bref, de belles confusions en perspective !
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#36 | ||
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 165 ![]() |
Citation:
Citation:
from clause table reference |
||
|
|
00
|
|
|
#37 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
La " nested table expression " de DB2 a une toute autre signification dans la norme SQL. C'est en fait le concept de table dérivée. Les expressions de table (CTE : Common Table Expression) étant une forme proche du concept de table dérivée...
Exemple : SELECT *la partie en gras est une table dérivée WITH T ASLa partie en gras est une expression de table. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#38 |
|
Membre à l'essai
![]() Inscription : janvier 2009 Messages : 29 ![]() |
Salut à tous,
Pour ma part, la jointure se fait dans le WHERE, je pense que l'on pourrait le faire dans une autre condition mais il faut savoir toucher pour pouvoir y arriver. Voilà Bonne fin de journée à tous Bonne.Année |
|
|
00
|
|
|
#39 |
![]() ![]() |
Ben c'est une mauvaise habitude à perdre !
![]() Ce forum commence à se remplir d'exemple de requêtes qui posaient des problèmes à leur auteur parce qu'ils avaient mélangé les clauses de jointure et de restriction. En écrivant avec des jointures normalisées, l'erreur dans la requête apparaît soudainement beaucoup plus évidente !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 ! |
|
00
|
|
|
#40 | |||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 424 ![]() |
Fsmrel, quelques petites remarques :
Dans "Relational completeness of data base sublanguages", Codd donne la définition suivante de la jointure : Citation:
Citation:
Citation:
Perso, je trouve que la première définition ressemble plus à JOIN, et la seconde plus à WHERE Dans le "Principia mathematica" (qu'il faudrait que je me remette à parcourir...), on parle un peu de ce qu'est une définition (page 11), et on distingue deux types aspects : 1) L'aspect pratique. Citation:
Citation:
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 !), mais 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...
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|||||
|
00
|
Copyright © 2000-2013 - www.developpez.com