Ü13.1.1. Individuelle Lösung Ü13.1.2 Telefonbücher verwenden den zweiten Standard, also werden Umlaute als zwei Buchstaben aufgefasst, "Müller" muss vor "Mull" stehen. Ü13.2.1.1 MySQL, PostgreSQL, SQL Server CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL); Ü13.2.1.2 MySQL CREATE SCHEMA IF NOT EXISTS Kap8 DEFAULT CHARACTER SET latin1 DEFAULT COLLATE latin1_german1_ci; PostgreSQL, SQL Server CREATE SCHEMA Kap8; Oracle CREATE USER Kap8 IDENTIFIED BY mypassword; GRANT ALL PRIVILEGES TO Kap8; Dann neu anmelden mit dem neuen USER. Firebird CREATE SCHEMA 'Kap8,fdb'; (nur direkt in isql, sonst über die grafische Oberfläche) MS Access Datei|Neu und dann eine Datei Kap8.mdb anlegen. OpenOffice.org Base Datei|Neu|Datenbank und dann eine Datei Kap8.odb anlegen. Ü13.2.1.3 MySQL, PostgreSQL, Oracle, OpenOffice.org Base CREATE TABLE fahrzeug ( kennzeichen CHAR(10) NOT NULL PRIMARY KEY, fahrgestellnummer CHAR(25) NOT NULL, farbe char (12) DEFAULT 'Silber' NULL, Tueren SMALLINT NULL, hubraum INT NULL, versicherungsbeitrag decimal(10,2) NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp); SQL Server CREATE TABLE fahrzeug ( kennzeichen CHAR(10) NOT NULL PRIMARY KEY, fahrgestellnummer CHAR(25) NOT NULL, farbe char (12) DEFAULT 'Silber' NULL, Tueren SMALLINT NULL, hubraum INT NULL, versicherungsbeitrag decimal(10,2) NOT NULL, letzte_aenderung DATETIME2 DEFAULT current_timestamp); MS Access nur über die grafische Oberfläche Firebird CREATE TABLE fahrzeug ( kennzeichen CHAR(10) NOT NULL PRIMARY KEY, fahrgestellnummer CHAR(25) NOT NULL, farbe char (12) DEFAULT 'Silber', Tueren SMALLINT, hubraum INT, versicherungsbeitrag decimal(10,2) NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp); Ü13.2.1.4 MySQL, PostgreSQL, SQL Server, Oracle, OpenOffice.org Base CREATE TABLE lieferung ( rnr INT NOT NULL PRIMARY KEY, name CHAR(25) NOT NULL, vorname CHAR(25) NULL, plz CHAR(5) NULL, ort VARCHAR(25) DEFAULT 'Celle' NOT NULL, strasse VARCHAR(50) NOT NULL, telefon VARCHAR(25) NOT NULL, KNR INT NOT NULL, preis DECIMAL (10,2) NOT NULL, datum DATE NOT NULL, anz SMALLINT NOT NULL, lieferung VARCHAR(255) NOT NULL, fahrer CHAR(25) NOT NULL ); MS Access nur über die grafische Oberfläche Firebird CREATE TABLE lieferung ( rnr INT NOT NULL PRIMARY KEY, name CHAR(25) NOT NULL, vorname CHAR(25), plz CHAR(5), ort VARCHAR(25) DEFAULT 'Celle' NOT NULL, strasse VARCHAR(50) NOT NULL, telefon VARCHAR(25) NOT NULL, KNR INT NOT NULL, preis DECIMAL (10,2) NOT NULL, datum DATE NOT NULL, anz SMALLINT NOT NULL, lieferung VARCHAR(255) NOT NULL, fahrer CHAR(25) NOT NULL ); Ü13.2.1.5 Die Tabelle ist nicht normalisiert und beinhaltet redundante Informationen. Der Kunde und die Lieferung müssen zumindest in zwei getrennten Tabellen realisiert werden. Ü13.2.2.1 MySQL, PostgreSQL, SQL Server, Oracle CREATE TABLE fahrzeughalter ( name char(25) NOT NULL PRIMARY KEY, vorname char(25) NULL, fahrzeug CHAR(10) NOT NULL REFERENCES fahrzeug(kennzeichen) ); MS Access nur über die grafische Oberfläche Firebird CREATE TABLE fahrzeughalter ( name char(25) NOT NULL PRIMARY KEY, vorname char(25), fahrzeug CHAR(10) NOT NULL REFERENCES fahrzeug(kennzeichen) ); OpenOffice.org Base CREATE TABLE fahrzeughalter ( name char(25) NOT NULL PRIMARY KEY, vorname char(25), fahrzeug CHAR(10) NOT NULL, FOREIGN KEY fahrzeug REFERENCES fahrzeug(kennzeichen) ); Ü13.2.2.2 MySQL, PostgreSQL, SQL Server, Oracle, Firebird CREATE TABLE inspektion ( nummer INT NOT NULL PRIMARY KEY, datum DATE NOT NULL, kennzeichen CHAR(10) NOT NULL REFERENCES fahrzeug(kennzeichen) ); MS Access nur über die grafische Oberfläche OpenOffice.org Base CREATE TABLE inspektion ( nummer INT NOT NULL PRIMARY KEY, datum DATE NOT NULL, kennzeichen CHAR(10) NOT NULL, FOREIGN KEY kennzeichen REFERENCES fahrzeug(kennzeichen) ); Ü13.3.1 (Artikel komplett) MySQL CREATE SCHEMA IF NOT EXISTS artikel DEFAULT CHARACTER SET latin1 DEFAULT COLLATE latin1_german1_ci; CREATE TABLE mwst( mwst_art CHARACTER(9) DEFAULT 'kein' NOT NULL PRIMARY KEY, mwst_satz SMALLINT DEFAULT 0 NOT NULL); CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL); CREATE TABLE kunden ( mid int NOT NULL, kid varchar(50) NOT NULL, firma varchar(59) UNIQUE NULL, anrede varchar (10) NULL, nachname varchar(50) NOT NULL, vorname varchar(30) NULL, rechnungsadresse varchar(255) DEFAULT 'wie Anschrift' NOT NULL, strasse varchar(50) NULL, PLZ char(5) NULL, ort varchar(50) DEFAULT 'Celle' NOT NULL , land varchar (50) DEFAULT 'Deutschland' NULL, geworbenvon int NULL, geburtsdatum date NULL, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT PKKD PRIMARY KEY (mid,kid) ); CREATE TABLE artikel ( anr int NOT NULL PRIMARY KEY, bezeichnung VARCHAR(255) NOT NULL, gebinde FLOAT, einheit VARCHAR(30), wgknz INT DEFAULT 0 NOT NULL REFERENCES warengruppe(kennziffer) ON DELETE CASCADE ON UPDATE CASCADE, einstandspreis DECIMAL(6,2) CHECK (einstandspreis >= 0), listenpreis DECIMAL(6,2) CHECK(listenpreis >= 0), mwst_art CHAR(9) DEFAULT 'voll' NOT NULL REFERENCES mwst(mwst_art) ON DELETE SET DEFAULT ON UPDATE CASCADE, mindestbestand INT DEFAULT 0 NOT NULL CHECK (mindestbestand >= 0), letzte_aenderung timestamp DEFAULT current_timestamp, CHECK (listenpreis >= einstandspreis * 1.5)); CREATE TABLE bestellung ( mid INT NOT NULL, bnr INT NOT NULL, kid VARCHAR(50) NOT NULL, bestelldatum DATE NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBEST PRIMARY KEY (mid,bnr), CONSTRAINT FKBESTKUND FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON UPDATE CASCADE ON DELETE CASCADE, UNIQUE(kid,bestelldatum) ); CREATE TABLE bestell_position ( mid INT NOT NULL, bnr INT NOT NULL, pos INT NOT NULL, anr INT NOT NULL, anzahl INT DEFAULT 1 NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBESTPOS PRIMARY KEY (mid,bnr,pos), CONSTRAINT FKBESTPOSBEST FOREIGN KEY (mid,bnr) REFERENCES bestellung (mid,bnr) ON UPDATE CASCADE ON DELETE CASCADE, CHECK (anzahl >=0) ); PostgreSQL CREATE SCHEMA artikel CREATE TABLE mwst( mwst_art CHARACTER(9) DEFAULT 'kein' NOT NULL PRIMARY KEY, mwst_satz SMALLINT DEFAULT 0 NOT NULL) CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL) CREATE TABLE kunden ( mid int NOT NULL, kid varchar(50) NOT NULL, firma varchar(59) UNIQUE NULL, anrede varchar (10) NULL, nachname varchar(50) NOT NULL, vorname varchar(30) NULL, rechnungsadresse varchar(255) DEFAULT 'wie Anschrift' NOT NULL, strasse varchar(50) NULL, PLZ char(5) NULL, ort varchar(50) DEFAULT 'Celle' NOT NULL , land varchar (50) DEFAULT 'Deutschland' NULL, geworbenvon int NULL, geburtsdatum date NULL, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT PKKD PRIMARY KEY (mid,kid) ) CREATE TABLE artikel ( anr int NOT NULL PRIMARY KEY, bezeichnung VARCHAR(255) NOT NULL, gebinde FLOAT, einheit VARCHAR(30), wgknz INT DEFAULT 0 NOT NULL REFERENCES warengruppe(kennziffer) ON DELETE CASCADE ON UPDATE CASCADE, einstandspreis DECIMAL(6,2) CHECK (einstandspreis >= 0), listenpreis DECIMAL(6,2) CHECK(listenpreis >= 0), mwst_art CHAR(9) DEFAULT 'voll' NOT NULL REFERENCES mwst(mwst_art) ON DELETE SET DEFAULT ON UPDATE CASCADE, mindestbestand INT DEFAULT 0 NOT NULL CHECK (mindestbestand >= 0), letzte_aenderung timestamp DEFAULT current_timestamp, CHECK (listenpreis >= einstandspreis * 1.5)) CREATE TABLE bestellung ( mid INT NOT NULL, bnr INT NOT NULL, kid VARCHAR(50) NOT NULL, bestelldatum DATE NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBEST PRIMARY KEY (mid,bnr), CONSTRAINT FKBESTKUND FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON UPDATE CASCADE ON DELETE CASCADE, UNIQUE(kid,bestelldatum) ) CREATE TABLE bestell_position ( mid INT NOT NULL, bnr INT NOT NULL, pos INT NOT NULL, anr INT NOT NULL, anzahl INT DEFAULT 1 NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBESTPOS PRIMARY KEY (mid,bnr,pos), CONSTRAINT FKBESTPOSBEST FOREIGN KEY (mid,bnr) REFERENCES bestellung (mid,bnr) ON UPDATE CASCADE ON DELETE CASCADE, CHECK (anzahl >=0) ); SQL Server CREATE SCHEMA artikel; CREATE TABLE mwst( mwst_art CHARACTER(9) DEFAULT 'kein' NOT NULL PRIMARY KEY, mwst_satz SMALLINT DEFAULT 0 NOT NULL); CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL); CREATE TABLE kunden ( mid int NOT NULL, kid varchar(50) NOT NULL, firma varchar(59) UNIQUE NULL, anrede varchar (10) NULL, nachname varchar(50) NOT NULL, vorname varchar(30) NULL, rechnungsadresse varchar(255) DEFAULT 'wie Anschrift' NOT NULL, strasse varchar(50) NULL, PLZ char(5) NULL, ort varchar(50) DEFAULT 'Celle' NOT NULL , land varchar (50) DEFAULT 'Deutschland' NULL, geworbenvon int NULL, geburtsdatum date NULL, letzte_aenderung datetime2 DEFAULT current_timestamp, CONSTRAINT PKKD PRIMARY KEY (mid,kid) ); CREATE TABLE artikel ( anr int NOT NULL PRIMARY KEY, bezeichnung VARCHAR(255) NOT NULL, gebinde FLOAT, einheit VARCHAR(30), wgknz INT DEFAULT 0 NOT NULL REFERENCES warengruppe(kennziffer) ON DELETE CASCADE ON UPDATE CASCADE, einstandspreis DECIMAL(6,2) CHECK (einstandspreis >= 0), listenpreis DECIMAL(6,2) CHECK(listenpreis >= 0), mwst_art CHAR(9) DEFAULT 'voll' NOT NULL REFERENCES mwst(mwst_art) ON DELETE SET DEFAULT ON UPDATE CASCADE, mindestbestand INT DEFAULT 0 NOT NULL CHECK (mindestbestand >= 0), letzte_aenderung datetime2 DEFAULT current_timestamp, CHECK (listenpreis >= einstandspreis * 1.5)); CREATE TABLE bestellung ( mid INT NOT NULL, bnr INT NOT NULL, kid VARCHAR(50) NOT NULL, bestelldatum DATE NOT NULL, letzte_aenderung DATETIME2 DEFAULT current_timestamp, CONSTRAINT PKBEST PRIMARY KEY (mid,bnr), CONSTRAINT FKBESTKUND FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON UPDATE CASCADE ON DELETE CASCADE, UNIQUE(kid,bestelldatum) ); CREATE TABLE bestell_position ( mid INT NOT NULL, bnr INT NOT NULL, pos INT NOT NULL, anr INT NOT NULL, anzahl INT DEFAULT 1 NOT NULL, letzte_aenderung DATETIME2 DEFAULT current_timestamp, CONSTRAINT PKBESTPOS PRIMARY KEY (mid,bnr,pos), CONSTRAINT FKBESTPOSBEST FOREIGN KEY (mid,bnr) REFERENCES bestellung (mid,bnr) ON UPDATE CASCADE ON DELETE CASCADE, CHECK (anzahl >=0) ); Oracle CREATE USER artikel IDENTIFIED BY pwartikel; grant all privileges to artikel; CREATE TABLE mwst( mwst_art CHARACTER(9) DEFAULT 'kein' NOT NULL PRIMARY KEY, mwst_satz SMALLINT DEFAULT 0 NOT NULL); CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL); CREATE TABLE kunden ( mid int NOT NULL, kid varchar(50) NOT NULL, firma varchar(59) UNIQUE NULL, anrede varchar (10) NULL, nachname varchar(50) NOT NULL, vorname varchar(30) NULL, rechnungsadresse varchar(255) DEFAULT 'wie Anschrift' NOT NULL , strasse varchar(50) NULL, PLZ char(5) NULL, ort varchar(50) DEFAULT 'Celle' NOT NULL , land varchar (50) DEFAULT 'Deutschland' NULL, geworbenvon int NULL, geburtsdatum date NULL, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT PKKD PRIMARY KEY (mid,kid) ); CREATE TABLE artikel ( anr INT NOT NULL PRIMARY KEY, bezeichnung VARCHAR(255) NOT NULL, gebinde FLOAT NOT NULL, einheit VARCHAR(30) NOT NULL, wgknz INT DEFAULT 0 NOT NULL REFERENCES warengruppe(kennziffer)ON DELETE CASCADE, einstandspreis DECIMAL(6,2) CHECK (einstandspreis >= 0), listenpreis DECIMAL(6,2) CHECK(listenpreis >= 0), mwst_art CHAR(9) DEFAULT 'voll' NOT NULL REFERENCES mwst(mwst_art) ON DELETE SET NULL, mindestbestand INT DEFAULT 0 NOT NULL CHECK (mindestbestand >= 0), letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CHECK (listenpreis >= einstandspreis * 1.5)); CREATE TABLE bestellung ( mid INT NOT NULL, bnr INT NOT NULL, kid VARCHAR(50) NOT NULL, bestelldatum DATE NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBEST PRIMARY KEY (mid,bnr), CONSTRAINT FKBESTKUND FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON DELETE SET NULL, UNIQUE (kid,bestelldatum) ); CREATE TABLE bestell_position ( mid INT NOT NULL, bnr INT NOT NULL, pos INT NOT NULL, anr INT NOT NULL, anzahl INT DEFAULT 1 NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBESTPOS PRIMARY KEY (mid,bnr,pos), CONSTRAINT FKBESTPOSBEST FOREIGN KEY (mid,bnr) REFERENCES bestellung (mid,bnr) ON DELETE CASCADE, CHECK (anzahl >=0) ); Firebird CREATE TABLE mwst( mwst_art CHARACTER(9) DEFAULT 'kein' NOT NULL PRIMARY KEY, mwst_satz SMALLINT DEFAULT 0 NOT NULL); CREATE TABLE kunden ( mid int NOT NULL, kid varchar(50) NOT NULL, firma varchar(59) UNIQUE, anrede varchar (10), nachname varchar(50) NOT NULL, vorname varchar(30), rechnungsadresse varchar(255) DEFAULT 'wie Anschrift' NOT NULL , strasse varchar(50), PLZ char(5), ort varchar(50) DEFAULT 'Celle' NOT NULL , land varchar (50) DEFAULT 'Deutschland', geworbenvon int, geburtsdatum date, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT PKKD PRIMARY KEY (mid,kid) ); CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL); CREATE TABLE artikel ( anr int NOT NULL PRIMARY KEY, bezeichnung VARCHAR(255) NOT NULL, gebinde FLOAT, einheit VARCHAR(30), wgknz INT DEFAULT 0 NOT NULL REFERENCES warengruppe(kennziffer) ON DELETE CASCADE ON UPDATE CASCADE, einstandspreis DECIMAL(6,2) CHECK (einstandspreis >= 0), listenpreis DECIMAL(6,2) CHECK(listenpreis >= 0), mwst_art CHAR(9) DEFAULT 'voll' NOT NULL REFERENCES mwst(mwst_art) ON DELETE SET DEFAULT ON UPDATE CASCADE, mindestbestand INT DEFAULT 0 NOT NULL CHECK (mindestbestand >= 0), letzte_aenderung timestamp DEFAULT current_timestamp, CHECK (listenpreis >= einstandspreis * 1.5)); CREATE TABLE bestellung ( mid INT NOT NULL, bnr INT NOT NULL, kid VARCHAR(50) NOT NULL, bestelldatum DATE NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBEST PRIMARY KEY (mid,bnr), CONSTRAINT FKBESTKUND FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON UPDATE CASCADE ON DELETE SET NULL, UNIQUE (kid,bestelldatum) ); CREATE TABLE bestell_position ( mid INT NOT NULL, bnr INT NOT NULL, pos INT NOT NULL, anr INT NOT NULL, anzahl INT DEFAULT 1 NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBESTPOS PRIMARY KEY (mid,bnr,pos), CONSTRAINT FKBESTPOSBEST FOREIGN KEY (mid,bnr) REFERENCES bestellung (mid,bnr) ON UPDATE CASCADE ON DELETE CASCADE, CHECK (anzahl >=0) ); OpenOffice.org Base CREATE TABLE mwst( mwst_art CHARACTER(9) DEFAULT 'kein' NOT NULL PRIMARY KEY, mwst_satz SMALLINT DEFAULT 0 NOT NULL); CREATE TABLE kunden ( mid int NOT NULL, kid varchar(50) NOT NULL, firma varchar(59), anrede varchar (10), nachname varchar(50) NOT NULL, vorname varchar(30), rechnungsadresse varchar(255) DEFAULT 'wie Anschrift' NOT NULL , strasse varchar(50), PLZ char(5), ort varchar(50) DEFAULT 'Celle' NOT NULL , land varchar (50) DEFAULT 'Deutschland', geworbenvon int, geburtsdatum date, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT PKKD PRIMARY KEY (mid,kid) ); CREATE TABLE warengruppe( kennziffer INT NOT NULL PRIMARY KEY, warengruppe VARCHAR(255) DEFAULT 'unbekannt' NOT NULL); CREATE TABLE artikel ( anr int NOT NULL PRIMARY KEY, bezeichnung VARCHAR(255) NOT NULL, gebinde FLOAT, einheit VARCHAR(30), wgknz INT DEFAULT 0 NOT NULL, einstandspreis DECIMAL(6,2), listenpreis DECIMAL(6,2), mwst_art CHAR(9) DEFAULT 'voll' NOT NULL, mindestbestand INT DEFAULT 0 NOT NULL, letzte_aenderung timestamp DEFAULT current_timestamp, CHECK (einstandspreis >= 0), CHECK (listenpreis >= 0), CHECK (mindestbestand >= 0), CHECK (listenpreis >= einstandspreis * 1.5), FOREIGN KEY (wgknz) REFERENCES warengruppe(kennziffer) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (mwst_art) REFERENCES mwst(mwst_art) ON DELETE SET DEFAULT ON UPDATE CASCADE ); CREATE TABLE bestellung ( mid INT NOT NULL, bnr INT NOT NULL, kid VARCHAR(50) NOT NULL, bestelldatum DATE NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBEST PRIMARY KEY (mid,bnr), CONSTRAINT FKBESTKUND FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON UPDATE CASCADE ON DELETE SET NULL, UNIQUE (kid,bestelldatum) ); CREATE TABLE bestell_position ( mid INT NOT NULL, bnr INT NOT NULL, pos INT NOT NULL, anr INT NOT NULL, anzahl INT DEFAULT 1 NOT NULL, letzte_aenderung TIMESTAMP DEFAULT current_timestamp, CONSTRAINT PKBESTPOS PRIMARY KEY (mid,bnr,pos), CONSTRAINT FKBESTPOSBEST FOREIGN KEY (mid,bnr) REFERENCES bestellung (mid,bnr) ON UPDATE CASCADE ON DELETE CASCADE, CHECK (anzahl >=0) ); Ü13.3.2 MySQL, PostgreSQL, Firebird, OpenOffice.org Base CREATE TABLE kind ( kdnr INT NOT NULL PRIMARY KEY, vorname CHAR(25) NOT NULL, alterjahre INT NOT NULL, geschlecht CHAR(1), mid INT NOT NULL, kid VARCHAR(50) NOT NULL, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT ALTERSANGABE CHECK (alterjahre >= 0), CONSTRAINT ENUMGESCHLECHT CHECK (geschlecht = 'M' OR geschlecht = 'W'), CONSTRAINT FKKIKU FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON DELETE CASCADE ON UPDATE CASCADE ); MS Access nicht möglich SQL Server CREATE TABLE kind ( kdnr INT NOT NULL PRIMARY KEY, vorname CHAR(25) NOT NULL, alterjahre INT NOT NULL, geschlecht CHAR(1), mid INT NOT NULL, kid VARCHAR(50) NOT NULL, letzte_aenderung DATETIME2 DEFAULT current_timestamp, CONSTRAINT ALTERSANGABE CHECK (alterjahre >= 0), CONSTRAINT ENUMGESCHLECHT CHECK (geschlecht = 'M' OR geschlecht = 'W'), CONSTRAINT FKKIKU FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid) ON DELETE CASCADE ON UPDATE CASCADE ); Oracle CREATE TABLE kind ( kdnr INT NOT NULL PRIMARY KEY, vorname CHAR(25) NOT NULL, alterjahre INT NOT NULL, geschlecht CHAR(1), mid INT NOT NULL, kid VARCHAR(50) NOT NULL, letzte_aenderung timestamp DEFAULT current_timestamp, CONSTRAINT ALTERSANGABE CHECK (alterjahre >= 0), CONSTRAINT ENUMGESCHLECHT CHECK (geschlecht = 'M' OR geschlecht = 'W'), CONSTRAINT FKKIKU FOREIGN KEY (mid,kid) REFERENCES kunden(mid,kid)ON DELETE CASCADE ); Hinweis: Der Feldname alter statt alterjahre führt in einigen Systemen zu Problemen, da er als SChlüsselwort ALTER interpretiert wird. Ü13.4.1 MySQL, PostgreSQL, SQL Server, Oracle, OpenOffice.org Base ALTER TABLE kind ADD lieblingsspeise VARCHAR(50) NULL; MS Access über die grafische Oberfläche Firebird ALTER TABLE kind ADD lieblingsspeise VARCHAR(50); Ü13.4.2 MySQL, PostgreSQL, SQL Server, Oracle, OpenOffice.org Base ALTER TABLE kind DROP COLUMN lieblingsspeise; MS Access über die grafische Oberfläche Firebird ALTER TABLE kind DROP lieblingsspeise; Ü13.4.3 MySQL ALTER TABLE kind DROP FOREIGN KEY FKKIKU; PostgreSQL, SQL Server ALTER TABLE kind DROP CONSTRAINT FKKIKU; MS Access über die grafische Oberfläche Oracle, Firebird, OpenOffice.org Base ALTER TABLE kind DROP CONSTRAINT FKKIKU; Ü13.4.4 MySQL Es gibt zwar eine Reihe von Erweiterungen zum ALTER TABLE, aber es können keine CHECK-Integritätsbedingungen entfernt werden. MS Access über die grafische Oberfläche PostgreSQL, SQL Server, Oracle, Firebird, OpenOffice.org Base ALTER TABLE kind DROP CONSTRAINT ENUMGESCHLECHT; Ü13.4.5 MySQL, PostgreSQL, SQL Server, Oracle, Firebird, openBase ALTER TABLE kind ADD CONSTRAINT ENUMGESCHLECHT CHECK (geschlecht='M' OR geschlecht='F'); MS Access über die grafische Oberfläche Ü13.5.1 MySQL, PostgreSQL, SQL Server, Oracle, Firebird, openBase DROP TABLE kind; MS Access über die grafische Oberfläche Ü13.5.2 MySQL, PostgreSQL, SQL Server, Firebird, OpenOffice.org Base CREATE TABLE test (testfeld INT PRIMARY KEY); CREATE TABLE test2 (test2pk INT PRIMARY KEY, testfeld2 INT); ALTER TABLE test2 ADD CONSTRAINT FK FOREIGN KEY (testfeld2) REFERENCES test(testfeld) ON DELETE SET NULL ON UPDATE SET NULL; DROP TABLE test; Anmerkung: DROP TABLE test CASCADE; würde funktionieren und den Constraint mitlöschen. MS Access über die grafische Oberfläche Oracle CREATE TABLE test (testfeld INT PRIMARY KEY); CREATE TABLE test2 (test2pk INT PRIMARY KEY, testfeld2 INT); ALTER TABLE test2 ADD CONSTRAINT FK FOREIGN KEY (testfeld2) REFERENCES test(testfeld) ON DELETE SET NULL; DROP TABLE test; Jetzt sollte jeweils eine Fehlermeldung erscheinen, die sich auf den CONSTRAINT bezieht. Test kann nicht gelöscht werden, weil davon noch ein anderes Objekt abhängig ist. Es müsste zunächst test2 gelöscht werden oder der Constraint entfernt werden, wie es in der nächsten Aufgabe geschieht. Ü13.5.3 MySQL ALTER TABLE test2 DROP FOREIGN KEY FK; DROP TABLE test; PostgreSQL, SQL Server ALTER TABLE test2 DROP CONSTRAINT FK; DROP TABLE test; MS Access über die grafische Oberfläche Oracle, Firebird, OpenOffice.org Base ALTER TABLE test2 DROP CONSTRAINT FK; DROP TABLE test; Ü13.5.4 MySQL, PostgreSQL, SQL Server, Oracle, Firebird, OpenOffice.org Base DROP TABLE test2; Ü13.5.5 Indem man sie in der umgekehrten Reihenfolge gelöscht hätte, also erst test2 und dann test. DROP TABLE test2; DROP TABLE test; CREATE DOMAIN mehrwertsteuerart AS CHAR(9) DEFAULT 'kein' NOT NULL CHECK (VALUE IN ('voll', 'ermässigt', 'kein') ); Ü13.6.1 nur PostgreSQL, Firebird CREATE DOMAIN mehrwertsteuer AS INTEGER DEFAULT 0 CHECK (VALUE IN (0,1,2)); oder CREATE DOMAIN mehrwertsteuer AS INTEGER DEFAULT 0 CHECK (VALUE >=0 AND VALUE <=2); SQL Server CREATE TYPE mehrwertsteuer FROM INTEGER; Diese Lösung bleibt natürlich unvollständig, ist eigentlich sinnlos. Immerhin bietet der SQL Server mit CREATE TYPE hier Ansätze. Ü13.6.2 nur PostgreSQL, Firebird CREATE DOMAIN menge AS INTEGER DEFAULT 0 CHECK (VALUE >= 0); Mit dem SQL Server lässt sich wiederum eine "Lösung" wie oben erzeugen. Ü13.6.3 nur PostgreSQL, Firebird CREATE DOMAIN geschlecht AS CHAR(1) CHECK (VALUE IN ('M', 'W')); CREATE TYPE geschlecht FROM CHAR(1); Diese Lösung bleibt natürlich unvollständig, ist eigentlich sinnlos. Immerhin bietet der SQL Server mit CREATE TYPE hier Ansätze. Ü13.6.4 nur PostgreSQL, Firebird DROP DOMAIN mehrwertsteuer; DROP DOMAIN menge; DROP DOMAIN geschlecht; SQL Server DROP TYPE mehrwertsteuer; DROP TYPE menge; DROP TYPE geschlecht; Ü13.7.1 MySQL CREATE TABLE warengruppe9 AS (SELECT a.anr, a.bezeichnung, a.gebinde, a.einheit, a.einstandspreis, a.listenpreis, a.mwst_art, a.bestand, NOW() FROM artikel a WHERE a.wgknz = 9); PostgreSQL, Oracle CREATE TABLE warengruppe9 AS (SELECT a.anr, a.bezeichnung, a.gebinde, a.einheit, a.einstandspreis, a.listenpreis, a.mwst_art, a.bestand, CURRENT_DATE AS "letzte_aenderung" FROM artikel a WHERE a.wgknz = 9); SQL Server, Firebird, MS Access, OpenOffice.org Base nicht verfügbar Ü13.7.2 MySQL, PostgreSQL, Oracle CREATE TABLE endkundenliste AS (SELECT a.anr, a.bezeichnung, a.gebinde, a.einheit, a.listenpreis * (1+m.mwst_satz) AS "endpreis", m.mwst_satz FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)); SQL Server, Firebird, MS Access, OpenOffice.org Base nicht verfügbar Ü13.7.3 MySQL, PostgreSQL, Oracle CREATE TABLE Kunden_BueroFix AS (SELECT k.kid, k.firma, k.anrede, k.nachname, k.vorname, k.strasse, k.PLZ, k.ort FROM kunden k WHERE k.mid = 1); SQL Server, Firebird, MS Access, OpenOffice.org Base nicht verfügbar Ü13.7.4 MySQL, PostgreSQL, Oracle CREATE TABLE unbearbeiteteThemen AS (SELECT kt.Kursthema, kt.Kursbeschreibung, kt.DauerPlan FROM tbkursthema kt WHERE NOT EXISTS (SELECT * FROM tbkurs k WHERE kt.KTHID = k.KTHID) ); SQL Server, Firebird, MS Access, OpenOffice.org Base nicht verfügbar Ü13.7.5 MySQL, PostgreSQL, Oracle CREATE TABLE eingesetzterDozent AS (SELECT d.DID, d.Beschaeftigungsbeginn, d.Stundensatz, p.Familienname, p.Vorname, k.Kurskennung, k.KursdauerStunden, k.Kursbeginn, k.Kursende FROM tbDozent d INNER JOIN tbPerson p ON (d.PID = p.PID) INNER JOIN tbkurs k ON (d.DID = k.DID) WHERE EXISTS (SELECT * FROM tbkurs k2 WHERE d.DID = k2.DID) ); SQL Server, Firebird, MS Access, OpenOffice.org Base nicht verfügbar