Skip to content
Snippets Groups Projects
Commit eab741d0 authored by Marcel Huber's avatar Marcel Huber
Browse files

update of styling

parent 1d873682
No related branches found
No related tags found
No related merge requests found
......@@ -3,19 +3,21 @@
## Lernziele
- GraphQL Beispiel von PostGraphile kennenlernen
- Kennenlernen und erstellen von Queries auf AngProj-Datenbank (aus Dbs1) mit GraphQL bzw. PostGraphile
- Kennenlernen und erstellen von Queries auf AngProj-Datenbank (aus
Dbs1) mit GraphQL bzw. PostGraphile
- Kennen der GraphQL Schema Definition anhand vorgegebener Beispiele
- Unterschiede beschreiben können von GraphQL, RESTful-APIs und SQL
## Vorbereitung
**Hinweise:**
- Richtzeit der Übung 45 min.
- Dokumentation der Operatoren für die Implementations-spezifischen Query-Filter: https://www.npmjs.com/package/postgraphile-plugin-connection-filter#operators
- Die bereitgestellten Instanzen (vgl. unten) werden regelmässig und automatisch
alle zwei Stunden zurückgesetzt und zwar um 00, 02, 04, 06, 08, 10, 12, 14, 16, 18, 20, 22)!
- [Dokumentation der
Operatoren](https://www.npmjs.com/package/postgraphile-plugin-connection-filter#operators)
für die Implementations-spezifischen Query-Filter
- Die bereitgestellten Instanzen (vgl. unten) werden regelmässig und
automatisch alle zwei Stunden zurückgesetzt und zwar um 00, 02, 04,
06, 08, 10, 12, 14, 16, 18, 20, 22)!
- Wenn eine der 21 Instanzen nicht funktionieren sollte, bitte eine
andere (freie) Instanz nehmen.
......@@ -32,7 +34,8 @@
#### Mit Docker/docker-compose
- https://gitlab.dev.ifs.hsr.ch/m1huber/Dbs2Uebungen
(https://gitlab.dev.ifs.hsr.ch/m1huber/Dbs2Uebungen.git) lokal klonen
(https://gitlab.dev.ifs.hsr.ch/m1huber/Dbs2Uebungen.git) lokal
klonen
- ins Verzeichnis Dbs2Uebungen/docker/ wechseln
- docker-compose up --build -d
- http://localhost:5000/graphiql öffnen
......@@ -48,13 +51,12 @@
### Aufgabe 1: Einfache Queries ausführen
a) Name aller Angestellten.
1. Name aller Angestellten.
<!-- SOLUTION
<!-- SOLUTION
***Lösungsvorschlag***
- ***Lösungsvorschlag***
```GraphQL
``` graphql
query alleAngestelltenNamen {
allAngestellters {
nodes {
......@@ -62,18 +64,14 @@ a) Name aller Angestellten.
}
}
}
```
SOLUTION -->
b) Name und Salär der Angestellten mit Salaer über 5000.
SOLUTION -->
2. Name und Salär der Angestellten mit Salär über 5000.
<!-- SOLUTION
***Lösungsvorschlag***
<!-- SOLUTION
- ***Lösungsvorschlag***
```GraphQL
``` graphql
query alleAngestelltenMitHohemSalaer {
allAngestellters(filter: {salaer: {greaterThan: "5000"}}, orderBy: SALAER_ASC) {
nodes {
......@@ -82,17 +80,15 @@ b) Name und Salär der Angestellten mit Salaer über 5000.
}
}
}
```
SOLUTION -->
SOLUTION -->
3. Name und Salär der Angestellten aus Luzern mit Salär zwischen 5000
und 8000.
c) Name und Salär der Angestellten aus Luzern mit Salaer zwischen 5000 und 8000.
<!-- SOLUTION
- ***Lösungsvorschlag***
<!-- SOLUTION
***Lösungsvorschlag***
```GraphQL
``` graphql
query alleAngestelltenMitInLuzern {
allAngestellters(filter: {and: [{salaer: {greaterThan: "5000"}}, {salaer: {lessThan: "8000"}}], wohnort: {equalTo: "Luzern"}}, orderBy: SALAER_ASC) {
nodes {
......@@ -101,17 +97,15 @@ c) Name und Salär der Angestellten aus Luzern mit Salaer zwischen 5000 und 8000
}
}
}
```
SOLUTION -->
SOLUTION -->
4. Name und Salär der Angestellten aus Luzern mit Salär zwischen 5000
und 8000 nach Salär geordnet.
c) Name und Salär der Angestellten aus Luzern mit Salaer zwischen 5000 und 8000 nach Salär geordnet.
<!-- SOLUTION
***Lösungsvorschlag***
<!-- SOLUTION
- ***Lösungsvorschlag***
```GraphQL
``` graphql
query alleAngestelltenMitInLuzern {
allAngestellters(filter: {and: [{salaer: {greaterThan: "5000"}}, {salaer: {lessThan: "8000"}}], wohnort: {equalTo: "Luzern"}}, orderBy: SALAER_ASC) {
nodes {
......@@ -120,18 +114,14 @@ c) Name und Salär der Angestellten aus Luzern mit Salaer zwischen 5000 und 8000
}
}
}
```
SOLUTION -->
SOLUTION -->
5. Name und Telefonnummer der Angestellten mit einer Telefonnummer.
d) Name und Telefonnummer der Angestellten mit einer Telefonnummer.
<!-- SOLUTION
***Lösungsvorschlag***
<!-- SOLUTION
- ***Lösungsvorschlag***
```GraphQL
``` graphql
query alleAngestelltenMitTelNummer {
allAngestellters(filter: {tel: {isNull: false}}) {
nodes {
......@@ -141,16 +131,14 @@ d) Name und Telefonnummer der Angestellten mit einer Telefonnummer.
}
}
```
SOLUTION -->
e) Name, Personenummer aller Angestellten, die mit Widmer im Namen haben.
<!-- SOLUTION
SOLUTION -->
6. Name und Personalnummer aller Angestellten, deren Name mit Widmer
beginnt.
- ***Lösungsvorschlag***
<!-- SOLUTION
***Lösungsvorschlag***
```GraphQL
``` graphql
query alleWidmerAngestellten {
allAngestellters(filter: {name: {startsWith: "Widmer"}}) {
nodes {
......@@ -160,15 +148,14 @@ e) Name, Personenummer aller Angestellten, die mit Widmer im Namen haben.
}
}
```
SOLUTION -->
SOLUTION -->
7. Alle Projekte mit Projektnummer, Bezeichnung, Dauer, Aufwand und
Startzeit inklusive Name des Projektleiters.
f) Alle Projekte mit Projektnummer, Bezeichnung, Dauer, Aufwand und Startzeit mit Projektleiter (Name)
<!-- SOLUTION
<!-- SOLUTION
***Lösungsvorschlag***
- ***Lösungsvorschlag***
```GraphQL
``` graphql
query {
allProjekts {
nodes {
......@@ -184,21 +171,53 @@ f) Alle Projekte mit Projektnummer, Bezeichnung, Dauer, Aufwand und Startzeit mi
}
}
```
SOLUTION -->
SOLUTION -->
### Aufgabe 2: Views erstellen und abfragen
### Aufgabe 2: Evaluation/Unterschiede SQL/GraphQL
**Hinweise:**
TODO:
- Nennen Sie die Vorteile/Nachteile/Unterschiede von GraphQL vs SQL vs
RESTful
- Nennen Sie je ein Beispiel für einen typischen Anwendungsfall von
GraphQL, SQL, RESTful
<!-- SOLUTION
TODO:
***Lösungsvorschlag***
- TODO: GraphQL ist web-orientiert, dynamisch (Standard lässt
absichtlich vieles Offen), ist einfach zu verwenden. Graphen als
Denkmodell für Daten.
- TODO: SQL ist spezifiziert...
- TODO: REST ist kein Standard, ist eher statisch, keine expliziten
Joins aber auch viel einfacher
- GraphQL: Webapplikation mit Joins/diversen verknüpften Daten, von
welchen man meist nicht alle Felder braucht, zB Frontend für
Nutzerverwaltung von Firma
- SQL: Generelle Abfragesprache, beliebige Applikation mit
normalisierten Daten, zB Nutzerverwaltung von Firma
- REST: Aplikation mit wenigen "Klassen", welche oft mit allen
Inhalten ausgeliefert wird, zB Twitter
- Datenbankverbindung kann zum Server hergestellt werden, um die Views zu erstellen mit: psql -U postgres -p PORTNUMMER -h sifs0003.infs.ch
wobei PORTNUMMER = 5500 + InstanzID (also zB für https://11.postgraphile.sifs0003.infs.ch/graphiql ist es PORTNUMMER=5511).
### Aufgabe x: Views erstellen und abfragen
**Hinweise:**
- Datenbankverbindung kann zum Server hergestellt werden, um die Views
zu erstellen mit:
`psql -U postgres -p PORTNUMMER -h sifs0003.infs.ch` wobei
$`PORTNUMMER = 5500 + InstanzID`$ (also zB für
https://11.postgraphile.sifs0003.infs.ch/graphiql ist es
`PORTNUMMER=5511`).
TODO: Views erstellen für Abfrage und diese Abfragen.
Zum Beispiel, Starter Examples:
```sql
``` sql
select distinct wohnort, name from angestellter where abtnr=3 order by wohnort asc;
......@@ -213,36 +232,10 @@ where salaer = (select min(salaer) from angestellter);
- ***Lösungsvorschlag***
```GraphQL
query
```
SOLUTION -->
### Aufgabe 3: Evaluation/Unterschiede SQL/GraphQL
TODO:
- Nennen Sie die Vorteile/Nachteile/Unterschiede von GraphQL vs SQL vs RESTful
- Nennen Sie je ein Beispiel für einen typischen Anwendungsfall von GraphQL, SQL, RESTful
<!-- SOLUTION
TODO:
- ***Lösungsvorschlag***
- TODO: GraphQL ist web-orientiert, dynamisch (Standard lässt absichtlich vieles Offen),
ist einfach zu verwenden. Graphen als Denkmodell für Daten.
- TODO: SQL ist spezifiziert...
- TODO: REST ist kein Standard, ist eher statisch, keine expliziten Joins aber auch viel
einfacher
- GraphQL: Webapplikation mit Joins/diversen verknüpften Daten, von welchen man
meist nicht alle Felder braucht, zB Frontend für Nutzerverwaltung von Firma
- SQL: Generelle Abfragesprache, beliebige Applikation mit normalisierten Daten, zB Nutzerverwaltung von Firma
- REST: Aplikation mit wenigen "Klassen", welche oft mit allen Inhalten ausgeliefert
wird, zB Twitter
``` graphql
query
```
SOLUTION -->
## Musterlösung
Die Musterlösung zu dieser Übung finden Sie auf [dieser
......@@ -256,6 +249,5 @@ keywords:
- PostgreSQL
- GraphiQL
- GraphQL
title: 'Übung 14: PostgreSQL + GraphQL'
---
# Übung 14: PostgreSQL + GraphQL
# Übung 14: GraphQL mit PostgreSQL
## Lernziele
- Graphql/Graphiql kennenlernen
- Bestehende AngProj Datanbank Ändern und Abfragen können
- Teile der DBS1 Queries mit Graphql auf PostGraphile ausführen können
- Optional: Eigene DB erstellen und abfragen
- GraphQL Beispiel von PostGraphile kennenlernen
- Kennenlernen und erstellen von Queries auf AngProj-Datenbank (aus
Dbs1) mit GraphQL bzw. PostGraphile
- Kennen der GraphQL Schema Definition anhand vorgegebener Beispiele
- Unterschiede beschreiben können von GraphQL, RESTful-APIs und SQL
## Vorbereitung
### Lokale Installation
**Hinweise:**
- [Dokumentation der
Operatoren](https://www.npmjs.com/package/postgraphile-plugin-connection-filter#operators)
für die Implementations-spezifischen Query-Filter
- Die bereitgestellten Instanzen (vgl. unten) werden regelmässig und
automatisch alle zwei Stunden zurückgesetzt und zwar um 00, 02, 04,
06, 08, 10, 12, 14, 16, 18, 20, 22)!
- Wenn eine der 21 Instanzen nicht funktionieren sollte, bitte eine
andere (freie) Instanz nehmen.
### Lokale Installation von PostGraphile
### Bereitgestellte Instanzen
- https://{0-20}.postgraphile.sifs0003.infs.ch/graphiql öffnen und
eine Instanz verwenden. (zB
https://13.postgraphile.sifs0003.infs.ch/graphiql ) Sprechen Sie
untereinander ab, wer welche Instanz verwendet. Nutzername und
Passwort: `postgraphile`/`dbs2uebung`
#### Mit Docker/docker-compose
......@@ -27,35 +47,111 @@
- `postgraphile --connection postgres://postgres:postgres@localhost/angproj --watch --dynamic-json -p 5000`
- http://localhost:5000/graphiql öffnen
### Bereitgestellte Instanzen
## Aufgaben
- https://{0-20}.postgraphile.sifs0003.infs.ch/graphiql öffnen und
eine Instanz verwenden. (zB
https://13.postgraphile.sifs0003.infs.ch/graphiql) Bitte sprecht
untereinander ab, wer welche Instanz verwendet. Nutzername und
Passwort: `postgraphile`/`dbs2uebung`
### Aufgabe 1: Einfache Queries ausführen
**Hinweise:**
1. Name aller Angestellten.
- Die Instanzen werden nach jeder Übung zurückgesetzt (um 00, 02, 04,
06, 08, 10, 12, 14, 16, 18, 20, 22)!
- Wenn eine der 21 Instanzen nicht funktionieren sollte, bitte eine
andere (freie) nehmen.
- Richtzeit der Übung 45min.
***Lösungsvorschlag***
## Aufgaben
``` graphql
query alleAngestelltenNamen {
allAngestellters {
nodes {
name
}
}
}
```
### Aufgabe 1: tbd.
2. Name und Salär der Angestellten mit Salär über 5000.
tbd.
***Lösungsvorschlag***
- ***Lösungsvorschlag***
``` graphql
query alleAngestelltenMitHohemSalaer {
allAngestellters(filter: {salaer: {greaterThan: "5000"}}, orderBy: SALAER_ASC) {
nodes {
name
salaer
}
}
}
```
3. Name und Salär der Angestellten aus Luzern mit Salär zwischen 5000
und 8000.
***Lösungsvorschlag***
``` graphql
query alleAngestelltenMitInLuzern {
allAngestellters(filter: {and: [{salaer: {greaterThan: "5000"}}, {salaer: {lessThan: "8000"}}], wohnort: {equalTo: "Luzern"}}, orderBy: SALAER_ASC) {
nodes {
name
salaer
}
}
}
```
4. Name und Salär der Angestellten aus Luzern mit Salär zwischen 5000
und 8000 nach Salär geordnet.
***Lösungsvorschlag***
``` graphql
query alleAngestelltenMitInLuzern {
allAngestellters(filter: {and: [{salaer: {greaterThan: "5000"}}, {salaer: {lessThan: "8000"}}], wohnort: {equalTo: "Luzern"}}, orderBy: SALAER_ASC) {
nodes {
name
salaer
}
}
}
```
5. Name und Telefonnummer der Angestellten mit einer Telefonnummer.
***Lösungsvorschlag***
``` graphql
query alleAngestelltenMitTelNummer {
allAngestellters(filter: {tel: {isNull: false}}) {
nodes {
name
tel
}
}
}
```
6. Name und Personalnummer aller Angestellten, deren Name mit Widmer
beginnt.
***Lösungsvorschlag***
``` graphql
query alleWidmerAngestellten {
allAngestellters(filter: {name: {startsWith: "Widmer"}}) {
nodes {
name
persnr
}
}
}
```
7. Alle Projekte mit Projektnummer, Bezeichnung, Dauer, Aufwand und
Startzeit inklusive Name des Projektleiters.
***Lösungsvorschlag***
``` graphql
query {
allProjekts {
nodes {
nodeId
projnr
bezeichnung
startzeit
......@@ -63,14 +159,74 @@ tbd.
aufwand
angestellterByProjleiter {
name
tel
salaer
}
}
}
}
```
### Aufgabe 2: Evaluation/Unterschiede SQL/GraphQL
TODO:
- Nennen Sie die Vorteile/Nachteile/Unterschiede von GraphQL vs SQL vs
RESTful
- Nennen Sie je ein Beispiel für einen typischen Anwendungsfall von
GraphQL, SQL, RESTful
TODO:
***Lösungsvorschlag***
- TODO: GraphQL ist web-orientiert, dynamisch (Standard lässt
absichtlich vieles Offen), ist einfach zu verwenden. Graphen als
Denkmodell für Daten.
- TODO: SQL ist spezifiziert...
- TODO: REST ist kein Standard, ist eher statisch, keine expliziten
Joins aber auch viel einfacher
- GraphQL: Webapplikation mit Joins/diversen verknüpften Daten, von
welchen man meist nicht alle Felder braucht, zB Frontend für
Nutzerverwaltung von Firma
- SQL: Generelle Abfragesprache, beliebige Applikation mit
normalisierten Daten, zB Nutzerverwaltung von Firma
- REST: Aplikation mit wenigen "Klassen", welche oft mit allen
Inhalten ausgeliefert wird, zB Twitter
### Aufgabe x: Views erstellen und abfragen
**Hinweise:**
- Datenbankverbindung kann zum Server hergestellt werden, um die Views
zu erstellen mit:
`psql -U postgres -p PORTNUMMER -h sifs0003.infs.ch` wobei
$`PORTNUMMER = 5500 + InstanzID`$ (also zB für
https://11.postgraphile.sifs0003.infs.ch/graphiql ist es
`PORTNUMMER=5511`).
TODO: Views erstellen für Abfrage und diese Abfragen.
Zum Beispiel, Starter Examples:
``` sql
select distinct wohnort, name from angestellter where abtnr=3 order by wohnort asc;
select chef, count(*), avg(salaer) from angestellter where chef is not NULL group by chef
order by count(*) DESC, avg(salaer);
select name,salaer as "Tiefstes Salaer" from angestellter
where salaer = (select min(salaer) from angestellter);
```
- ***Lösungsvorschlag***
<!-- -->
``` graphql
query
```
## Musterlösung
Die Musterlösung zu dieser Übung finden Sie auf [dieser
......@@ -80,10 +236,10 @@ Datei.
---
keywords:
- database
- postgresql
- graphiql
- graphql
- Database
- PostgreSQL
- GraphiQL
- GraphQL
title: 'Übung 14: PostgreSQL + GraphQL'
---
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment