CREATE VIEW

Nawil

Neuer Benutzer
Beiträge
2
Hallo zusammen,
leider komme ich bei der Aufgabe eine View zu erstellen nicht weiter.

Gegeben habe ich 2 Tabellen

CREATE TABLE Modul(
Modulbezeichnung VARCHAR(50) PRIMARY KEY,
Veranstaltungsanzahl NUMBER NOT NULL
);

CREATE TABLE Einzeltestat(
Testat_Id NUMBER NOT NULL,
Matrikelnummer NUMBER NOT NULL,
Veranstaltungsnummer NUMBER NOT NULL,
Modulbezeichnung VARCHAR(50) NOT NULL,
Testatwert VARCHAR2(20),
Bemerkung VARCHAR2(50),
CONSTRAINT Einzeltestat_PK PRIMARY KEY(
Testat_Id, Matrikelnummer, Veranstaltungsnummer, Modulbezeichnung),
CONSTRAINT Matrikelnummer_FK FOREIGN KEY
(Matrikelnummer) REFERENCES Student(Matrikelnummer),
CONSTRAINT Modulbezeichnung_FK FOREIGN KEY
(Modulbezeichnung) REFERENCES Modul(Modulbezeichnung),
CONSTRAINT Testatwert_Check CHECK (Testatwert IN ('bestanden', 'nicht_bestanden'))
);

Mein derzeitiger Code für die View ist:

CREATE VIEW Gesamttestat AS
SELECT Einzeltestat.Testat_Id, Einzeltestat.Matrikelnummer, Einzeltestat.Modulbezeichnung,
COUNT(Veranstaltungsanzahl) AS Testatanzahl
FROM Einzeltestat JOIN Modul ON
Einzeltestat.Modulbezeichnung = Modul.Modulbezeichnung
WHERE Einzeltestat.Testatwert = 'bestanden'
GROUP BY Modulbezeichnung, Matrikelnummer, Veranstaltungsanzahl;

Leider sagt er mir, dass die Spalte nicht eindeutig definiert ist.

Ich hoffe auf Rettung!

Liebe Grüße
 
Werbung:
Du hast in beiden Tabellen eine Spalte mit diesem Namen, also mußt Du nun exakt sagen, aus welcher Tabelle diese Spalte kommen soll. Außerdem ist noch Dein GROUP BY unvollständig.
 
Konkret GROUP BY Modulbezeichnung kann sich auf beide Tabellen beziehen, richtig wäre GROUP BY Einzeltestat.Modulbezeichnung weil du die auch im Select-Teil nutzt.

Außerdem fehlt die Spalten Einzeltestat.Testat_Id im GROUP BY und Veranstaltungsanzahl macht da vermutlich keinen Sinn oder fehlt im Select-Teil.
 
Modulbezeichnung als Primary Key kann man machen, dann muss man aber auch mit jeder Menge Probleme (und Platzverschwendung in abhängigen Tabellen) leben. Was ist, wenn das Modul umbenannt wird?
 
da wäre noch mehr:

* CONSTRAINT Einzeltestat_PK PRIMARY KEY(Testat_Id, Matrikelnummer, Veranstaltungsnummer, Modulbezeichnung)
Die testat_id sollte da reichen, oder ist die nicht eindeutig? So wird das ein recht großer Klumpen als PK.

* CONSTRAINT Testatwert_Check CHECK (Testatwert IN ('bestanden', 'nicht_bestanden'))
Warum nicht Spalte als BOOL?
 
Werbung:
Zurück
Oben