Formules in database velden

Toepassingen voor formules in database velden

De mogelijkheid om formules op te slaan in databases opent een groot gebied aan oplossingsmogelijkheden voor problemen die met conventionele database management systemen niet mogelijk zijn.
Hieronder zijn een aantal voorbeelden weergegeven.

Zie hoe eenvoudig je bepaalde problemen in Colbert kunt oplossen met SQL en bedenk hierbij vooral ook of je ze in jouw database management systemen zou kunnen oplossen !

Criteria matching

Een formule mag elk type als resultaat hebben. Met een boolean resultaat kun je criteria definiëren om bijvoorbeeld per koper aan te geven wat voor auto hij zoekt.
Bij de aanroep van een formule wordt deze eenmalig vertaald en worden de parameters gezocht in de dan geldende context van de query.
Koper
Autos
Toon per Koper de Auto die aan Zoek voldoet
  • De tabel Zoek is gedefinieerd als: create table Koper (Naam string, Zoek Expr<bool>)
  • Verder zijn er geen aanpassingen in SQL nodig.
  • Bij aanroep van Zoek wordt de waarde berekend en in de where clause gebruikt om de match te maken.
  • De operator Code toont de formule zelf in plaats van de berekende waarde
Colbert SQL met Formule in where clause
Select Naam, Code Zoek, Merk, Kleur, Jaar, Km, Prijs from Koper join Autos where Zoek

Bonus berekening

Met een veld met een formule van het type <Expr>double kun je eenvoudig per medewerker, per jaar de afgesproken bonus berekenen.

Medewerkers
Omzet
Toon de Bonus die medewerkers per jaar verdiend hebben.
  • In Colbert kun je dus de afgesproken bonus formule goed vastleggen en heb je tegelijkertijd op elk moment de berekende bonus inzichtelijk gemaakt.

Colbert SQL met Formule in from clause

Select Naam, Jaar, Bonus from Medewerkers natural join Omzet where jaar between 2000 and 2002

Risicoanalyse

Stel je wilt risicoscores van een populatie bepalen.
In de tabel Risk zijn twee formules gedefinieerd: een boolean risicocriterium en een integer score berekening

Risk
Fam

Toon de berekende risicoscores voor de matching Crit

  • De tabel Risk is gedefinieerd als:
    Create table Risk (Crit Expr<bool>, Score Expr<int>)
  • Aangezien de tabel Fam geen veld Age heeft wordt deze in de from clause gedefinieerd als AgeOf BirthDay
Colbert SQL met Formule in from clause en where clause.
F.*, AgeOf BirthDay as Age, Code Crit, Code Score, Score from Fam F outer join Risk R on Crit

Toon de totale risicoscores per persoon

Colbert SQL met Formules
Name, count as Aantal, sum score from (*, AgeOf BirthDay as Age from Fam join Risk on Crit)

Cohort definitie

Net als bij risicoanalyse wil je de mogelijkheid om een populatie in cohorten te verdelen. Vaak doe je dit op grond van een verzameling criteria. Colbert staat je in staat een tabel met cohortdefinities te maken.Je kunt eventueel meerdere Cohort definitie tabellen maken en deze op verschillende manieren joinen met je data.

Fam
FamCohort

Toon de cohorten

  • In dit voorbeeld wijzen we een Persoon toe aan slechts één Cohort op basis van hoogste rank. Dit kan in Colbert met de First operator.
Colbert SQL met First en Formule in on clause.
Name, CohortName from Fam join first (FamCohort order by Rank) on Def