Algèbre relationnelle
Transcription
Algèbre relationnelle
Algèbre relationnelle Algèbre relationnelle SB AD FC Algèbre relationnelle Janvier 2016 1 / 58 Janvier 2016 2 / 58 Introduction Introduction SB AD FC Algèbre relationnelle Introduction Le modèle relationnel Inventé par Codd (IBM) en 1970 Fondements théoriques basés sur la théorie des relations. Propose un modèle pour la modélisation et l’interrogation de données Facile à traduire dans des langages “réels” (ex. SQL) SB AD FC Algèbre relationnelle Janvier 2016 3 / 58 Janvier 2016 4 / 58 Les tables/relations Les tables/relations SB AD FC Algèbre relationnelle Les tables/relations Relations Exemple ville : ensemble de noms de villes heure : ensemble de chaînes de caractères de la forme XYhZT où X,Y,Z,T sont des chiffres. h-dép 13h15 13h22 Train dest h-arr Lyon 15h15 Nantes 15h30 prov Paris Paris Schéma : Train (h-dép: heure ; dest: ville ; h-arr:heure ; prov:ville) Arité : 4 Cardinalité : 2 SB AD FC Janvier 2016 Algèbre relationnelle 5 / 58 Les tables/relations Exemple de Relation Exemple Table player dans la base tennis pid name gender 71 Vince Spadea M 72 Igor Andreev M 73 Jiri Vanek M 74 Benjamin Becker M 75 Dudi Sela M SB AD FC code USA RUS CZE GER ISR last_name Spadea Andreev Vanek Becker Sela first_name Vince Igor Jiri Benjamin Dudi Janvier 2016 6 / 58 Algèbre relationnelle Les tables/relations Sur la table player Une table comme player est un tableau à deux dimensions Chaque ligne ou tuple contient des informations concernant un individu (ici, un joueur de tennis professionnel). Ces informations sont des valeurs d’attributs. Les attributs qui définissent le schéma de la table sont pid, name, gender, code, last_name, first_name. Dans la vie d’un table, on ajoute, on supprime et on modifie souvent les lignes d’une table. On modifie beaucoup plus rarement les attributs. SB AD FC Janvier 2016 Algèbre relationnelle 7 / 58 Les tables/relations Schema de la table player Schema Le schéma nous donne la liste des colonnes et le type/domaine de chaque colonne. Le schéma nous indique de quoi les lignes sont faites. Table "tennis.player" Type Modifiers Column pid integer not null name character varying(30) default NULL::character varying gender character varying(1) default NULL::character varying code character varying(3) default NULL::character varying last_name character varying first_name character varying Indexes: "Player_pkey" PRIMARY KEY, btree (pid) SB AD FC Janvier 2016 8 / 58 Algèbre relationnelle Formalisation Formalisation SB AD FC Janvier 2016 Algèbre relationnelle 9 / 58 Formalisation Un peu de formalisation Domaine : ensemble dénombrable d’éléments, (entiers, chaines de caractères, date, . . . ) Un domaine peut se définir par extension (en donnant laliste de toutes les valeurs possibles) par intention (en en donnant une propriété caractéristique). Produit Cartésien d’une liste de domaines D1 , D2 , . . . , Dk , noté D1 × D2 × · · · × Dk est l’ensemble des k-uplets (ou tuples) (v1 , v2 , . . . , vk ) où, pour chaque i, vi ∈ Di . SB AD FC Janvier 2016 10 / 58 Algèbre relationnelle Formalisation Relations Définition Une relation est un sous-ensemble du produit cartésien D1 × D2 × · · · × Dk où D1 , ..., Dk sont des domaines. Exemple D1 = {1, 2, 5}, D2 = {2, 4} D1 × D2 = {(1, 2), (1, 4), (2, 2), (2, 4), (5, 2), (5, 4)} R = {(1, 2), (1, 4), (5, 2), (5, 4)} On peut représenter R par le tableau : 1 1 5 5 2 4 2 4 SB AD FC Algèbre relationnelle Janvier 2016 11 / 58 Janvier 2016 12 / 58 Cardinalité et arité Cardinalité et arité SB AD FC Algèbre relationnelle Cardinalité et arité Relations Cardinalité d’une relation R nombre de tuples (lignes) de R. Exemple Si R = D1 × D2 alors |R| = |D1 | × |D2 |. Arité d’une relation R Nombre de colonnes de la relation R (nombre d’attributs qui constituent chaque tuple de R) On parle parfois de degré d’une relation. Exemple Soit R ⊆ D1 × D2 × · · · × Dk , Arité de R = longueur d’un tuple de R = k SB AD FC Janvier 2016 Algèbre relationnelle 13 / 58 Cardinalité et arité Relations Domaine peut apparaitre plusieurs fois dans la définition d’une même relation. Attribut : nom/rôle de la colonne Précise la sémantique de celle-ci. Pas deux attributs identiques dans une table. Schéma d’une relation : liste des attributs et domaines de la relation. Peut se noter R(A1 : D1 , A2 : D2 , . . . , Ak : Dk ) où Ai : attribut et Di : domaine. SB AD FC Janvier 2016 14 / 58 Algèbre relationnelle Clés et références Clés et références SB AD FC Janvier 2016 Algèbre relationnelle 15 / 58 Clés et références Clés, références, etc Définition La clé d’une relation est un ensemble minimal d’attributs dont la valeur détermine complètement un tuple Ville(code_postal, nom, population) la valeur de code_postal détermine entièrement un tuple. Définition Une référence ou (clé étrangère) est un (groupe d’) attribut(s) dont les valeurs sont prises parmi celles d’une clé d’une autre table Ville(code_postal, nom, population) Departement(numero, nom, population, code_prefecture) la valeur de code_prefecture fait référence au code_postal de sa préfecture qui est une ville. SB AD FC Janvier 2016 16 / 58 Algèbre relationnelle Clés et références Schema de country_codes \d atp.country_codes +----------+------------------------+-------------+ | Column | Type | Modifiers | |----------+------------------------+-------------| | code | character varying(3) | not null | | country | character varying(100) | | +----------+------------------------+-------------+ Indexes: "pk_country_codes" PRIMARY KEY, btree (code) Referenced by: TABLE "fk_player_code" CONSTRAINT "atp.player" FOREIGN KEY (code) REFERENCES atp.country_codes(code) SB AD FC Janvier 2016 Algèbre relationnelle 17 / 58 Clés et références Schema de country_codes (suite) Identifiant code est une clé primaire ou identifiant pour la table country_code Référence Dans la table player, c’est une clé étrangère ou référence qui permet de lier un tuple de player à un tuple de country_code SB AD FC Janvier 2016 18 / 58 Algèbre relationnelle Clés et références Résumé informel RELATION = TABLE A DEUX DIMENSIONS (NOM DE) COLONNE = ATTRIBUT EN-TÊTE DU TABLEAU = SCHEMA DE LA RELATION (description du type, définition intentionnelle) LIGNE = TUPLE ENSEMBLE DES LIGNES = CONTENU DE LA RELATION (*définition extensionnelle}) SB AD FC Algèbre relationnelle Janvier 2016 19 / 58 Janvier 2016 20 / 58 Algèbre relationnelle Algèbre relationnelle SB AD FC Algèbre relationnelle Algèbre relationnelle Algèbre relationnelle Une algèbre C’est un ensemble E munis d’opérations internes >, ⊥, +, ×, . . .. Une opération prend en argument des (ou un) éléments de l’ensemble et produit un élément de l’ensemble. Exemple R muni de +, ×, −, /, . . . Algèbre relationnelle C’est une algèbre qui opère sur l’ensemble des tables/relations. Dans un SGBD le langage de manipulation de données (SQL) met en oeuvre l’algèbre relationnelle (et bien d’autres choses). SB AD FC Algèbre relationnelle Janvier 2016 21 / 58 Janvier 2016 22 / 58 Opérateurs de base Opérateurs de base SB AD FC Algèbre relationnelle Opérateurs de base Liste des opérateurs L’algèbre relationnelle comme Langage de Manipulation de données (LMD) Opérateurs de base Union ∪ Intersection ∩ Différence \ Projection Π Sélection σ Produit cartésien (déjà vu) × Manipulent des relations pour produire d’autres relations (le résultat) SB AD FC Janvier 2016 Algèbre relationnelle 23 / 58 Opérateurs de base Projection Π La projection d’une relation R de schéma R(A1 , . . . , Ak ) sur les attributs Ai1 , . . . , Aip est la relation S de schéma S(Ai1 , . . . , Aip ) dont les tuples sont obtenus par élimination des attributs non mentionnés dans Ai1 , . . . , Aip (et par élimination des doublons). On note S = πAi 1 ,...,Aip (R). Élimination des doublons car une projection peut produire plusieurs fois le même tuple. SB AD FC Janvier 2016 24 / 58 Algèbre relationnelle Opérateurs de base Schema de tournament +-----------+-------------------+--------------------------------+ | Column | Type | Modifiers | |-----------+-------------------+--------------------------------| | tid | integer | not null default nextval('atp.tournament_tid_seq'::regclass) | | name | character varying | | | location | character varying | | | startdate | date | | | enddate | date | | | numrounds | integer | | | ttype | character varying | | | surface | character varying | | | outlier | boolean | | +-----------+-------------------+--------------------------------+ SB AD FC Janvier 2016 Algèbre relationnelle 25 / 58 Opérateurs de base Tuples de tournament tid 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 name Australian Open Australian Open French Open French Open US Open US Open Wimbledon Wimbledon Heineken Open Heineken Open Brasil Open 2007 Brasil Open 2007 Countrywide Classic Countrywide Classic BMW Open SB AD FC location Melbourne, Australia Melbourne, Australia Roland Garros, Paris Roland Garros, Paris Flushing Meadows, NY Flushing Meadows, NY London, Great Britain London, Great Britain Auckland, New Zealand Auckland, New Zealand Costa do Sauipe, Brasil Costa do Sauipe, Brasil Los Angeles, CA, USA Los Angeles, CA, USA Munich, Germany startdate 2007-01-15 2007-01-15 2007-05-26 2007-05-26 2007-08-27 2007-08-27 2007-06-25 2007-06-25 2007-01-08 2007-01-08 2007-02-12 2007-02-12 2007-07-16 2007-07-16 2007-04-30 enddate 2007-01-28 2007-01-28 2007-06-10 2007-06-10 2007-09-09 2007-09-09 2007-07-08 2007-07-08 2007-01-14 2007-01-14 2007-02-18 2007-02-18 2007-07-22 2007-07-22 2007-05-06 rounds 7 6 7 6 7 6 7 6 5 4 5 4 5 4 5 ttype Singles Doubles Singles Doubles Singles Doubles Singles Doubles Singles Doubles Singles Doubles Singles Doubles Singles Janvier 2016 surface Hard Hard Clay Clay Hard Hard Grass Grass Hard Hard Clay Clay Hard Hard Clay 26 / 58 Algèbre relationnelle Opérateurs de base Projection (exemple) Projection de la table tournament sur les colonnes location et surface location Melbourne, Australia Auckland, New Zealand Flushing Meadows, NY, USA Munich, Germany London, Great Britain ... surface Hard Hard Hard Clay Grass ... πlocation,surface tournament SB AD FC Janvier 2016 Algèbre relationnelle 27 / 58 Opérateurs de base Sélection La sélection d’une relation R par une condition C est une relation S de même schéma que R (même arité) dont les tuples sont ceux de R qui satisfont la condition C (cardinalité de S ≤ cardinalité de R) On note S = σC (R). La condition C s’exprime à l’aide des noms d’attributs de la relation ou de constantes (pour les opérandes) peut utiliser des opérateurs arithmétique de comparaisons (=, 6=, ≤, ≥, <, >) ainsi que des connecteurs logique (¬, ∧, ∨).. SB AD FC Janvier 2016 28 / 58 Algèbre relationnelle Opérateurs de base Sélection sur tournament Sélection des tuples pour lesquels l’attribut ttype vaut 'Singles' tid 14 12 6 8 0 10 2 4 name BMW Open Countrywide Classic Wimbledon Heineken Open Australian Open Brasil Open 2007 French Open US Open location Munich, Germany Los Angeles, CA, London, Great Britain Auckland, New Zealand Melbourne, Australia Costa do Sauipe, Brasil Roland Garros, Paris Flushing Meadows, NY, USA startdate 2007-04-30 2007-07-16 2007-06-25 2007-01-08 2007-01-15 2007-02-12 2007-05-26 2007-08-27 enddate 2007-05-06 2007-07-22 2007-07-08 2007-01-14 2007-01-28 2007-02-18 2007-06-10 2007-09-09 rounds 5 5 7 5 7 5 7 7 ttype Singles Singles Singles Singles Singles Singles Singles Singles surface Clay Hard Grass Hard Hard Clay Clay Hard Janvier 2016 29 / 58 σttype=0 Singles0 tournament SB AD FC Algèbre relationnelle Opérateurs de base Renommage Renommage d’une table consiste à renommer explicitement certains attributs. On peut souhaiter renommer des attributs pour mettre en correspondance deux schémas (préalable à certaines opérations binaires) traduire une base d’usage internationale (localisation) Renommage dans country_codes pays Afghanistan Netherlands Antilles Albania Algeria Andorra code AFG AHO ALB ALG AND ρcountry→pays country_codes Cette opération ne change rien au contenu de la table, elle définit un nouveau schéma, avec un nouveau nom d’attribut SB AD FC Janvier 2016 30 / 58 Algèbre relationnelle Opérateurs binaires Opérateurs binaires SB AD FC Janvier 2016 Algèbre relationnelle 31 / 58 Opérateurs binaires Union et intersection L’union et l’intersection sont des opérations portant sur deux relations R1 et R2 de même schéma. T = R1 ∪ R2 est constituée des tuples appartenant à R1 ou à R2 mais pas nécessairement aux deux T = R1 ∩ R2 est constituée des tuples appartenant à R1 et à R2 Le schémas de R1 ∪ R2 , R1 ∩ R2 est égal à celui de R1 (et à celui de R2 !) SB AD FC Janvier 2016 32 / 58 Algèbre relationnelle Opérateurs binaires Différence ensembliste La différence de deux relations R1 et R2 (de même schéma) est une relation T de même schéma constituée des tuples appartenant à R1 et n’appartenant pas à R2 . On note T = R1 − R2 . Opération non commutative : R1 − R2 6= R2 − R1 (en général). #### Exemple On veut calculer la liste des joueurs qui ont participé à Roland Garros (French Open) mais pas à Wimbledon Il faut (et il suffit de) calculer la liste des pid des joueurs qui ont participé à Roland Garros, la liste des pid des joueurs qui ont participé à Wimbledon et faire la différence. SB AD FC Janvier 2016 Algèbre relationnelle 33 / 58 Opérateurs binaires Produit Cartésien Déjà défini : construit des “produits” de relation. Le schéma de R1 × R2 est la concaténation des schémas de R1 et R2 arité de R1 × R2 = arité de R1 × arité de R2 En algèbre relationnelle, cette opération est commutative : R1 × R2 = R2 × R1 cardinalité de R1 × R2 = cardinalité de R1 × cardinalité de R2 SB AD FC Janvier 2016 34 / 58 Algèbre relationnelle Opérateurs binaires Résumé Algèbre relationnelle Opérations ensemblistes classiques ∩, ∪, ×, \. Projection (π) : élimine des colonnes Sélection (σ) : élimine des lignes Pour interroger une BD, on combine ces opérateurs : πnum (σdest=0 Lyon0 (Train)) Numéro des trains dont la ville de destination est Lyon. SB AD FC Algèbre relationnelle Janvier 2016 35 / 58 Janvier 2016 36 / 58 Opérations complémentaires : les jointures Opérations complémentaires : les jointures SB AD FC Algèbre relationnelle Opérations complémentaires : les jointures Les jointures Opérations (très) pratiques pour la manipulation de données : les jointures. Jointure Jointure naturelle θ-jointure et équi-jointure Les jointures externes SB AD FC Janvier 2016 Algèbre relationnelle 37 / 58 Opérations complémentaires : les jointures Jointure La jointure T = R1 ./C R2 de deux relations R1 et R2 sous la condition C est la relation T de schéma : la concaténation des schéma de R1 et R2 formée des tuples du produit cartésien R1 × R2 qui satisfont la condition C SB AD FC Janvier 2016 38 / 58 Algèbre relationnelle Opérations complémentaires : les jointures Jointure π... (player ./C country_codes) last_name Spadea Andreev Vanek Becker Sela Srichaphan Gicquel Jones Tsonga Lapentti first_name Vince Igor Jiri Benjamin Dudi Paradorn Marc Alun Jo-Wilfried Nicolas country United States Russia Czech Republic Germany Israel Thailand France Australia France Ecuador code USA RUS CZE GER ISR THA FRA AUS FRA ECU gender M M M M M M M M M M {Jointure de player et de country_codes sur la condition player.code = country_codes.code, puis projection sur last_name, first_name, country, code, gender} SB AD FC Janvier 2016 Algèbre relationnelle 39 / 58 Opérations complémentaires : les jointures Équi-Jointure et θ-jointure Équi-jointure La condition de jointure porte sur des attributs de types comparables et impose l’égalité. Dans l’exemple précédent, la jointure est une équi-jointure. θ-jointure condition de jointure entre attributs de types comparables et avec un opérateur différents de l’égalité i.e. {<, >, ≤, ≥, 6=}. SB AD FC Janvier 2016 40 / 58 Algèbre relationnelle Opérations complémentaires : les jointures Jointure naturelle R1 d’attributs A1 , .., Ak , B1 , ..., Bh R2 d’attributs A1 , .., Ak , C1 , ..., Cl A1 , ..., Ak : attributs communs. La jointure naturelle sur deux relations R1 et R2 est la relation d’attributs A1 , .., Ak , B1 , ..., Bh , C1 , ..., Cl définie par : σA1 ,..,Ak ,B1 ,...,Bh ,C1 ,...,Cl (R1 ./C R2 ) où C = R1 .A1 = R2 .A1 ∧ . . . ∧ R1 .Ah = R2 .Ah Autrement dit, on réalise une équi-jointure sur tous les attributs communs et on ne garde qu’un seul “exemplaire” de ces attributs communs par projection. Notation : R1 ./ R2 . Lorsqu’on prend seulement une partie des attributs communs, on spécifie le nom de ceux-ci en indice. Exemple La jointure entre player et country_codes est une jointure naturelle (l’attribut AD FC Janvier 2016 41 / 58 commun SBest code). Algèbre relationnelle Opérations complémentaires : les jointures Représentation graphique - arbre de requête πname,country σgender=0 female0 ./code player country_codes Pour : πname,country σgender=0 female0 (player ./code country_codes) SB AD FC Janvier 2016 42 / 58 Algèbre relationnelle Encore des opérations. . . Encore des opérations. . . SB AD FC Janvier 2016 Algèbre relationnelle 43 / 58 Encore des opérations. . . Jointure externe 1 2 Perte d’information dans jointure naturelle : les tuples ne satisfaisant pas la condition disparaissent. On ajoute "symboliquement" une ligne dont les valeurs sont vides (ou avec valeur spéciale NULL) pour garder les tuples initiaux "non satisfaisants" après la jointure. SB AD FC Janvier 2016 44 / 58 Algèbre relationnelle Encore des opérations. . . Jointure externe (définition) Jointure externe à droite ./ext entre deux tables R et S, sous la condition C, est une table : - de même schéma que R ./C S - contenant les tuples de R ./C S ... - et pour chaque tuple t2 de S tel qu’il n’existe pas de tuple t1 tel que (t1 , t2 ) vérifie la condition C, un tuple de la forme (NULL, t2 ) où les attributs provenant de R ne sont pas renseignés ... - Notation R ./ext C S SB AD FC Algèbre relationnelle Janvier 2016 45 / 58 Janvier 2016 46 / 58 Jointure externe Jointure externe SB AD FC Algèbre relationnelle Jointure externe Jointure externe Jointure externe à droite entre player et country_code avec une equi-jointure sur l’attribut commun code, puis sélection sur la condition last_name est nulle et projection sur quelques attributs provenant des tables player et country_codes (10 premiers résultats affichés). last_name first_name country Venezuela Tajikistan Iraq Côte d Ivoire Cameroon Malaysia Egypt Indonesia Organization of Eastern Caribbean States (OECS) (Davis Cup Entity) Saudi Arabia code VEN TJK IRQ CIV CMR MAS EGY INA ECA KSA gender A noter Dans un SGBD, les jointures externes sont un moyen commode pour réaliser la différence entre tables. SB AD FC Algèbre relationnelle Janvier 2016 47 / 58 Janvier 2016 48 / 58 Division Division SB AD FC Algèbre relationnelle Division Division Division de R par S relation R de schéma R(A1 , A2 , . . . , Ak ) relation S de schéma S(Ap+1 , . . . , Ak ) (Schema de S ⊂ Schema de R) Définition La division (ou le quotient) de R par S est une relation T de schéma T (A1 , . . . , Ap ) formée des tuples qui, concaténés à chaque tuple de S, donnent un tuple de R. Notation T =R÷S SB AD FC Janvier 2016 Algèbre relationnelle 49 / 58 Division Tables played_in et registration Dans la base tennis, on trouve les tables registration et played_in, qui permettent de déterminer quels joueurs se sont inscrits à quel tournoi. Chaque tuple de played_in représente l’inscription d’un joueur ou d’une équipe de double à un tournoi Column tid registrnum seed Type integer integer integer Modifiers not null not null - L’attribut tid indique le tournoi concerné (un tuple de tournament identifié par son attribut tid. - L’attribut registration est un numéro d’inscription - L’attribut seed, quand il est renseigné, permet de repérer les têtes de série. SB AD FC Janvier 2016 50 / 58 Algèbre relationnelle Division Table registration Si la base tennis ne concernait que des compétitions en simple (single), nous pourrions représenter les inscriptions de manière très simple : par des couples (tid,pid). Pour pouvoir représenter de façon homogène les inscriptions aux tournois en simple et en double, on a choisi d’utiliser deux tables played_in et registration. SB AD FC Algèbre relationnelle Janvier 2016 51 / 58 Janvier 2016 52 / 58 Division Table registration (visualisation) \d atp.registration +------------+---------+-------------+ | Column | Type | Modifiers | |------------+---------+-------------| | registrnum | integer | not null | | pid | integer | | +------------+---------+-------------+ Indexes: "fki_registration_played_in" btree (registrnum) Foreign-key constraints: "fk_registration_played_in" FOREIGN KEY (registrnum) REFERENCES atp.played_in(registrnum) "fk_registration_player" FOREIGN KEY (pid) REFERENCES atp.player(pid) "fk_registrnum_played_in" FOREIGN KEY (registrnum) REFERENCES atp.played_in(registrnum) ON UPDATE CASCADE ON DELETE CASCADE SB AD FC Algèbre relationnelle Division Table registration (suite) Pour chaque inscription à un tournoi (tuple de played_in identifié par registrnum), on trouvera un ou deux tuples dans registration. Ce ou ces tuples permettent de savoir quel(s) joueur(s) portent quels numéros d’inscription. SB AD FC Janvier 2016 Algèbre relationnelle 53 / 58 Division Division : les joueurs qui ont participé à tous les tournois du grand schlem au moins une fois Le grand schlem est formé par quatre tournois : Autralian Open, French Open, Wimbledon et US Open. Attention Cette question n’est pas la même que la question : quels sont les joueurs qui ont participé à au moins un tournoi du grand schlem ? Pourtant . . . Nous allons commencer par construire une requête qui correspond presque à cette question intermédiaire. Nous calculons les couples (tid,pid) qui correspondent à une inscription à un tournoi du grand schlem (table GSI). Pour répondre à la question de départ, il suffit de diviser GSI par sa projection sur tid SB AD FC Janvier 2016 54 / 58 Algèbre relationnelle Division Division : les joueurs qui ont participé à tous les tournois du grand schlem (. . . ) Calcul des tid des tournois du grand schlem GS ← πtid σname∈(0 FrenchOpen0 ,...,0 Wimbledon0 ) tournament Calcul des couples (tid,pid) correspondant aux jours participant à au moins un tournoi du grand schlem} GSI ← πtid,pid (GS ./ played_in ./ registration) Les pid des joueurs ayant participé à tous les tournois du grand schlem R ← GSI ÷ (πtid GSI) SB AD FC Algèbre relationnelle Janvier 2016 55 / 58 Janvier 2016 56 / 58 Les opérateurs de base et les autres Les opérateurs de base et les autres SB AD FC Algèbre relationnelle Les opérateurs de base et les autres Interdéfinissabilité des opérateurs L’union, la différence, le produit cartésien, la sélection et la projection sont suffisants pour définir tous les opérateurs que l’on a vu. Mais avoir un panel plus large d’opérateurs simplifie l’écriture des requêtes. Quelques définitions Pour la Jointure : R ./C S ≡ σC (R × S) Pour l’intersection : A ∩ B = A ∪ B − ((B − A) ∪ (A − B)) SB AD FC Algèbre relationnelle Janvier 2016 57 / 58 Janvier 2016 58 / 58 Les opérateurs de base et les autres Définition de la division R de schéma R(A1 , A2 , . . . , Ak ), S de schéma S(Ap+1 , . . . , Ak ) La relation T = R ÷ S de schéma T (A1 , . . . , Ap ). − πA1 ,...,Ap πA1 ,...,Ap R − R × πA1 ,...,Ap S R SB AD FC