1.-5.

IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'ViewDemo') CREATE DATABASE ViewDemo
GO

USE ViewDemo

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblRefMitarbeiterProjekt') DROP TABLE tblRefMitarbeiterProjekt
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblMitarbeiter') DROP TABLE tblMitarbeiter
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblProjekt') DROP TABLE tblProjekt

/* Aufg. 5 */
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'viewMitarbeiterProjektbezeichnung') DROP VIEW viewMitarbeiterProjektbezeichnung


CREATE TABLE tblProjekt
(
	ProjektID int IDENTITY PRIMARY KEY,
	Bezeichnung varchar(50)
);
CREATE TABLE tblMitarbeiter
(
	MitarbeiterID int IDENTITY PRIMARY KEY,
	Name varchar(50)
);
CREATE TABLE tblRefMitarbeiterProjekt
(
	ProjektID int REFERENCES tblProjekt(ProjektID)
	ON DELETE CASCADE,
	MitarbeiterID int REFERENCES tblMitarbeiter(MitarbeiterID)
	ON DELETE CASCADE
);

INSERT INTO tblProjekt (Bezeichnung) VALUES ('Kundenumfrage');
INSERT INTO tblProjekt (Bezeichnung) VALUES ('Verkaufspromotion');
INSERT INTO tblProjekt (Bezeichnung) VALUES ('Konkurrenzanalyse');

INSERT INTO tblMitarbeiter (Name) VALUES ('Lorenz');
INSERT INTO tblMitarbeiter (Name) VALUES ('Hohl');
INSERT INTO tblMitarbeiter (Name) VALUES ('Willschrein');

INSERT INTO tblRefMitarbeiterProjekt (MitarbeiterID,ProjektID) VALUES (1,2);
INSERT INTO tblRefMitarbeiterProjekt (MitarbeiterID,ProjektID) VALUES (2,3);
INSERT INTO tblRefMitarbeiterProjekt (MitarbeiterID,ProjektID) VALUES (3,1);
INSERT INTO tblRefMitarbeiterProjekt (MitarbeiterID,ProjektID) VALUES (3,2);
INSERT INTO tblRefMitarbeiterProjekt (MitarbeiterID,ProjektID) VALUES (3,3);

/* Aufg. 1 */
SELECT Name AS Mitarbeiter, Bezeichnung AS Projektbezeichnung FROM tblMitarbeiter 
	INNER JOIN tblRefMitarbeiterProjekt ON tblMitarbeiter.MitarbeiterID = tblRefMitarbeiterProjekt.MitarbeiterID 
	INNER JOIN tblProjekt ON tblRefMitarbeiterProjekt.ProjektID = tblProjekt.ProjektID


/* Aufg. 2 */
GO

CREATE VIEW viewMitarbeiterProjektbezeichnung
AS 
SELECT Name AS Mitarbeiter, Bezeichnung AS Projektbezeichnung FROM tblMitarbeiter 
	INNER JOIN tblRefMitarbeiterProjekt ON tblMitarbeiter.MitarbeiterID = tblRefMitarbeiterProjekt.MitarbeiterID 
	INNER JOIN tblProjekt ON tblRefMitarbeiterProjekt.ProjektID = tblProjekt.ProjektID

GO

/* Aufg. 3 */
DELETE FROM tblMitarbeiter WHERE MitarbeiterID = 3

/* Aufg. 4 */
SELECT * FROM viewMitarbeiterProjektbezeichnung ORDER BY Mitarbeiter

6. Weil die gespeicherte Abfrage der Sicht erst beim Abfragen derselben ausgeführt wurde, also nach dem Löschen des Mitarbeiters. Außerdem kommt erstb bei der Abfrage der Sicht die ORDER BY-Klausel zur Anwendung.

7. Nein, das erlaubt das DBMS nicht.

8. Komplexe Abfragen lassen sich als Sicht sehr leicht abfragen, Arbeit wird erleichtert und Berechtigungen lassen sich gut einschränken.

9. Mittels einer Leseberechtigung auf eine Sicht lassen sich auch Tabellen bzw. Spalten abfragen, auf die keine direkte Berechtigung existiert.


Last modified: Friday, 31 August 2018, 8:27 AM