【问题标题】:Logical grouping schemas in ORACLE?ORACLE 中的逻辑分组模式?
【发布时间】:2011-12-23 18:45:19
【问题描述】:

我们正在为 ORACLE 11g 中的客户端计划一个新系统。几年来,我大部分时间都在 Sql Server 世界中工作,并且并不真正了解最新的 ORACLE 更新。

我想知道 ORACLE 是否已经添加了一个特殊功能,即数据库对象的某种逻辑“容器”,类似于 Sql Server 的SCHEMA

当尝试从开发 > 测试 > 实时推送时,尝试使用像 Sql Server 这样的 ORACLE 架构最终会成为代码比较的灾难。

包有点相似,只是您不能将表放入包中(因此它们实际上仅适用于逻辑代码分组)。

我知道的唯一其他选择是必须在对象名称前加上“模式”前缀的古老做法,即RPT_REPORTSRPT_PARAMETERSRPT_LOGSRPT_USERSRPT_RUN_REPORT(),前缀 RPT_ 表示这些处理我们的报告引擎的所有对象都说。编写这样的系统感觉就像我们从未离开 8.3 文件命名时代。

目前是否有任何更简洁、更直接的方式在 ORACLE 中将相关对象进行逻辑分组?

【问题讨论】:

    标签: oracle schema oracle11g logical-grouping


    【解决方案1】:

    Oracle 的数据库对象逻辑容器是模式。我不知道你能得到多少“更干净”和“更直接”!你将不得不在这里进行范式转换。不要试图用 SQL Server 术语来思考,而要强制使用看起来像 Oracle 上的 SQL Server 的解决方案。熟悉 Oracle 的工作并从这个角度解决您的问题。如果您知道自己在做什么,那么在 Oracle 中从开发到测试再到生产应该没有问题。

    当您使用“过时的实践”之类的术语时,您似乎对 Oracle 有所了解。我建议您通过阅读来了解 Oracle 非常丰富和强大的特性集,因为您显然已经为这个项目致力于 Oracle。特别是,请阅读 Tom Kyte 的“Effective Oracle By Design”。阅读完之后,请查看同一作者的“专家 Oracle 数据库架构”,以更深入地了解 Oracle 的工作原理。你有责任让你的客户知道如何使用你得到的工具。谁知道?你甚至可能开始喜欢它。将其视为您工具箱中的另一个工具。您没有与 SQL Server 结婚,也没有对使用 Oracle 不忠;-)

    编辑:

    回答 OP 提出的问题:

    我不确定为什么这是一个后勤问题。它们可以被认为是独立的数据库,但实际上它们不是。不,您不需要为每个模式使用单独的数据文件。单个数据文件通常用于所有模式。

    如果您想要一个“漂亮的、独立的数据库”ala SQL Server,只需创建一个模式来存储您的所有对象。问题结束。您可以创建其他用户/模式,只是不要让他们能够创建对象。

    有一些工具可以比较对象和数据,就像在 PL/SQL Developer 比较中一样。通常在 Oracle 中,您想要比较模式,而不是整个数据库。我不确定为什么你要拥有多个模式,每个模式都有自己的对象。是什么意思?将您的对象(表、触发器、代码、视图等)保存在一个模式中。

    【讨论】:

    • 此外,如果您使用同义词访问其他模式中的对象,而不是在过程代码中硬编码模式名称,则跨不同命名模式的代码比较不会成为问题。
    • 没错。一切都是为了知道自己在做什么。
    • ORACLE 模式的逻辑问题在于它们本质上是独立的数据库,不是吗?所以如果你有 5 个模式,你需要维护 5 组数据文件,需要做 5 次不同的代码比较,这不是一个很好的自包含数据库。因此,如果您想尝试使用多个模式,ORACLE 项目的复杂性会迅速增加。除非我错过了什么,这是可能的。是否有用于 ORACLE 的数据库比较工具,可以一次性比较一组模式?我使用的那个(PL/SQL Developer)一次做一个模式/数据库。
    • 我知道 ORACLE 确实有一些不错的结构。最大的一个(供我使用)是预 DML BEFORE 触发器。天哪,我希望 MS 能把它带到 Sql Server 上!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多