Einbindung in Abfragesprachen
Das hier vorgestellte Modell soll nun praktisch angewendet werden.
Dazu wird eine SQL-ähnliche Abfragesprache verwendet. Es wird
von einem relationalen Datenmodell ausgegangen, in dem vage Regionen
als atomare Objekte Tabelleneinträge der Datenbank dienen.
Z.B. könnte ein Angler auf die Idee kommen, eine Tabelle zu erstellen,
die Gebiete mit Fischvorkommen enthält. Solch eine Tabelle könnte wie
folgt aussehen :
Fischvorkommen |
region |
Fisch |
... |
Region_1 |
Hecht |
... |
Region_2 |
Aal |
... |
Der Kern einer solchen Region enthält eine große Anzahl solcher Fische,
während die Grenze wenige Exemplare des entsprechenden Fisches
beherbergt.
Die Aggregationsfunktion sum stellt die wiederholte Anwendung der
Vereining dar. So liefert die Anfrage :
select sum(region) from Fischvorkommen where
Fisch = Hecht
eine einzige große Region, die die Gebiete mit Hechtvorkommen enthält.
Angenommen der Freund des Anglers ist aktiv im Umweltschutz tätig und
hat eine Tabelle von verschmutzten Gebieten erstellt. Der Kern einer
Region stellt ein stark verschmutztes Gebiet dar, wogegen ein leicht
verschmutztes Gebiet eine Grenze so einer Region ist. Da Fische Schwermetalle aufnehmen und daher der Verzehr von Fischen aus Gebieten
mit hohem Gehalt an Schwermetallen ungesund ist, möchte der Angler wissen, wo er möglichst unbekümmert seine Forellen fangen kann. Dazu stellt er die folgende Anfrage :
select sum(Fischvorkommen.region) intersection
(complement(Verschmutzung.region))
from Fischvorkommen,Verschmutzung
where
Fischvorkommen.Fisch=Forelle and
Verschmutzung.art=Wasser and
Verschmutzung.belastet = Schwermetall
Da der Angler am Wochenende einen Freund mitnehmen möchte, der ein
ungeduldiger Öko-Freak ist, ist er nun an den Stellen interessiert,
an denen ein großes Fischvorkommen ohne geringste Schwermetallbelastung
existiert. Dazu stellt er folgende Anfrage :
select kernel(Fischvorkommen.region)
from Verschmutzung, Fischvorkommen
where Fischvorkommen.Fisch=Hecht and not
( Fischvorkommen.region maybe intersects
select sum(region)
from Verschmutzung
where art=Wasser and belastet=Schwermetall )
Da der Angler sich leicht erkältet, hat er sich nun von der Wetterwarte
eine Tabelle geholt, die Regengebiete enthält. Um nun möglichst im
trockenen angeln zu können, stellt er die folgende Anfrage :
select sum(Fischvorkommen.region) difference sum(Regengebiet.region)
from Fischvorkommen,Regengebiet
where Fischvorkommen.Fisch=Karpfen
Da der Freund des Angler (der Öko-Freak) in der letzen Zeit Angler
beobachtet hat, die in Gebieten fischen, wo angeln verboten ist, weil
dort auch gefährdete Fischarten leben, möchte er einer Amtsperson
mitteilen, in welchen Gebieten solche Leute zu finden sein werden.
solche Gebiete könnten wie folgt beschrieben werden.
select
kernel(Fischvorkommen.region) intersection Gefährdet.region
from Fischvorkommen,Gefährdet
where Gefährdet.Art = Fisch
Da Hechte kleinere Fische fressen und sich der Bestand an Hechten in der letzen
Zeit stark erhöht hat, ist man an den Stellen interessiert, an denen sich Hechte
und kleine bedrohte Fische einen gemeinsamen Lebensraum haben. Dort sollen dann Hechte
abgefischt werden, um die bedrohten Fischarten zu schützen.
....
Für den nächsten Angelwettbewerb soll nun die mögliche Anzahl der Teilnehmer ermittelt werden. Dazu ist die Fläche wichtig, die innerhalb des Wettbewerbsgebiets liegt :
select min-area(region)
from Fischvorkommen
where Fisch=Forelle and
region inside Wettbewerbsregion
wobei Wettbewerbsregion z.B. als alle Wassergebiete des Landkreises bestehen könnte.