oracle对象中的关系?

oracle对象中的关系?,oracle,object,Oracle,Object,如何在oracle对象中建立1到n和n到n的关系?除非“oracle对象”是某种类型的产品(大写字母有助于区分普通单词和产品名称),否则您可以使用与在任何其他DBMS中相同的方法进行此操作 对于1:n关系: CREATE TABLE Master ( PK_Column <sometype> NOT NULL PRIMARY KEY, ... ); CREATE TABLE Detail ( FK_Column <sometype> N

如何在oracle对象中建立1到n和n到n的关系?

除非“oracle对象”是某种类型的产品(大写字母有助于区分普通单词和产品名称),否则您可以使用与在任何其他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),
    ...
);
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),
    ...
);
createtablemaster
(
PK_列不为空主键,
...
);
创建表详细信息
(
FK_列不为空引用主节点,
OtherColumn不为空,
主键(FK_列、其他列),
...
);
对于n:m关系:

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),
    ...
);
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),
    ...
);
创建表格表格
(
N_标识符不为空主键,
...
);
创建表格表格
(
M_标识符不为空主键,
...
);
创建表交叉引用
(
N_标识符非空引用表N,
M_标识符非空引用表M,
主键(N_标识符、M_标识符),
...
);

SQL语法或多或少与DBMS无关(它应该关闭SQL标准语法)。

除非“Oracle对象”是某种产品(大写字母有助于区分普通单词和产品名称),否则您的操作方式与在任何其他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),
    ...
);
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),
    ...
);
createtablemaster
(
PK_列不为空主键,
...
);
创建表详细信息
(
FK_列不为空引用主节点,
OtherColumn不为空,
主键(FK_列、其他列),
...
);
对于n:m关系:

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),
    ...
);
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),
    ...
);
创建表格表格
(
N_标识符不为空主键,
...
);
创建表格表格
(
M_标识符不为空主键,
...
);
创建表交叉引用
(
N_标识符非空引用表N,
M_标识符非空引用表M,
主键(N_标识符、M_标识符),
...
);

SQL语法或多或少与DBMS无关(它应该关闭SQL标准语法)。

[EDIT]我相信问题是指OLE的Oracle对象(OO40)[/EDIT]

在此示例中,考虑Orror和LynIn项目之间的一对多关系。(一个订单可能有零个、一个或多个行_项,而一个行_项正好与一个订单关联。)我们跳过了所有建模步骤,得到了定义可能是什么样子的shell

一种选择是使用参考:

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
, ...
);
另一种选择是使用嵌套表(称为集合类型):

[编辑]

增编:

托尼·安德鲁斯(相当合理地)问人们为什么要使用“嵌套表”。Tony指出,生成的数据库结构将“更难访问”,这意味着(我认为)所需的查询结构是“非标准”SQL

坦白地说,我想不出使用嵌套表的好理由,但我必须至少承认OO4O确实提供了对嵌套表的支持

为什么会选择使用OO4O呢?它(表面上)提供了针对Oracle数据库的改进性能,这得益于本机驱动程序,避免了ODBC或OLE带来的开销。这也是一项专门针对Oracle的技术,针对OO4O接口编写应用程序意味着该应用程序将基本上绑定到Oracle数据库,如果不要求该应用程序支持多个(可互换的)数据库引擎,这可能是可以的

有关OO4O的更多信息和示例,请访问Oracle网站:


[/EDIT]

[EDIT]我相信这个问题是指OLE的Oracle对象(OO40)[/EDIT]

在此示例中,考虑Orror和LynIn项目之间的一对多关系。(一个订单可能有零个、一个或多个行_项,而一个行_项正好与一个订单关联。)我们跳过了所有建模步骤,得到了定义可能是什么样子的shell

一种选择是使用参考:

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
, ...
);
另一种选择是使用嵌套表(称为集合类型):

[编辑]

增编:

托尼·安德鲁斯(相当合理地)问人们为什么要使用“嵌套表”。Tony指出,生成的数据库结构将“更难访问”,这意味着(我认为)所需的查询结构是“非标准”SQL

坦白地说,我想不出使用嵌套表的好理由,但我必须至少承认OO4O确实提供了对嵌套表的支持

为什么会选择使用OO4O呢?它(表面上)提供了针对Oracle数据库的改进性能,这得益于本机驱动程序,避免了ODBC或OLE带来的开销。这也是一项专门针对Oracle的技术,针对OO4O接口编写应用程序意味着该应用程序将基本上绑定到Oracle数据库,如果不要求该应用程序支持多个(可互换的)数据库引擎,这可能是可以的

有关OO4O的更多信息和示例,请访问Oracle网站:


[/EDIT]

很好,但是你能用第二种方法发送一个例子吗?为什么要这样做?嵌套表在实践中并不是一个好主意-它们像普通表一样存储在封底下,但其方式会使它们更难访问。很好,但是您可以使用第二种方法发送一个示例吗?为什么要这样做?嵌套表在实践中不是一个好主意-它们像普通表一样存储在封面下,但其存储方式使它们更难访问。很好的示例:很好的示例: