Lösungen: View
Completion requirements
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