Datenbank erstellen Oracle

kommi

Neuer Benutzer
Beiträge
3
Problemstellung: Wir müssen für die Schule folgende Datenbank erstellen. Nur enthält die Datenbank noch logische Fehler bzw. Objekte stimmen nicht.

Die Aufgabenstellung lautet:
Die Firma Hit möchte ihre Artikel und Bestellungen verwalten.

Code:

CREATE
TABLE Adresse
(
PLZ NUMBER (5) NOT NULL,
Ort VARCHAR2 (24 CHAR) NOT NULL ,
Strasse VARCHAR2 (24 CHAR) NOT NULL ,
Hausnummer NUMBER (3) NOT NULL ,
Adresse_ID NUMBER NOT NULL

) ;
ALTER TABLE Adresse ADD CONSTRAINT Adresse_PK PRIMARY KEY ( Adresse_ID ) ;

/*
CREATE TABLE Lieferant_Adresse (
Lieferant_Adresse_Id
Lieferant
Adresse
Art


);
*/

CREATE
TABLE Ansprechpartner
(
Anrede CHAR (4 CHAR) NOT NULL,
Vorname VARCHAR2 (24 CHAR) NOT NULL ,
Nachname VARCHAR2 (24 CHAR) NOT NULL ,
Ansprechpartner_ID NUMBER NOT NULL
) ;
ALTER TABLE Ansprechpartner ADD CONSTRAINT Ansprechpartner_PK PRIMARY KEY (
Ansprechpartner_ID ) ;


CREATE
TABLE Artikel
(
Artikelnummer NUMBER (5) NOT NULL ,
Artikelbezeichnung VARCHAR2 (24 CHAR) NOT NULL ,
Verkaufspreis NUMBER (8,2) NOT NULL ,
Preiseinheit CHAR (1 CHAR) NOT NULL ,
Minimalbestand NUMBER (6) ,
Maximalbestand NUMBER (6) ,
Artikel_ID NUMBER NOT NULL ,
Artikelgruppe NUMBER NOT NULL
) ;
ALTER TABLE Artikel ADD CONSTRAINT Artikel_PK PRIMARY KEY ( Artikel_ID ) ;

CREATE
TABLE Artikelgruppe
(
Bezeichnung VARCHAR2 (24 CHAR) NOT NULL ,
Artikelgruppe_ID NUMBER NOT NULL
) ;
ALTER TABLE Artikelgruppe ADD CONSTRAINT Artikelgruppe_PK PRIMARY KEY (
Artikelgruppe_ID ) ;

CREATE
TABLE Auftragsposition
(
Auftragsposition_ID NUMBER NOT NULL ,
Auftrag ...
Artikel NUMBER NOT NULL
Verkaufspreis NUMBER (5,2) NOT NULL ,
Preiseinheit NUMBER (4) NOT NULL ,
Artikelbezeichnung VARCHAR2 (36 CHAR) NOT NULL ,
Menge NUMBER (6) NOT NULL

) ;
ALTER TABLE Auftragsposition ADD CONSTRAINT Auftragsposition_PK PRIMARY KEY (
Auftragsposition_ID ) ;

CREATE
TABLE Bestellung
(
Bestellmenge NUMBER (5) NOT NULL ,
Bestelldatum DATE ,
Lieferdatum DATE ,
Bestellung_ID NUMBER NOT NULL ,
Bezugsquelle NUMBER ,
Lieferant_ID NUMBER NOT NULL
) ;
CREATE UNIQUE INDEX Bestellung__IDX ON Bestellung
(
Lieferant_ID ASC
)
;
ALTER TABLE Bestellung ADD CONSTRAINT Bestellung_PK PRIMARY KEY ( Bestellung_ID
) ;

CREATE
TABLE Bezugsquelle
(
Bestellnummer NUMBER (5) NOT NULL ,
Einkaufspreis NUMBER (5,2) NOT NULL ,
Verpackungseinheit NUMBER (5) ,
Bezugsquelle_ID NUMBER NOT NULL ,
Artikel NUMBER NOT NULL ,
Lieferant NUMBER NOT NULL
) ;
ALTER TABLE Bezugsquelle ADD CONSTRAINT Bezugsquelle_PK PRIMARY KEY (
Bezugsquelle_ID ) ;

CREATE
TABLE Kontakt
(
Telefon VARCHAR2 (16 CHAR) ,
Mail VARCHAR2 (36 CHAR) ,
Kontakt_ID NUMBER NOT NULL

) ;

