2016-06-06 9 views
1

Ich habe eine Frage zum Verwenden von Primärschlüsseln und Fremdschlüsseln in einer objektrelationalen Datenbank in Oracle. Unten finden Sie meinen SQL-Code und fügen Anweisungen ein. Ich versuche eine einfache Datenbank mit Schüler, Kurs, Lehrer und Abteilung zu erstellen. aber wenn ich die unten ausgewählte Anweisung ausführe, sehe ich nicht die AbteilungID und die LehrerID, die ich eingegeben habe. Stattdessen bekomme ich [HR.DEPARTMENT_OBJTYP] als Wert für departmentID und ebenfalls für lehrerID. Ist das so, weil ich auf die gesamte Abteilung und nicht nur auf die AbteilungsID in der Kurstabelle verwiesen habe? Ich weiß nicht, wie man Fremdschlüssel verwendet und sie in einer objektbezogenen Datenbank richtig abfragt, und konnte keine nützlichen, leicht verständlichen Informationen darüber finden. Könnte mir bitte jemand zeigen, wo ich falsch liege?Oracle: Verwenden von Fremdschlüsseln in Objektbeziehungsdatenbank

zum Beispiel in Course_objtyp Ich mache ... TeacherID REF Teacher_objtyp. Ist das die richtige Art zu referenzieren, bin ich nicht sicher, da ich nur auf die lehrerID und nicht auf den ganzen Teacher_objtyp verweisen möchte?

CREATE TYPE Student_objtyp AS OBJECT (
    FName   VARCHAR2(20), 
    LName   VARCHAR2(20), 
    StudentID  NUMBER 
); 
/

CREATE TABLE Student_objtab OF Student_objtyp (StudentID PRIMARY KEY) 
    OBJECT IDENTIFIER IS PRIMARY KEY; 

CREATE TYPE Department_objtyp AS OBJECT (
    DeptID NUMBER, 
    DeptName VARCHAR2(20) 
); 
/ 

CREATE TABLE Department_objtab OF Department_objtyp (DeptID PRIMARY KEY) 
    OBJECT IDENTIFIER IS PRIMARY KEY; 

CREATE TYPE Teacher_objtyp AS OBJECT (
    TeacherID NUMBER, 
    FName VARCHAR2(20), 
    LName VARCHAR2(20) 
); 
/

CREATE TABLE Teacher_objtab OF Teacher_objtyp (TeacherID PRIMARY KEY) 
    OBJECT IDENTIFIER IS PRIMARY KEY; 

CREATE TYPE Course_objtyp AS OBJECT (
    CourseName VARCHAR(20), 
    CourseID NUMBER, 
    DeptID REF Department_objtyp, 
    TeacherID REF Teacher_objtyp 
); 
/

CREATE TABLE Course_objtab OF Course_objtyp (
    PRIMARY KEY (CourseID), 
    FOREIGN KEY (DeptID) REFERENCES Department_objtab, 
    FOREIGN KEY (TeacherID) REFERENCES Teacher_objtab) 
/

INSERT INTO Student_objtab VALUES('bill','smitts',1); 
INSERT INTO Student_objtab VALUES('bob','jo',2); 

INSERT INTO Teacher_objtab VALUES(1,'Mr','Higgins'); 

INSERT INTO Department_objtab VALUES(1111,'Science'); 

INSERT INTO Course_objtab 
SELECT 'Chem101',001, 
REF(D), 
REF(T) 
FROM Department_objtab D, Teacher_objtab T 
WHERE D.DeptID = 1111 and T.TeacherID = 1; 

die sehr einfache select-Anweisung i zu laufen versuchen:

select * from Course_objtab; 
+0

Ich weiß nicht, warum Sie versuchen, 'REF (D)' usw. einfügen, aber Sie sollten nur normale Werte AFAIK verwenden, von dem, was Sie zu versuchen scheinen zu tun. –

+0

Wie würde ich das tun. – Phill

Antwort

1

Die unten funktioniert gut, aber ich bin nicht sicher, ob Sie für die suchen.

CREATE TYPE Course_objtyp AS OBJECT (
    CourseName VARCHAR(20), 
    CourseID NUMBER, 
    DeptID Number, 
    TeacherID Number 
); 

CREATE TABLE Course_objtab OF Course_objtyp (
    PRIMARY KEY (CourseID), 
    FOREIGN KEY (DeptID) REFERENCES Department_objtab(DeptID), 
    FOREIGN KEY (TeacherID) REFERENCES Teacher_objtab(TeacherID)); 

INSERT INTO Course_objtab 
SELECT 'Chem101',001, D.DeptID, T.TeacherID 
FROM Department_objtab D, Teacher_objtab T 
WHERE D.DeptID = 1111 and T.TeacherID = 1; 
+0

Ja, genau das habe ich versucht. Vielen Dank – Phill