Attributs multivalués en R-JSON (JSON_ARRAY_ELEMENTS)
Exemple :

@startuml
hide circle
class Cours {
code : text {key}
titre : text {key}
nbpages : integer
chapitres [2..*] : text
}
@enduml
Rappel : Représentation équivalente

@startuml
hide circle
class Cours {
code : text {key}
titre : text {key}
nbpages : integer
}
class Chapitre {
titre : text
}
Cours *- "2..*" Chapitre : " "
@enduml
Une représentation avec attribut multivalué est équivalente à une composition dont le composite ne comporte qu'un seul attribut.
Exemple :
1
CREATE TABLE cours (
2
code TEXT PRIMARY KEY,
3
titre TEXT UNIQUE NOT NULL,
4
nbpages INTEGER NOT NULL,
5
chapitres JSON NOT NULL
6
);
1
INSERT INTO cours (code, titre, nbpages, chapitres)
2
VALUES (
3
'NF17',
4
'Bases de données',
5
98,
6
'["UML","R","SQL","Normalisation","RO"]'
7
);
8
INSERT INTO cours (code, titre, nbpages, chapitres)
9
VALUES (
10
'NF29',
11
'Ingénierie documentaire',
12
45,
13
'["XML","JSON"]'
14
);
1
code | titre | nbpages | chapitres
2
------+-------------------------+---------+----------------------------------------
3
NF17 | Bases de données | 98 | ["UML","R","SQL","Normalisation","RO"]
4
NF29 | Ingénierie documentaire | 45 | ["XML","JSON"]
Syntaxe : Convertir un tableau de scalaires JSON en relationnel : opérateur JSON_ARRAY_ELEMENTS
1
SELECT a.* FROM t, JSON_ARRAY_ELEMENTS(t.jsonatt) a
Exemple :
1
SELECT co.titre, ch.*
2
FROM cours co, JSON_ARRAY_ELEMENTS(co.chapitres) ch;
1
titre | value
2
-------------------------+-----------------
3
Bases de données | "UML"
4
Bases de données | "R"
5
Bases de données | "SQL"
6
Bases de données | "Normalisation"
7
Bases de données | "RO"
8
Ingénierie documentaire | "XML"
9
Ingénierie documentaire | "JSON"