📑 Le modùle relationnel#

Il s’agit du modĂšle de SGBD le plus rĂ©pandu et utilisĂ© Ă  l’heure actuelle, nous pouvons notamment citĂ© comme SGBDR:

  • ORACLE,

  • SQLServer,

  • MySQL/MariaDB,

  • PostGreSQL,

  • SQLite, etc.

À la diffĂ©rence du modĂšle entitĂ©-association, celui-ci se base sur un seul type de structure pour reprĂ©senter les donnĂ©es: la relation (table).

Les donnĂ©es sont stockĂ©es sous forme de tables Ă  deux dimensions et manipulĂ©s par des opĂ©rateurs d’algĂšbre relationnelle.

Exemple de représentation de la relation Character#

id

firstname

lastname

job

1

Luke

Skywalker

Jedi

2

Han

Solo

Smuggler

3

Ben

Kenobi

Jedi Master

Les tables constituent la structure logique du modÚle relationnel, la cohérence est définie par un ensemble de CI.

Exemple de schéma relationnel

\[Character(\underline{id}, firstname, lastname, job)\]

Histoire du modĂšle relationnel#

Il s’agit d’un modĂšle logique, proposĂ© en 1970 par Tedd Codd, basĂ© sur la notion de relations au sens mathĂ©matique et la thĂ©orie des ensembles. Le premier SGBDR Ă  l’implĂ©menter est SQL/DS d’Oracle en 1980.

Terminologie

Relation

Une table avec des colonnes et des lignes.

Attribut

Une colonne nommée de la relation.

Tuple

(ou enregistrement) Une ligne dans une relation.

Domaine

Un ensemble de valeurs admissibles pour un ou plusieurs attributs.

Degré

Nombre d’attributs d’une relation.

Clé candidate

Ensemble minimum d’attributs qu’identifie de façon unique un tuple au sein d’une relation.

Clé primaire

La clé candidate choisie pour identifier de façon unique les tuples au sein de la relation.

Clé étrangÚre

Un ensemble d’attributs d’une relation qui correspond Ă  une clĂ© candidate d’une relation.

Passage du modĂšle EA au modĂšle relationnel#

Une fois notre modĂšle conceptuel des donnĂ©es obtenu par l’établissement d’un schĂ©ma entitĂ© association ou mieux un schĂ©ma UML, il convient de traduire celui-ci en schĂ©ma relationnel.

Traduction des entités#

Toute entitĂ© du diagramme entitĂ©/association (ou classe du diagramme de classes) est reprĂ©sentĂ©e par une relation. La clĂ© de cette relation est l’identifiant de l’entitĂ©.

https://www.plantuml.com/plantuml/svg/LOynRiCm34Ltde8dQ842sO8Ww51qoXKAMgHjrH9fKDGKvExH4Y3c-DudmNzjGHwz5foCd1UgyjUoBaMW9Ig2NnydQ5lMdPmgJfIsnQqh9olc64xQXXADjnJBJBt4ZsdSna7y7LjlkffQMjs62Uy2ODE_fC3lrmTu1nnpdxCKVk2vNpAVF_lbG7K43s3td8w4fINFUsHJU02icGMhn6hS0AwYF7e_0G==

Ainsi l’entitĂ© « Boardgame » prĂ©cĂ©dente se traduit:

\[Boardgame(\underline{id}, name, price, description)\]

Traduction des associations#

Toute association est transformée en relation. La clé de cette relation est composée de tous les identifiants des entités participantes.

https://www.plantuml.com/plantuml/svg/dP6nJWCn38PtFuLrCmM1n5PLXQ620LwXyYM-kz0ahXn7WAg-E-4ge5t9P7_-uzzEriL8hQQ8lP3waH9lgTeaMg0uYentr_T0CShxDeMFa4Sekv3tf9Im9xSRLMhsJg8ecb8khSJPpbIU1whHDfBjjRN7ftRhh9maYvjKMiMqCaGU34rGmpWP-g3iB4W6aFwjXVZuCoSU0Div386ZF-Aohe9VtjJL1SrDU07s6jmbyLoSXlriSlorUPWVuNyUGz1YCstzQc57XV65F2CLx9uBfk-u_uGEu6-TxlOgTxXOp4g0MT-o4pwD0p25HXEtn1U0DMVV_kuB

