Postgres Rule system
een meer complete geografische uitbreiding van de
DBMS te komen.
Er zijn zowel twee- als driedimensionale, geometrische
gegevenstypen geïmplementeerd. Daarom ook eindigen
de namen van de typen met een nummer dat hun
dimensie aangeeft. De 2D-gegevenstypen zijn POINT2,
POLYLINE2 en POLYGON2. In plaats van het Postgres
type path willen we het semantische verschil tussen poly-
lijn en polygoon weergeven door middel van het toe
kennen van verschillende gegevenstypen. Deze typen
moeten worden ondersteund door aanvullende geo
metrische functies. Functienamen geven de werking,
de dimensie en de operand typen weer. De functie
Equal2PntPnt gaat bijvoorbeeld na of twee 2D-punten
gelijk zijn. De functies worden geclassificeerd per groep,
waarvan iedere groep hier met enige voorbeelden wordt
geïllustreerd (operator-symbolen worden binnen de rech
te haakjes weergegeven):
retourneren Boolean waarden:
Equal2PntPnt
On2PntPln [->],
Contain2PgnPgn [-->] (let op het overladen van de
operator), en
Overlap2PlnPgn
retourneren atomaire geometrische objecten (punt, poly-
lijn en polygoon):
GravCenter2Pgn
MinBoundRec2Pgn en
ConvexHull2Pnts (Pnts duiden een array aan met
variabele lengte van POINT2's).
retourneren complexe geometrische objecten
lnter2PgnPgn [A],
Voronoi2Pnts en
Delaunay2Pnts zoals beschreven in [7],
retourneren scalar-waarden
Distance2PntPnt [<->],
MinDist2PgnPgn [<->],
Length2Pln [--], en
Area2Pgn
HetRule-system" of regelmechanisme maakt het moge
lijk diverse soorten regels te definiëren. De verscheidene
soorten regels en hun toepassingsgebied worden hierna
behandeld. Wat betreft het gebruik van regels, zijn er de
volgende groepen te onderscheiden:
waarborgen van referentiële integriteit in de gege
vensbank, hetgeen betekent dat ervoor wordt gezorgd
dat verwijzingen binnen de gegevensbank consistent
blijven („foreign keys" in een relationeel DBMS);
topologische regels, welke er bijvoorbeeld voor zorgen
dat er geen intersectie is van twee lijnen zonder
knooppunt;
geometrisch gerelateerde bedrijfsregels om bijvoor
beeld een bepaalde minimum afstand tussen objecten
te handhaven;
de aan thematische attributen gerelateerde regels,
zoals het ervoor zorgen dat waarden binnen een ge
geven interval liggen;
autorisatieregels die ervoor zorgen dat niet iedereen
alles mag zien of mag doen;
„triggers" die (vanuit de gegevensbank) de applica
ties waarschuwen, indien een bepaalde situatie zich
voordoet (dit is met name van belang bij dynamische
toepassingen).
Hierna zal een aantal voorbeelden van deze regels wor
den gegeven, gerangschikt naar hun Postgres-wijze van
implementatie.
Retrieve-rules
„Retrieve-rules" wijzigen het beeld dat de gebruiker
krijgt van de opgeslagen objecten. Het is bijvoorbeeld
mogelijk om berekende schijnattributen toe te voegen
aan objecten, bijvoorbeeld het attribuut lengte dat de
lengte van een polyline bevat. Op het moment dat het
lengte-attribuut wordt geraadpleegd, zal het Rule-system
op dat moment de lengte van de polyline berekenen. In
plaats van een eenvoudige lengteberekening is het na
tuurlijk ook mogelijk om veel complexere berekeningen te
laten plaatsvinden (bijvoorbeeld het opzoeken van de
dichtstbijgelegen politiepost). De definitie is als volgt:
on retrieve to lines.length
do instead retrieve
(length Length2Pln(lines.polyline))
Een iets ingewikkelder voorbeeld toont hoe een schijn-
attribuut belasting aan een perceel wordt toegevoegd op
basis van de oppervlakte:
on retrieve to parcel.tax
do instead retrieve
(tax 10* Area2Pgn(parcel.polygon))
De retrieve-rules kunnen ook worden toegepast om ge
gevens te verbergen
on retrieve to person.salary
where user() „mail_boy"
do instead nothing
Een laatste toepassing is bijvoorbeeld het afdrukken van
salarisgegevens:
on retrieve to person.salary
do append salary_log
(user= user(), time= curtime())
Replace-rules
Een „replace-rule" kan worden gebruikt om te garande
ren dat bepaalde randvoorwaarden worden nagekomen:
on replace to person.salary
where (new.salary<0)
do instead give_warning(
Bovenstaande regel zorgt ervoor dat het salaris niet
negatief kan worden, maar dat er een waarschuwing
wordt gegeven. Het volgende voorbeeld toont een regel
die voor consistentie zorgt tussen de gegevensbank en
de presentatie op het beeldscherm:
on replace to unit.position
where (new.position<->policepost.position)
10000
do replace new (screencolor „Red")
276
NGT GEODESIA 93 - 6