Attributs multivalués en R-JSON (JSON_ARRAY_ELEMENTS)

Exemple

Description

@startuml

hide circle

class Cours {

code : text {key}

titre : text {key}

nbpages : integer

chapitres [2..*] : text

}

@enduml

RappelReprésentation équivalente

Description

@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"]

SyntaxeConvertir 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"