2009-06-02 17 views

Antwort

2

[EDIT] Ich glaube, die Frage für OLE zu Oracle Objekte bezieht (OO40) [/ EDIT]

Für dieses Beispiel betrachten wir eine Eins-zu-viele-Beziehung zwischen Ordnung und LINE_ITEM. (Eine Bestellung kann null, ein oder mehrere line_item haben, und ein line_item ist genau einer Bestellung zugeordnet.) Wir springen über alle Modellierungsschritte hinweg und gelangen zu einer Shell, in der die Definitionen aussehen könnten.

Eine Möglichkeit ist es, eine Referenz zu verwenden:

create type order_typ as object 
(id integer 
, ... 
); 

create table order_obj_table of order_type; 

create table line_item 
(order_ref ref order_typ scope is order_obj_table 
, ... 
); 

Eine weitere Alternative es eine verschachtelte Tabelle zu verwenden (eine Sammlung Typ genannt):

create type line_item_typ as object 
(id integer 
, ... 
); 

create type line_item_collection_typ as table of line_item_typ; 

create type order_typ as object 
(id   integer 
, line_items line_item_collection_typ 
, ... 
); 

[EDIT]

Nachtrag:

Tony Andrews fragt (ziemlich vernünftig), warum man "geschachtelte Tabellen" verwenden möchte. Tony weist darauf hin, dass die resultierenden Datenbankstrukturen "schwerer zugänglich" sein werden, womit er (denke ich) meint, dass die benötigten Abfragekonstrukte "nicht-standardmäßiges" SQL sind.

Ehrlich gesagt, ich kann mir keinen guten Grund vorstellen, dass ich eine verschachtelte Tabelle verwenden würde, aber ich muss zumindest anerkennen, dass OO4O Unterstützung für verschachtelte Tabellen bietet.

Warum sollte man sich überhaupt für OO4O entscheiden? Es bietet (scheinbar) eine verbesserte Leistung gegenüber einer Oracle-Datenbank, dank eines nativen Treibers, der den durch ODBC oder OLE verursachten Overhead vermeidet. Es ist auch eine Technologie speziell für Oracle, das Schreiben einer Anwendung gegen die OO4O-Schnittstelle bedeutet, dass die App im Wesentlichen an eine Oracle-Datenbank gebunden ist, was in Ordnung sein kann, wenn die App nicht mehrere (austauschbare) Datenbank-Engines unterstützen muss.

Weitere Informationen und Beispiele für OO4O sind von Oracle-Website zur Verfügung:

http://www.oracle.com/technology/tech/windows/ole/index.html

[/ EDIT]

+0

großartig, aber könnten Sie ein Beispiel mit der zweiten Alternative senden? –

+0

Beispiel für eine Frage –

+2

Warum möchten Sie das tun? Geschachtelte Tabellen sind keine gute Idee in der Praxis - sie werden unter dem Deckmantel als normale Tabellen gespeichert, aber auf eine Weise, die sie schwerer zugänglich macht. –

2

Wenn 'Oracle Objects' kein Produkt irgendeiner Art ist (Großbuchstaben helfen, gewöhnliche Wörter von Produktnamen zu unterscheiden), dann tun Sie es genauso wie in jedem anderen DBMS.

Für eine 1: n-Beziehung:

CREATE TABLE Master 
(
    PK_Column <sometype> NOT NULL PRIMARY KEY, 
    ... 
); 
CREATE TABLE Detail 
(
    FK_Column <sometype> NOT NULL REFERENCES Master, 
    OtherColumn <anothertype> NOT NULL, 
    PRIMARY KEY (FK_Column, OtherColumn), 
    ... 
); 

Für eine n: m-Beziehung:

CREATE TABLE TableN 
(
    N_Identifier <sometype> NOT NULL PRIMARY KEY, 
    ... 
); 
CREATE TABLE TableM 
(
    M_Identifier <anothertype> NOT NULL PRIMARY KEY, 
    ... 
); 
CREATE TABLE CrossRef 
(
    N_Identifier <sometype> NOT NULL REFERENCES TableN, 
    M_Identifier <anothertype> NOT NULL REFERENCES TableM, 
    PRIMARY KEY (N_Identifier, M_Identifier), 
    ... 
); 

Die SQL-Syntax ist mehr oder weniger DBMS-neutral (es sollte den SQL-Standard haute schließen Syntax).

Verwandte Themen