Ainsi l’association « is made by » prĂ©cĂ©dente se traduit:

\[IsMadeBy(\underline{author\_{}id, boardgame\_{}id})\]

Optimisation de la traduction des associations#

Toute associations reliĂ©es Ă  une entitĂ© avec une cardinalitĂ© de type \(0,1\) ou \(1,1\) peut ĂȘtre fusionnĂ©e avec l’entitĂ©. Dans ce cas on dĂ©place les attributs de l’association vers ceux de la relation traduisant l’entitĂ©.

Cas n°1

https://www.plantuml.com/plantuml/svg/VP71QiCm38RlUWgHSvlDXLr6AMq3OwSzmI0ejjDwTQHXosoZzDtd7WODXUaa_P_qNRJDIadB5D5ISe4f1ltfJMy0igNeSTK-0SKeN_qKlWCV89y2VrAY2GUofqEImivAb8IQY7D5dlLco_cHIjGNONsZoUDhlRh1ax3OOv9AD1KFqO-AAfZ2uQZeGl9MWp2031-rnTqPiDPv33ww2wxBXipweMncAQrcOzlEASFbJxU_qmttkk5VtN3LGSdUKlRO8MLiEcW0ThXSOlUCpUF2lBDPc0QwQxIVHR3rxEe3VW4=

Ce cas n°1 se traduit:

\[A(\underline{a1}, a2, .., an, b2, .., bn)\]

Cas n°1.1

https://www.plantuml.com/plantuml/svg/VP71QiCm38RlUWgHSvFDXLr6AMq3OwSzmQ0ejjDwTQHXosoZzDtd7WODXVswIFylVHTjibBICaMqb5nWYa5_zgOMgIQ0R2bwN7PFG37ArtuAtu4Fa4-1FodHX0FPqo59OMSbIa9DnBb6dlLco_cHIjGNONsZoUDhlRg99s6nnoGrqLGyH3yggc0AXwEY2ybR3S80CdpK5hTdmAhp67nq5roLDPdLGrdFN5hEngwRfmoNFzpk3ZVSuuP_SSCL1oLxIzbZZvInwQ6j0cl0CZG0MsnRx9-nULoOTpOBqq1_jNOp2pQUNNt8Bm==

Ce cas n°1.1 se traduit:

\[A(\underline{a1}, a2, .., an, b2, .., bn, c1, .., cn)\]

Cas n°2

https://www.plantuml.com/plantuml/svg/VP71QiCm38RlUWgHSvlDXLr6AMq3fQSzmI0ejfEwTUHXosoZzDtd30ODXUaaVR_qNRHDGb7ow55JD8x9E_bMBRTA0IHDtkAgVW7oFdose_joF42wEFwWI2Dsf2z339cD3Zv4b4YSIcHPxhQCxIbxEGIMDnej7ilLNJm63leKGqaaPWlUze8ICBhX96XSj5fSO83GdKkBkojWgMllh3StNESDgVLJtimehMPZNSzJXjkVRl-WwnvrtR-wRj91JbPJijWW9QmQg01sk5nYyuhLyqAzirge2fe9xNyHJuZBsjQoAI_u0G==

Cas n°2 se traduit:

