Formules in databasevelden

Toepassingen voor formules in databasevelden

De mogelijkheid om formules op te slaan in databases opent een groot gebied aan oplossingsmogelijkheden voor problemen die met conventionele databasemanagementsystemen 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 zonder Colbert zo makkelijk 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.
Buyer
Cars
Toon per Koper de Auto die aan Zoek voldoet
  • De tabel Buyer is gedefinieerd als: create table Buyer(Name string, Find Expr<bool>)
  • Verder zijn er geen aanpassingen in SQL nodig.
  • Bij aanroep van Find wordt de waarde berekend en in de where clause gebruikt om de match te maken.
Colbert SQL met Formule in where clause

Buyer join Cars where Find

Bonusberekening

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

Employees
Sales
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

Name, Year, Bonus from Employees  natural join Sales where Year between 2016 and 2018

Risicoanalyse

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

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
  • De operator Code toont de formule zelf in plaats van de berekende waarde
Colbert SQL met Formule in from clause en where clause.

Fam.*, AgeOf BirthDate as Age, Code Crit, Code Score, Score from Fam join Risk on crit

Toon de totale risicoscores per persoon.
Dit is dus een aggregatie over het vorige resultaat

Colbert SQL met Formules

Name, Count as Hits, Sum Score from (Name, AgeOf BirthDate as Age, Score from Fam join Risk on crit)

Cohortdefinitie

Net als bij risicoanalyse ken je kenmerken toe aan een verzameling objecten op grond van een verzameling formules. Een ander voorbeeld hiervan is het opdelen van een populatie in cohorten. Colbert staat je in staat een tabel met cohortdefinities te maken.Je kunt eventueel meerdere cohortdefinitie-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 de passende met 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