ALTER TABLE Kontakt ADD CONSTRAINT Kontakt_PK PRIMARY KEY ( Kontakt_ID ) ;

CREATE
TABLE Kunde
(
Kundennummer NUMBER (5) NOT NULL ,
Anrede CHAR (4 CHAR) NOT NULL ,
Vorname VARCHAR2 (24 CHAR) NOT NULL ,
Nachname VARCHAR2 (24 CHAR) NOT NULL ,
Kunde_ID NUMBER NOT NULL ,
Art VARCHAR2 (12 CHAR) ,
Ansprechpartner_ID NUMBER NOT NULL ,
Type VARCHAR2 (12 CHAR) ,
Kontakt NUMBER NOT NULL ,
Adresse NUMBER NOT NULL
) ;
CREATE UNIQUE INDEX Kunde__IDX ON Kunde
(
Kontakt ASC
)
;
ALTER TABLE Kunde ADD CONSTRAINT Kunde_PK PRIMARY KEY ( Kunde_ID ) ;

CREATE
TABLE KundeAdresse
(
Kunde NUMBER NOT NULL ,
Adresse NUMBER NOT NULL ,
Art VARCHAR2 (12 CHAR)
) ;
ALTER TABLE KundeAdresse ADD CONSTRAINT KundeAdresse_PK PRIMARY KEY (
Kunde, Adresse ) ;

CREATE
TABLE Kundenauftrag
(
Auftragsnummer NUMBER (5) NOT NULL ,
Auftragsdatum DATE ,
Lieferdatum DATE ,
Rabatt NUMBER (3,2) NOT NULL ,
Kunde NUMBER(5) Not NULL
) ;

CREATE
TABLE Lager
(
Bezeichnung VARCHAR2 (24 CHAR) NOT NULL ,
Lager_ID NUMBER NOT NULL
) ;
ALTER TABLE Lager ADD CONSTRAINT Lager_PK PRIMARY KEY ( Lager_ID ) ;

CREATE
TABLE Lagerposition
(
Lagerposition_ID Number (5) NOT NULL,
Raum CHAR (1 CHAR) NOT NULL ,
Regal NUMBER (1) NOT NULL ,
Fach NUMBER (3) NOT NULL ,
Lagerbestand NUMBER (8) NOT NULL ,
Lager NUMBER NOT NULL ,
Artikel NUMBER NOT NULL
) ;
ALTER TABLE Lagerposition ADD CONSTRAINT Lagerposition_PK PRIMARY KEY ( Lagerposition_ID ) ;

CREATE
TABLE Lieferant
(
Lieferantennummer NUMBER (5) NOT NULL ,
Anrede CHAR (4 CHAR) NOT NULL ,
Vorname VARCHAR2 (24 CHAR) NOT NULL ,
Nachname VARCHAR2 (24 CHAR) NOT NULL ,
Lieferant_ID NUMBER NOT NULL ,
Ansprechpartner- NUMBER NOT NULL ,
Kontakt NUMBER NOT NULL ,
Adresse NUMBER NOT NULL
) ;

ALTER TABLE Lieferant ADD CONSTRAINT Lieferant_PK PRIMARY KEY ( Lieferant_ID )
;

CREATE
TABLE LieferantAdresse
(
Lieferant_ID NUMBER NOT NULL ,
Adresse_ID NUMBER NOT NULL ,
Art VARCHAR2 (12 CHAR)
) ;
ALTER TABLE LieferantAdresse ADD CONSTRAINT LieferantAdresse_PK PRIMARY KEY (
Lieferant_ID, Adresse_ID ) ;

ALTER TABLE Artikel ADD CONSTRAINT Artikel_Artikelgruppe_FK FOREIGN KEY (
Artikelgruppe_ID ) REFERENCES Artikelgruppe ( Artikelgruppe_ID )
;

ALTER TABLE Auftragsposition ADD CONSTRAINT Auftragsposition_Artikel_FK FOREIGN
KEY ( Artikel_ID ) REFERENCES Artikel ( Artikel_ID ) ;

ALTER TABLE Bestellung ADD CONSTRAINT Bestellung_Bezugsquelle_FK FOREIGN KEY (
Bezugsquelle_ID ) REFERENCES Bezugsquelle ( Bezugsquelle_ID ) ;