\[\begin{split}A(\underline{a1}, a2, .., an, \#b1)\\ B(\underline{b1}, b2, .., bn)\end{split}\]

Ici \(\#b1\) est une clé étrangére au sein de la relation \(A\), une autre notation pour la clé étrangére est \(b1 \Rightarrow B\) tel que \(A(\underline{a1}, a2, .., an, b1 \Rightarrow B)\).

Cas n°3

https://www.plantuml.com/plantuml/svg/VP71QiCm38RlUWgHSvijXLr6AMq3ewS-mI0ejf9wTUHXosoZzDtd7WODXGa4qlzB7m9jarBKF7aq5AqJyav_cawwaW39a6TSrIz0teUlRdBVJaP8PoUV56d2dinvZ26BDS67Y1f9Kh5Oz6xAya3PwriGFTB4U2XRT_OK99XJ3CNHc1ay3ueQCBhnf6XTPACkb7D2_r5At5q0Irm6nzvUSPqtrAoVycQcqchMrlNS5RZ-uVOFkFuHr_-Bwsyuo8aD9SOMAM7LGWMmm-KIsrUidXVoBir2AcXlqducmPR5bX_y0W==

Cas n°3 se traduit:

\[\begin{split}A(\underline{a1}, a2, .., an)\\ B(\underline{b1}, b2, .., bn)\\ C(\underline{a1, b1})\end{split}\]

Cas n°3.1

https://www.plantuml.com/plantuml/svg/VP71QiCm38RlUWgHSvCjXLr6AMq3OwSzmI0ejjDwTQHXosoZzDtd70ODXVqWaFvV-YxQ9QMeUGfeA5hF5Bp-j3ttSv5g14Y6WiDrymGKWdpra__sV8Hqzln9aIOSo9oFKJ9R8q4YQYHE9NAiDrlMZPI3lWZh6qqENylLJJm9Ypb5AOd6x22uKL45ep-U5AsFpgWN1f3XexIulm0MNKRlWhtY9c-ftJpaxSAbzM9iccNASFt37Uvmmprk-1Stp3Z8oHbA3ZkaX5K7TH6O5i0mL01xh6lidh5wNF4xjokke9kjmyA2dMDRdl8B

Cas n°3.1 se traduit:

\[\begin{split}A(\underline{a1}, a2, .., an)\\ B(\underline{b1}, b2, .., bn)\\ C(\underline{a1, b1}, c1, .., cn)\end{split}\]

Exemple un peu plus concret

https://www.plantuml.com/plantuml/svg/dP91JWCn34NtEOKrQmeg4hkgAY0XMC0La2VnJ4CJft8IGLNrxdWARMTsYAoIzx_zuoYhN51AZG7QXE9wZ9HDjXW8Rg_l38QGFj-Z__BScxpnl4N122tQJI-fihCf984Yo5abuZ9oEUgmXlAKkBnfNtZMgf4S4oUxbgHAaKf6Lse_o1Pun49zaXti3UZQTvw2Ey2YBhrRtDJbXBAsDeTpxSDfZByNZy5Ml9qIHzcAtnQVU1HpNyjQ1_zNHkSbbzErZQcPB6Q2LtG4cA5voH27VRippKLM-YjwLdwPivbVpHkOpTHXpY-dH-NS371YvQDro1goZvbdxyzGYjTUSIGzkMpCYjZf3_a6

Ce schéma se traduit:

\[\begin{split}Author(\underline{id}, name, firstname)\\ Category(\underline{id}, name)\\ Boardgame(\underline{id}, name, price, description, category\_{}id \Rightarrow Category)\\ IsMadeBy(\underline{boardgame\_{}id \Rightarrow Boardgame, author\_{}id \Rightarrow Author})\end{split}\]

Redondance et normalisation#

Il est difficile de dĂ©finir un bon modĂšle conceptuel, un bon modĂšle logique relationnel est un modĂšle oĂč la redondance est contrĂŽlĂ©e. A dĂ©faut de disposer d’outils systĂ©matiques pour obtenir de bons modĂšles conceptuels, on cherche donc Ă  critiquer les modĂšles relationnels obtenus.

La thĂ©orie de la normalisation est une thĂ©orie qui permet de critiquer, puis d’optimiser, des modĂšles relationnels, de façon Ă  en contrĂŽler la redondance.

Principe de la normalisation#

C’est une thĂ©orie destinĂ©e Ă  concevoir un bon schĂ©ma d’une base de donnĂ©es sans redondance d’information et sans risques d’anomalie de mise Ă  jour. Elle a Ă©tĂ© introduite dĂšs l’origine dans le modĂšle relationnel.

La théorie de la normalisation est fondée sur deux concepts principaux :

  • Les dĂ©pendances fonctionnelles: Elles traduisent des contraintes sur les donnĂ©es.

  • Les formes normales: Elles dĂ©finissent des relations bien conçues.

Dépendance fonctionnelle#

Note

Soient \(R(A1, A2, ... , An)\) un schéma de relation, \(X\) et \(Y\) des sous-ensembles de \(A1, A2, ... , An\).

On dit que \(X\) dĂ©termine \(Y\), ou que \(Y\) dĂ©pend fonctionnellement de \(X\), si et seulement s’il existe une fonction qui Ă  partir de toute valeur de \(X\) dĂ©termine une valeur unique de \(Y\).

Si \(X\) détermine \(Y\), on note : \(X \longrightarrow Y\)

Comment trouver les dépendances fonctionnelles ?

Elle est dĂ©finie par l’intension du schĂ©ma et traduit une certaine perception de la rĂ©alitĂ©. La seule maniĂšre de dĂ©terminer une DF est donc de regarder soigneusement ce que signifient les attributs et de trouver les contraintes qui les lient dans le monde rĂ©el.

L’identification des DF est la base indispensable pour dĂ©terminer dans quelle forme normale est une relation et comment en diminuer la redondance.

Axiomes d’Armstrong

Les DF obĂ©issent Ă  des propriĂ©tĂ©s mathĂ©matiques particuliĂšres, dites axiomes d’Armstrong.

Réflexivité

Tout groupe d’attributs se dĂ©termine lui mĂȘme et dĂ©termine chacun de ses attributs (ou sous groupe de ses attributs). Soient \(X\) et \(Y\) des attributs :

  • \(XY \longrightarrow XY\)

  • et \(XY \longrightarrow X\)

  • et \(XY \longrightarrow Y\)

Augmentation

Si un attribut \(X\) dĂ©termine un attribut \(Y\), alors tout groupe composĂ© de \(X\) enrichi avec d’autres attributs dĂ©termine un groupe composĂ© de \(Y\) et enrichi des mĂȘmes autres attributs.

Soient \(X\), \(Y\) et \(Z\) des attributs : \(X \longrightarrow Y \Rightarrow XZ \longrightarrow YZ\)

Transitivité

Si un attribut \(X\) détermine un attribut \(Y\) et que cet attribut \(Y\) détermine un autre attribut \(Z\), alors \(X\) détermine \(Z\).

Soient \(X\), \(Y\) et \(Z\) des attributs : \(X \longrightarrow Y\) et \(Y \longrightarrow Z \Rightarrow X \longrightarrow Z\)

Union

Si un attribut détermine plusieurs autres attributs, alors il détermine tout groupe composé de ces attributs.

Soient \(X\), \(Y\) et \(Z\) des attributs : \(X \longrightarrow Y\) et \(X \longrightarrow Z \Rightarrow X \longrightarrow YZ\)

Décomposition

Si un attribut dĂ©termine un groupe d’attribut, alors il dĂ©termine chacun des attributs de ce groupe pris individuellement.

Soient \(X\), \(Y\) et \(Z\) des attributs : \(X \longrightarrow YZ \Rightarrow X \longrightarrow Z\) et \(X \longrightarrow Y\)

Dépendance fonctionnelle élémentaire#

Note

Soit \(G\) un groupe d’attributs et \(A\) un attribut, une DF \(G \longrightarrow A\) est Ă©lĂ©mentaire si :

  • \(A\) n’est pas incluse dans \(G\),

  • et s’il n’existe pas d’attribut \(A'\) de \(G\) qui dĂ©termine \(A\).

Important

On peut toujours réécrire un ensemble de DF en un ensemble de DFE, en supprimant les DF triviales obtenues par réflexivité et en décomposant les DF à partie droite non atomique en plusieurs DFE.

Fermeture transivite des DFE

On appelle fermeture transitive \(\bar{F}\) d’un ensemble \(F\) de DFE, l’ensemble de toutes les DFE qui peuvent ĂȘtre composĂ©es par transitivitĂ© Ă  partir des DFE de \(F\).

Soit l’ensemble: \(F = \{ A \rightarrow B,\ B \rightarrow C,\ B \rightarrow D,\ A \rightarrow E \}\).

La fermeture transitive de F est \(\bar{F} = \{ A \rightarrow B, B \rightarrow C, B \rightarrow D, A \rightarrow E, A \rightarrow C, A \rightarrow D \}\)

Couverture minimale des DFE#

Note

La couverture minimale d’un ensemble de DFE est un sous-ensemble minimum des DFE permettant de gĂ©nĂ©rer toutes les autres DFE. Tout ensemble de DFE (et donc tout ensemble de DF) admet au moins une couverture minimale (et en pratique souvent plusieurs).

L’ensemble \(F = \{A \rightarrow B,\ A \rightarrow C,\ B \rightarrow C,\ C \rightarrow B\}\) admet les deux couvertures minimales :

  • \(CM1 = \{A \rightarrow C,\ B \rightarrow C,\ C \rightarrow B \}\) et

  • \(CM2 = \{A \rightarrow B,\ B \rightarrow C,\ C\rightarrow B \}\)

Graphe des DFE#

On peut reprĂ©senter un ensemble de DFE par un graphe orientĂ© (ou plus prĂ©cisĂ©ment un rĂ©seau de PĂ©tri), tel que les nƓuds sont les attributs et les arcs les DFE (avec un seul attribut en destination de chaque arc et Ă©ventuellement plusieurs en source).

Soit la relation \(Boardgame(\underline{id}, name, price, description)\) avec l’ensemble des DF

\[F = \{ id \rightarrow name, id \rightarrow price, id \rightarrow description \}\]

On peut représenter \(F\) par le graphe ci-dessous:

https://www.plantuml.com/plantuml/svg/LOyn2iCm34Ltdy8NI8T2rvAfTEeLWc8hZeaj1SccFNuD2Mcw_Szx7w5U2qYfETcHGNo0Z3hu2OSWiCver452UxtS3AJ4xo77JwHWT8cqWa2s8xWb25VoZXEBBGAa3I6La-LnWfhAWwcysWdxRAiJpapiPk56YbGqnbH51ues-YDI6nvbbUX-pQCwYMk9JCP4Rxlklkbxtkoz_Cazac_VVm4=

Soit les relations suivantes:

\[\begin{split}Author(\underline{id}, name, firstname)\\ Category(\underline{id}, name)\\ Boardgame(\underline{id}, name, price, description, category\_{}id \Rightarrow Category)\\ IsMadeBy(\underline{boardgame\_{}id \Rightarrow Boardgame, author\_{}id \Rightarrow Author})\end{split}\]

On peut les représenter par le graphe ci-dessous:

https://www.plantuml.com/plantuml/svg/VLBBJiCm4BplLrYvbmCILrIAXE1GVi7QsjlKgX_HsX6j4F-EaxgfqmXyyim-PhphTKp8gNTMx0AoRj5Hb7fFicNi3YHLS9sb4qI5biJZmnEWjU5BEdColeLuDBv3HYTsg8ujXzvh5MnWaHXzp27ogShIjCVUfhVWqsUM4k-vgWgxu8CwSCYHn3q1G9SJi2MnkReJto3owICfZ2ICda6VCsP4nqRD6KrHiUcI2Nx6AqpK1ZxBtFBd9lnQw8MkL0AZQ8g1Pc6Zn2T7JTtrfK-7FAH5J_oxvzvmJ8ltZKhuZrBp4RUeQNDkXYINhtUgE5gHTuESVaCP1zI4MAsUXybFfOMG230-Oe0NPpTyym-bO0JbVjbJ0VMA2bLl1ofmLLOmRcGILW1hyZf_x5y=

DĂ©finition formelle d’une clĂ©#

Note

Soient une relation \(R(A1,A2,...,An)\) et \(K\) un sous-ensemble de \(A1,A2,... ,An\).

\(K\) est une clĂ© de \(R\) si et seulement si : \(K \rightarrow A1,A2,...,An\) et il n’existe pas \(X\) inclus dans \(K\) tel que \(X \rightarrow A1,A2,...,An\).

Une clĂ© est donc un ensemble minimum d’attributs d’une relation qui dĂ©termine tous les autres.

Clés candidates et clé primaire

Si une relation comporte plusieurs clĂ©s, chacune est dite clĂ© candidate et l’on en choisit une en particulier pour ĂȘtre la clĂ© primaire.

Toutes les clĂ©s candidates sont des clĂ©s, pas seulement la clĂ© primaire. Toute clĂ© candidate dĂ©termine les autres clĂ©s candidates, puisque qu’une clĂ© dĂ©termine tous les attributs de la relation.

Relation « toute clé »

Étant donnĂ© qu’une relation dispose forcĂ©ment d’une clĂ©, si une relation \(R\) n’admet aucune clĂ© \(K\) sous ensemble des attributs \(A1..An\) de \(R\), alors c’est que \(K=A1..An\) (la clĂ© est composĂ©e de tous les attributs de \(R\)). On parle de relation « toute clé ».

Formes normales

Elles ont pour objectif de dĂ©finir la dĂ©composition des schĂ©mas relationnels, tout en prĂ©servant les DF et sans perdre d’informations afin de reprĂ©senter les objets et associations canoniques du monde rĂ©el de façon non redondante.

Principes de la décomposition#

La dĂ©composition d’un schĂ©ma de relation \(R(A1,A2,...,An)\) est le processus de remplacement de ce schĂ©ma par une collection de schĂ©mas \(R1,R2,...,Rn\) telle qu’il est possible de reconstruire \(R\) par des opĂ©rations relationnelles de jointure sur \(R1,R2,...,Rn\).

Une dĂ©composition d’une relation \(R\) en relations \(R1,R2,...Rn\) prĂ©serve les DF si la fermeture transitive \(\bar{F}\) des DF de \(R\) est la mĂȘme que la fermeture transitive \(\bar{F}\) de l’union des DF de \(R1,R2,...,Rn\).

PremiĂšre forme normale

Une relation est en 1NF si elle possÚde au moins une clé et si tous ses attributs sont atomiques.

Un attribut est atomique si il ne contient qu’une seule valeur pour un tuple donnĂ©, et donc s’il ne regroupe pas un ensemble de plusieurs valeurs.

DeuxiĂšme forme normale

Une relation est en 2NF si elle est en 1NF et si tout attribut n’appartenant Ă  aucune clĂ© candidate ne dĂ©pend pas d’une partie seulement d’une clĂ© candidate.

TroisiĂšme forme normale

Une relation est en 3NF si elle est en 2NF et si tout attribut n’appartenant Ă  aucune clĂ© candidate ne dĂ©pend directement que de clĂ©s candidates.

C’est Ă  dire que toutes les DFE vers des attributs n’appartenant pas Ă  une clĂ©, sont issues d’une clĂ©.

Forme normale de Boyce-Codd

Une relation est en BCNF si elle est en 3NF et si les seules DFE existantes sont celles pour lesquelles une clé candidate détermine un attribut.

La BCNF est la forme normale la plus facile Ă  apprĂ©hender intuitivement et formellement, puisque les seules DFE existantes sont de la forme \(K \rightarrow A\) oĂč \(K\) est une clĂ©. Pour prouver qu’une BD n’est pas redondante, on pourra se contenter de vĂ©rifier qu’elle est en BCNF.