强制关系m:n

时间:2015-01-19 17:56:36

标签: database oracle database-design oracle10g powerdesigner

我有一个用于学校作业的概念方案(Power Designer)以及表格torrent和服务器之间我有一个强制关系(一个torrent必须至少有一个服务器)。我生成物理模型,然后是代码(Oracle 10g),然后当我向torrent插入新行时,表中没有任何内容可以连接种子与服务器,所以torrent根本没有任何服务器正如它应该。如果是必须的话,生成的代码在我改变时不会改变。

  1. 当概念模型出现时,它是什么呢? 什么?
  2. 我能做些什么,以便torrent必须至少有一台服务器?
  3. Conceptual model

1 个答案:

答案 0 :(得分:3)

您需要了解生成概念,逻辑和物理模型的原因。

概念模型是用户理解的形式的感兴趣区域的表示。它将由具有属性的实体类和关于这些的业务规则组成。除了图表,还需要自然语言描述来充分解释这些要点。如果所有相关方都同意概念模型完全记录了感兴趣的领域,那么它就已经实现了它的目的。

逻辑模型将概念模型形式化为数据结构和完整性约束。逻辑模型可以表示为关系数据模型(RDM)。在这种情况下,所有数据结构和完整性约束将仅使用数学关系正式表示。它与数据库管理系统无关。

例如,您可以定义完整性约束,以便:

{ t(ID_TORRENTU) | t∈v(TORRENT) } = { o(ID_TORRENTU) | o∈v(OBSAHUJE) }

即。 ID_TORRENTU中的TORRENT值集等于ID_TORRENTU中的OBSAHUJE值集。

物理模型是特定数据库管理系统上逻辑模型的表示。您可以使用CREATE ASSERTION语句在SQL标准之后实现此完整性约束:

CREATE ASSERTION torrent_obsahuje AS CHECK ( NOT EXISTS ( SELECT t.id_torrentu FROM torrent t WHERE NOT EXISTS (SELECT NULL FROM obsahuje o WHERE o.id_torrentu = t.id_torrentu) ) )

但是,SQL DBMS(包括Oracle)不支持CREATE ASSERTION语句。为了在Oracle上实现此完整性约束,您需要自己编写代码。有多种方法可以实现这一点,包括编写自定义触发器或创建物化视图。互联网上有各种资源,详细说明了如何在Oracle中实现复杂的完整性约束。

这些方法非常复杂,您使用的自动化工具无法生成实现此复杂完整性约束所需的代码。