Databases Reference
In-Depth Information
sich die Intervalle [v1.beginn,v1.ende] und [v2.beginn,v2.ende] überlappen. Die
Überschneidung kann in SQL durch das Prädikat
(v1.beginn,v1.ende) OVERLAPS (v2.beginn,v2.ende)
abgefragt werden, und wenn das nicht zur Verfügung steht, durch:
v2.beginn < v1.ende AND v1.beginn < v2.ende
Wir können das Überschneidungsproblem vollständig im Datenbankschema defi-
nieren, wenn wir im Folgenden für die Tabelle vermietung_x keine Zugriffsrechte
zulassen, sondern nur für die Datensicht vermietung :
CREATE TABLE vermietung_x (
vertrag CHAR(10) NOT NULL,
objekt CHAR(10) NOT NULL
REFERENCES haus,
mieter CHAR(10) NOT NULL
REFERENCES kunde,
beginn DATE NOT NULL,
ende DATE NOT NULL,
PRIMARY KEY (vertrag)
);
CREATE VIEW vermietung AS
SELECT * FROM vermietung_x AS v1
WHERE NOT EXISTS (
SELECT * FROM vermietung_x AS v2
WHERE v1.objekt = v2.objekt
AND v2.beginn < v1.ende AND v1.beginn < v2.ende)
WITH CHECK OPTION;
Diese Datensicht vermietung ist entsprechend dem in Kapitel 6.4 Gesagten aktuali-
sierbar . Somit ist es über diese Datensicht möglich, alle gewünschten Änderungen
durchzuführen; es ist aber nicht möglich, ein Objekt für einen Zeitraum doppelt zu
vermieten.
Existenzielle Abhängigkeiten
In den meisten Fällen können existenzielle Abhängigkeiten über eine Fremd-
schlüsselbeziehung gelöst werden.
Die existenzielle Abhängigkeit kann aber gewisse andere Bedingungen als Voraus-
setzung haben. In diesen Fällen können wir keine Fremdschlüssel verwenden. Als
Beispiel betrachten wir folgende Bedingung: » Für jeden Kunden, der die Waren über
Bankeinzug erhält, muss ein Girokonto existieren. «
Dies können wir durch eine Assertion beschreiben (die leider noch nicht in vielen
Datenbanksystemen verfügbar ist) oder wir können Trigger dazu verwenden (die
noch nicht zum Standard gehören und außerdem den Nachteil haben, dass sie pro-
 
Search WWH ::




Custom Search