如何在oracle对象中创建关系1到n和n到n?
答案 0 :(得分: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标准语法)。
答案 1 :(得分:2)
[编辑]我认为问题是指Oracle Objects for OLE(OO40)[/ EDIT]
对于此示例,请考虑order和line_item之间的一对多关系。 (一个订单可能有零个,一个或多个line_item,而line_item只与一个订单相关联。)我们跳过了所有的建模步骤,并获得了定义可能是什么样的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
, ...
);
另一种替代方法是使用嵌套表(称为集合类型):
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 Andrews(非常合理地)问为什么要使用“嵌套表”。 Tony指出,生成的数据库结构将“难以访问”,他认为(我认为)所需的查询结构是“非标准”SQL。坦率地说,我想不出一个使用嵌套表的好理由,但我必须至少承认OO4O确实为嵌套表提供了支持。
为什么选择使用OO4O?它(表面上)提供了针对Oracle数据库的改进性能,凭借本机驱动程序可以避免ODBC或OLE带来的开销。它也是专门针对Oracle的技术,针对OO4O接口编写应用程序意味着应用程序将基本上与Oracle数据库绑定,如果不要求应用程序支持多个(可互换的)数据库引擎,这可能没问题。
有关OO4O的更多信息和示例,请访问Oracle网站:
http://www.oracle.com/technology/tech/windows/ole/index.html
<强> [/ EDIT] 强>