ALTER TABLE Bestellung ADD CONSTRAINT Bestellung_Lieferant_FK FOREIGN KEY (
Lieferant_ID ) REFERENCES Lieferant ( Lieferant_ID ) ;

ALTER TABLE Bezugsquelle ADD CONSTRAINT Bezugsquelle_Artikel_FK FOREIGN KEY (
Artikel_ID ) REFERENCES Artikel ( Artikel_ID ) ;

ALTER TABLE Bezugsquelle ADD CONSTRAINT Bezugsquelle_Lieferant_FK FOREIGN KEY (
Lieferant_ID ) REFERENCES Lieferant ( Lieferant_ID ) ;

ALTER TABLE KundeAdresse ADD CONSTRAINT FK_ASS_11 FOREIGN KEY ( Kunde_Kunde_ID
) REFERENCES Kunde ( Kunde_ID ) ON
DELETE CASCADE ;

ALTER TABLE KundeAdresse ADD CONSTRAINT FK_ASS_12 FOREIGN KEY (
Adresse_ID ) REFERENCES Adresse ( Adresse_ID ) ON
DELETE CASCADE ;

ALTER TABLE LieferantAdresse ADD CONSTRAINT FK_ASS_17 FOREIGN KEY (
Lieferant_ID ) REFERENCES Lieferant ( Lieferant_ID ) ON
DELETE CASCADE ;

ALTER TABLE LieferantAdresse ADD CONSTRAINT FK_ASS_18 FOREIGN KEY (
Adresse_ID ) REFERENCES Adresse ( Adresse_ID ) ON
DELETE CASCADE ;

ALTER TABLE Kontakt ADD CONSTRAINT Kontakt_Kunde_FK FOREIGN KEY (
Kunde_Kunde_ID ) REFERENCES Kunde ( Kunde_ID ) ;

ALTER TABLE Kontakt ADD CONSTRAINT Kontakt_Lieferant_FK FOREIGN KEY (
Lieferant_ID ) REFERENCES Lieferant ( Lieferant_ID ) ON
DELETE CASCADE ;

ALTER TABLE Adresse ADD CONSTRAINT KundeAdresse FOREIGN KEY ( Kunde_Kunde_ID )
REFERENCES Kunde ( Kunde_ID ) ON
DELETE CASCADE ;

ALTER TABLE Kunde ADD CONSTRAINT KundeAdressev1 FOREIGN KEY (
Adresse_ID ) REFERENCES Adresse ( Adresse_ID ) ON
DELETE CASCADE ;

ALTER TABLE Kunde ADD CONSTRAINT Kunde_Ansprechpartner_FK FOREIGN KEY (
Ansprechpartner_ID ) REFERENCES Ansprechpartner (
Ansprechpartner_ID ) ;

ALTER TABLE Kunde ADD CONSTRAINT Kunde_Kontakt_FK FOREIGN KEY (
Kontakt_ID ) REFERENCES Kontakt ( Kontakt_ID ) ;

-- ERROR: FK name length exceeds maximum allowed length(30)
ALTER TABLE Kundenauftrag ADD CONSTRAINT Kundenauftrag_Auftragsposition_FK
FOREIGN KEY ( Auftragsposition_ID ) REFERENCES
Auftragsposition ( Auftragsposition_ID ) ON
DELETE CASCADE ;

ALTER TABLE Kundenauftrag ADD CONSTRAINT Kundenauftrag_Kunde_FK FOREIGN KEY (
Kunde_Kunde_ID ) REFERENCES Kunde ( Kunde_ID ) ON
DELETE SET NULL ;

ALTER TABLE Lagerposition ADD CONSTRAINT Lagerposition_Artikel_FK FOREIGN KEY (
Artikel_ID ) REFERENCES Artikel ( Artikel_ID ) ;

ALTER TABLE Lagerposition ADD CONSTRAINT Lagerposition_Lager_FK FOREIGN KEY (
Lager_ID ) REFERENCES Lager ( Lager_ID ) ;

ALTER TABLE Adresse ADD CONSTRAINT LieferantAdresse FOREIGN KEY (
Lieferant_ID ) REFERENCES Lieferant ( Lieferant_ID ) ON
DELETE CASCADE ;

ALTER TABLE Lieferant ADD CONSTRAINT LieferantAdressev1 FOREIGN KEY (
Adresse_ID ) REFERENCES Adresse ( Adresse_ID ) ON
DELETE CASCADE ;

