我有一个用于学校作业的概念方案(电源设计器),在 torrent 和服务器表之间我有一个强制关系(一个 torrent 必须至少有一个服务器)。我生成物理模型,然后是代码(Oracle 10g),然后当我将新行插入 torrent 时,表中还没有任何内容将 torrent 与服务器连接,因此 torrent 实际上没有任何应有的服务器。如果它是强制性的,当我改变时生成的代码不会改变。
- 那么在概念模型中它是为了什么,当它一无所有时?
- 我该怎么做才能使洪流必须至少有一台服务器?
我有一个用于学校作业的概念方案(电源设计器),在 torrent 和服务器表之间我有一个强制关系(一个 torrent 必须至少有一个服务器)。我生成物理模型,然后是代码(Oracle 10g),然后当我将新行插入 torrent 时,表中还没有任何内容将 torrent 与服务器连接,因此 torrent 实际上没有任何应有的服务器。如果它是强制性的,当我改变时生成的代码不会改变。
您需要了解生成概念、逻辑和物理模型的原因。
概念模型是以用户理解的形式表示感兴趣的区域。它将由具有属性的实体类和有关这些的业务规则组成。除了图表,还需要自然语言描述来充分解释这些要点。如果所有相关方都同意概念模型完全记录了感兴趣的领域,那么它已经实现了它的目的。
逻辑模型将概念模型形式化为数据结构和完整性约束。逻辑模型可以呈现为关系数据模型 (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) ) )
但是,包括 Oracle 在内的 SQL DBMS 不支持该CREATE ASSERTION
语句。为了在 Oracle 上实现这种完整性约束,您需要自己编写代码。有多种方法可以实现这一点,包括编写自定义触发器或创建物化视图。Internet 上有各种资源详细解释了如何在 Oracle 中实现复杂的完整性约束。
这些方法非常复杂,您使用的自动化工具将无法生成实现这种复杂完整性约束所需的代码。