Definition der Datenbank-Modelle und SQL für *PostgeSQL*.

This commit is contained in:
2021-03-25 22:43:36 +01:00
parent 5c49997eba
commit e9b647e8b0
3 changed files with 118 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
-- # Definition der Tabelle
-- DROP TABLE public."Arbeitszeiten";
create table public."Arbeitszeiten"
(
"Datum" date not null,
"Arbeitszeit" interval(6) null,
constraint "Arbeitszeiten_pkey" primary key ("Datum")
);
-- # Definition der Ansichten
-- ## Wöchentlich
create view "Arbeitszeiten - Woche" ("Woche", "Gesamtarbeitszeit", "Arbeitstage", "Überstunden") as
select
to_char(date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone),
'TMYYYY#WW'::text) as "Woche",
sum("Arbeitszeiten"."Arbeitszeit") as "Gesamtarbeitszeit",
count("Arbeitszeiten"."Datum") as "Arbeitstage",
sum("Arbeitszeiten"."Arbeitszeit") - count("Arbeitszeiten"."Datum") ::double precision * '08:00:00'::interval as "Überstunden"
from "Arbeitszeiten"
group by (date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone))
order by (date_trunc('week'::text, "Arbeitszeiten"."Datum"::timestamp with time zone));
-- ## Monatlich
create view "Arbeitszeiten - Monat" ("Monat", "Gesamtarbeitszeit", "Arbeitstage", "Überstunden") as
select
to_char(date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone),
'TMYYYY TMMonth'::text) as "Monat",
sum("Arbeitszeiten"."Arbeitszeit") as "Gesamtarbeitszeit",
count("Arbeitszeiten"."Datum") as "Arbeitstage",
sum("Arbeitszeiten"."Arbeitszeit") - count("Arbeitszeiten"."Datum") ::double precision * '08:00:00'::interval as "Überstunden"
from "Arbeitszeiten"
group by (date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone))
order by (date_trunc('month'::text, "Arbeitszeiten"."Datum"::timestamp with time zone));
-- ## Jährlich
create view "Arbeitszeiten - Jahr"("Jahr", "Gesamtarbeitszeit", "Arbeitstage", "Überstunden") as
select
date_part('year'::text, "Arbeitszeiten"."Datum")::text as "Jahr",
sum("Arbeitszeiten"."Arbeitszeit") as "Gesamtarbeitszeit",
count("Arbeitszeiten"."Datum") as "Arbeitstage",
sum("Arbeitszeiten"."Arbeitszeit") - count("Arbeitszeiten"."Datum") ::double precision * '08:00:00'::interval as "Überstunden"
from "Arbeitszeiten"
group by (date_part('year'::text, "Arbeitszeiten"."Datum"))
order by (date_part('year'::text, "Arbeitszeiten"."Datum"));
+36
View File
@@ -0,0 +1,36 @@
@startuml
!define DOMAIN (M,#FFAAAA) Domain Model
!define VIEW (V,DarkTurquoise) Domain Model - Ansicht
class Arbeitszeiten <<DOMAIN>> {
Datum
Arbeitszeit
insert()
list()
}
class Arbeitszeiten-Ansicht <<VIEW>> {
Gesamtarbeitszeit
Arbeitstage
Überstunden
list()
}
class Arbeitszeiten-Woche <<VIEW>> {
Woche
}
class Arbeitszeiten-Monat <<VIEW>> {
Monat
}
class Arbeitszeiten-Jahr <<VIEW>> {
Jahr
}
"Arbeitszeiten-Ansicht" <|-- "Arbeitszeiten-Woche"
"Arbeitszeiten-Ansicht" <|-- "Arbeitszeiten-Monat"
"Arbeitszeiten-Ansicht" <|-- "Arbeitszeiten-Jahr"
@enduml
+37
View File
@@ -0,0 +1,37 @@
@startuml
!define DOMAIN (M,#FFAAAA) Domain Model
!define TABLE (T,DarkTurquoise) Physical Data Model
!define VIEW (V,#AAFFAA) Model View
!define AUTO Auto Generated
!define ID_KEY id: INTEGER <<PK>> <<AUTO>> <<Surrogate>>
class Arbeitszeiten <<TABLE>> {
Datum: DATE
Arbeitszeit: INTERVAL
}
class Arbeitszeiten-Ansicht <<VIEW>> {
Gesamtarbeitszeit: INTERVAL
Arbeitstage: INTEGER
Überstunden: INTERVAL
list()
}
class Arbeitszeiten-Woche <<VIEW>> {
Woche: TEXT
}
class Arbeitszeiten-Monat <<VIEW>> {
Monat: TEXT
}
class Arbeitszeiten-Jahr <<VIEW>> {
Jahr: TEXT
}
"Arbeitszeiten-Ansicht" <|-- "Arbeitszeiten-Woche"
"Arbeitszeiten-Ansicht" <|-- "Arbeitszeiten-Monat"
"Arbeitszeiten-Ansicht" <|-- "Arbeitszeiten-Jahr"
@enduml