Bonsoir,
Envoyé par
pacmann
Ce n'est qu'un point de vue, et je me ferai surement démolir quand un vrai matheux lira ça
N’étant aucunement mathématicien, je resterai sur une prudente réserve, tout en étant d’accord avec le distinguo relation vs sous-ensemble. Je pense que nous sommes tous marqués par l’utilisation systématique du concept de table, cette dernière n’étant qu’une image à deux dimensions d’une réalité bien différente.
En échange, je vous invite à méditer quelques réflexions de Ronald Fagin (Ph.D. in Mathematics, University of California at Berkeley. Thesis: Contributions to the Model Theory of Finite Structures), connu pour avoir découvert et théorisé les 4e et 5e formes normales, et dont j'extrais quelques lignes de l'hommage qu'il rendit à Codd (mort en 2003) :
... Ted did everything necessary to make the relational model succeed. First, he laid such a solid mathematical foundation for it that theorists like me could have a field day deriving results about it, practitioners could obtain clean and efficient implementations of it, and users could understand it intuitively and use it effectively...
Que dire d’autre ?
Il ne faut pas oublier qu’à l’époque à laquelle Ted Codd a inventé le modèle relationnel, les systèmes de bases de données fonctionnaient comme des systèmes de gestion de fichiers certes très sophistiqués, mais nous ne manipulions que des enregistrements, les uns après les autres, laborieusement. Il n’y avait aucun modèle théorique, pas d’algèbre, rien (et je sais de quoi je parle, j’ai chahuté bien des SGBD pré-relationnels pendant une quinzaine d’années, j’en ai même réécrit un à la demande d’un de mes clients, il y a plus de 30 ans...ouille !) Il a fallu que ce soit Codd lui-même qui théorise le modèle réseau de Bachman, pour en démontrer au passage les faiblesses inhérentes et rédhibitoires.
Envoyé par
pacmann
Les notions "relation" et "sous-ensemble du produit cartésien" sont clairements "en bijection", puisqu'il s'agit même d'une définition.
Pourtant, quand on dit "sous-ensemble du produit cartésient", on se concentre sur la notion ensembliste d'inclusion.
Avec la définition d'une nouvelle notion "relation", on répond à un nouveau besoin.
Et même si toutes les nouvelles notions inhérentes sont totalement traduisibles en opérations de base sur des ensembles,
le fait d'utiliser l'un ou l'autre des vocabulaires n'est pas anodine.
Je peux me tromper, mais je ne pense pas que Jeffrey Ullman ait été plus troublé que Fagin par cette dualité, pas plus que les professeurs Delobel, Adiba, Gardarin, Miranda, Bouzeghoub et cie (pour citer des Français). Cela dit, dans son ouvrage "The Relational Model for Database Management: Version 2" (Reading, Mass.: Addison-Wesley, 1990), écrit 20 ans après son article fondateur, Ted Codd écrit à la 2e page :A relation in the relational model is very similar to its counterpart in mathematics.
Et de la même façon, les opérateurs relationnels ne sont pas exactement ceux qu’on utilise en mathématiques. Ainsi, concernant le produit cartésien U = S X T, je cite Codd :In textbooks on mathematics the usual explanation is that U
is the set of all tuples of the form< < a1,a2, ..., am >, < b1, b2, ..., bn > >,
where < a1,a2, ..., am >
is a tuple of S
and < b1, b2, ..., bn >
is a tuple of T
... For purposes of database management, it is more useful to adopt a slightly different definition, and to say that U
is the set of all tuples of the form< a1,a2, ..., am, b1, b2, ..., bn >.
Etc. Comme en plus, l’ordre des éléments n’intervient plus du fait de l’utilisation d’attributs nommés, le produit cartésien relationnel est commutatif et associatif (ce qui est intéressant pour un optimiseur).
Vous remarquerez que l’opérateur relationnel UNION est lui aussi différent de l’UNION au sens traditionnel, il en est une extension du fait de sa contrainte d’union-compatibilité.
Envoyé par
pacmann
En fait, j'identifie exactement la différence entre "sous-ensemble du produit cartésien" et "relation" à celle entre "JOIN" et "WHERE"
Pourquoi pas ? Mais autant "sous-ensemble du produit cartésien", "relation", "JOIN" sont rigoureusement définis, il est difficile d'en dire autant, mathématiquement parlant, de la clause "WHERE" de SQL. C’est un mot-clé du langage, bien défini au plan de la syntaxe par la norme SQL, mais que l’on peut finalement interpréter plus ou moins chacun à sa façon. Au fond, avec SQL qui s’est voulu non procédural (par opposition aux systèmes pré-relationnels), on propose de manière déclarative sa requête à l’aide du célèbre triplet SELECT/FROM/WHERE, au système de se débrouiller.
Cela dit, WHERE est aussi un autre nom pour l’opérateur de restriction du modèle relationnel. Je cite Chris Date, le complice de Ted Codd :Soit a une relation d’attributs X, Y, ..., Z et soit p une fonction vérifonctionnelle dont les paramètres sont, précisément, un certain sous-ensemble de X, Y, ..., Z. Alors la restriction de a selon pa WHERE p
est une relation dont l’en-tête est identique à celui de a et dont le corps est constitué de tous les tuples de a tels que p est évaluée à VRAI pour les tuples considérés.
Ainsi, on a développé des notions sur les relations comme par exemple la composition.
En 1969, Codd avait défini un opérateur de composition :Given relations A(Y,Y) and B(Y,Z), the composition of A with B is the projection on X et Z of a join of A with B...
Mais en 1972, cet opérateur a disparu.
Je crois qu’on pourrait discuter encore bien longtemps de tout cela...
Un dernier mot concernant l’algèbre relationnelle. Selon Chris Date, Codd préférait le calcul relationnel à l’algèbre relationnelle. QUEL, le langage du SGBDR Ingres (ancêtre de Postgres) est bâti sur ce calcul. Malheureusement, on peut considérer que SQL a eu sa peau...
Amicalement et relationnellement,
fsmrel
Partager