Forum: PC-Programmierung Oracle Frage


von John (Gast)


Lesenswert?

Hallo,
ich sitze an einer Aufgabe und habe keine Ahnung wo das Problem konkret 
liegt:

Es geht um Oracle DDL:

Kunde hat zu Konto eine 1:1 Beziehung Namens "hat"

Angegeben ist folgendes:
1
CREATE TABLE Kunde (KundenNr INTEGER PRIMARY KEY);
2
3
CREATE TABLE Konto (IBAN VARCHAR(50) PRIMARY KEY);
4
5
CREATE TABLE hat(
6
  KundenNr INTEGER PRIMARY KEY REFERENCES Kunde,
7
  IBAN VARCHAR(50) NOT NULL UNIQUE REFERENCES Konto
8
);

Die Aufgabe lautet:

Vervollständigen Sie die DDL für Kunde und Konto so, dass die 1:1 
Beziehung zwischen diesen Entitäten korrekt abgebildet ist.

Ich frage mich nun wo genau die Problematik liegt.
In der Tabelle hat ist Kunde der Primarykey und kann nur einmal 
vorkommen. IBAN ist Unique und kommt somit auch nur einmal vor.
Demnach ist das doch eine 1:1 Beziehung?

Oder geht es konkret darum, dass wenn ein Kunde angelegt wird, ein CHECK 
erfolgen soll, ob es dazu auch ein Konto gibt?
Also Kunde und Konto bekommen Checks, ob jeweils der andere exisitiert?
Setzt natürlich Deferable und manuelles Committen voraus.

Wäre nett wenn sich das jemand ansehen könnte.

Danke

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Was sagt den der Aufgabensteller dazu?

von John (Gast)


Lesenswert?

Nicht mehr erreichbar zu der Uhrzeit

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

John schrieb:
> Nicht mehr erreichbar zu der Uhrzeit

Und heute um 23:59 ist Abgabe korrekt? ;-)
Dann hilft eigentlich nur in den Lern-Unterlagen zu schauen ob es 
vergleichbare Problemstellungen gab und wie dort die Lösungsstrategie 
war. Hilft dir ja nix wenn du dann sagst 'XYZ aus Forum 
mikrocontroller.net hat aber gesagt das das so zu lösen wäre'. In deinem 
Beispiel ist z.B. nicht sichergestellt das jeder Kunde genau ein Konto 
hat (und umgekehrt). Ich könnte also in Kunde und Konto beliebige 
Datensätze einfügen die nicht in hat Auftauchen...

von John (Gast)


Lesenswert?

Nur meine Gedanken noch.
Check Constraints können keine Query beinhalten, ist also blöd.

Es steht dran, man soll die DDL vervollständigen. Ich hätte jetzt 
einfach einen Trigger geschrieben?

von Andreas H. (ahz)


Lesenswert?

John schrieb:
> Also Kunde und Konto bekommen Checks, ob jeweils der andere exisitiert?

Und wie legst Du dann einen neuen Datensatz an?

Ansonsten versuchs doch mal mit einer alten aber bewährten Methode: 
Lernen^^

von -.-.- (Gast)


Lesenswert?

in der Darstellung kann ein Kunde mehrere Konten haben. ist aber gar 
nicht so schwierig, sollte vielleicht in der 4 oder 5 Woche der VL 
drangekommen sein.

von John (Gast)


Lesenswert?

Die Checks können verzögert werden wie ich bereits schrieb.

Wie kann ein Kunde mehrer Konten haben? Kunde ist in Tabelle hat ein 
Primarykey.

Und es handelt sich um keine Abgabr sondern um alte Klausuraufgaben zur 
Prüfungsvorbereitung.

von c.m. (Gast)


Lesenswert?

create table hat (kdnr integer primary key
                 ,iban varchar2(50));
create unique index idx_u_hat on hat (kdnr, iban);

ist der weg das ziel, oder ist das ziel das ziel?

von John (Gast)


Lesenswert?

Naja es heißt ja man soll die Tabelle Kunde und Konto erweitern. Doch 
nicht etwas nur einen Fremdschlüssel auf den Eintrag in hat? Damit kann 
es  keine doppelten Kunden oder Konten geben.
Aber das ist doch absolut blödsinnig oder nicht? Sollte Kunde nicht ein 
einfach ein Attribut KontoId oder ähnliches bekommen?

von Jan H. (j_hansen)


Lesenswert?

John schrieb:
> Sollte Kunde nicht ein einfach ein Attribut KontoId oder ähnliches
> bekommen?

Das musst doch du wissen, aber normalerweise schon.

von Jens G. (jensig)


Lesenswert?

Was der Lehrer vielleicht will, ist, daß man keinen Kunde bzw. Konto 
einfach so einfügen kann, ohen auch gleichzeitig in hat die Beziehung 
mit reinzunehmen (sonst könnte man Kunden und Konten in den beiden 
Tabellen noch und nöcher definieren, ohne deren Beziehung via hat 
definieren zu müssen)
Also müssen wohl noch paar Foreigne keys in kunde und konto noch mit 
rein, die auf die jeweilige Spalte in hat verweisen.
Ob dieses in alle Richtungen ver-pointerte Konstrukt auch noch Inserts 
zuläßt, kommt auf die Möglichkeiten Oracles an. Kenne mich mit Oracle 
nicht weiter aus, verzögerte Checks wurden aber schon genannt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.