ALTER TABLE Lieferant ADD CONSTRAINT Lieferant_Ansprechpartner_FK FOREIGN KEY (
Ansprechpartner_ID ) REFERENCES Ansprechpartner (
Ansprechpartner_ID ) ;

ALTER TABLE Lieferant ADD CONSTRAINT Lieferant_Bestellung_FK FOREIGN KEY (
Bestellung_ID ) REFERENCES Bestellung ( Bestellung_ID ) ;

ALTER TABLE Lieferant ADD CONSTRAINT Lieferant_Kontakt_FK FOREIGN KEY (
Kontakt_ID ) REFERENCES Kontakt ( Kontakt_ID ) ON
DELETE CASCADE ;
 
Werbung:
Und wo genau ist jetzt deine Frage? Ich würde nicht davon ausgehen, dass dir jemand eine Komplettlösung präsentiert.
Aber wenn du an einem bestimmten Punkt nicht weiterkommst wird dir sicherlich geholfen.
 
Und wo genau ist jetzt deine Frage?

Bereits in den ersten Zeilen. Völlig vergurgste Datentypen für PLZ und Hausnummer. Das geht dann weiter im Text mit fehlenden Foreign Key Constraints und anderen seltsammen Dingen. Will man so einklich gar nicht weiter lesen... etwas Eigeninitiative und konkrete Fragen dürfen schon erwartet werden, wir sind hier nicht bei Wünsch-Dir-Was.
 
Bereits in den ersten Zeilen. Völlig vergurgste Datentypen für PLZ und Hausnummer. Das geht dann weiter im Text mit fehlenden Foreign Key Constraints und anderen seltsammen Dingen. Will man so einklich gar nicht weiter lesen... etwas Eigeninitiative und konkrete Fragen dürfen schon erwartet werden, wir sind hier nicht bei Wünsch-Dir-Was.

Das Problem ist das wir relativ wenige Vorkenntnisse in dem Gebiet haben. Die Constraints fehlen noch da der Datamodeler diese nicht automatisch einfügt.

Könntest du eventuell ein paar Beispiele machen für die Foreign Key Constraints anhand meiner Aufgabe?

Vielen Dank
 
Ihr fangt da eigentlich mitten drinnen an obwohl der Anfang noch nicht klar ist. Vergesst mal die Tabellen die sowieso nicht alle richtig. Sowohl in der Verwendung der Datentypen als auch die Entitäten selbst.
Nehmt den Zettel und arbeitet erstmal heraus, welche Entitäten dort vorkommen.
Dann setzt ihr diese in Verbindung zueinander. Im nächsten Schritt werden m:n Beziehungen durch eine 1:n und n:1 Zwischenbeziehung aufgelöst.

Jetzt werden die Schlüsselbegriffe vergeben, also das was später eure PK, FK Schlüssel werden. Wenn euch etwas komisch vorkommt, dann weiter anpassen.
Das alles passiert nach wie vor auf dem Papier, da muss noch nichts in der DB gemacht werden.

Als letzten Schritt werden dann die Spalten hinzugefügt und ggf. wieder angepasst.
Wenn ihr das habt, ode Fragen auftauchen kannst du hier wieder fragen. Vergiss dieses SQL Skript erstmal, das lenkt nur ab.

PS: Für Einsteiger finde ich dieses Beispiel sehr umfangreich. Auch der Lehrende scheint hier nicht alles durchdrungen zu haben.
 
Werbung:
Da findent man schon viele komische Details, hier noch ein paar Problemzonen:
a) Ein Kundenauftrag muss einen Wert Rabatt haben, warum darf der nicht NULL sein?
b) Was steht in der Spalte Lagerbestand? Ich vermute mal du meinst die Artikelmenge die auf der Lagerposition liegt, unter Bestand würde ich immer die Gesamtmenge aller Lagerplätze verstehen, ist aber nur irritierend.
c) Lieferanten sind seltsamme Gebilde bei dir:

Ansprechpartner- NUMBER NOT NULL ,
Kontakt NUMBER NOT NULL ,
Adresse NUMBER NOT NULL

Die Spalten sind zunächst mal nicht als FK gekennzeichnet, in den anderen Tabellen wird das aber gemacht. Dann kann ein Lieferant jetzt eine Adresse haben, eine Adresse aber theoretisch mehrere Lieferanten. Ist das sinnvoll und gewollt?
 
Zurück
Oben