2009-06-02 52 views

回答

2

[編輯]相信的問題是指甲骨文對象爲OLE(OO40)/編輯]

對於這個例子,考慮順序和LINE_ITEM之間的一對多的關係。 (一個訂單可能有零個,一個或多個line_item,並且一個line_item只與一個訂單關聯)。我們跳過所有的建模步驟,並獲得定義可能的外觀。

一種選擇是使用一個參考:

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 
, ... 
); 

另一種替代方法爲使用一個嵌套表(稱爲集合型):

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 
, ... 
); 

[編輯]

附件:

託尼安德魯斯問(相當合理)爲什麼人們想要使用「嵌套表」。 Tony指出,由此產生的數據庫結構將「難以訪問」,他表示(我認爲)所需的查詢結構是「非標準」SQL。

非常坦率地說,我想不出一個好的理由,我會使用嵌套表,但我必須至少承認,OO4O確實提供了對嵌套表的支持。

爲什麼要選擇使用OO4O呢?它通過本機驅動程序提供(表面上)針對Oracle數據庫的改進性能,避免了由ODBC或OLE引起的開銷。它也是專門針對Oracle的技術,針對OO4O界面編寫應用程序意味着應用程序將基本上與Oracle數據庫綁定,如果沒有要求應用程序支持多個(可互換)的數據庫引擎,則該應用程序可能沒有問題。

更多信息和用於OO4O實例可從Oracle網站:

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

[/編輯]

+0

太棒了,但您可以使用第二個替代方案發送示例嗎? – 2009-06-02 04:24:08

2

除非'Oracle Objects'是某種產品(大寫字母有助於區分普通單詞和產品名稱),否則您的操作方法與您在其他任何DBMS中的操作方法相同。

對於1:n的關係:

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), 
    ... 
); 

對於n:M關係:

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), 
    ... 
); 

的SQL語法是或多或少DBMS中性(它應該劈出關閉SQL標準句法)。