我有一个用于学校作业的概念方案(Power Designer)以及表格torrent和服务器之间我有一个强制关系(一个torrent必须至少有一个服务器)。我生成物理模型,然后是代码(Oracle 10g),然后当我向torrent插入新行时,表中没有任何内容可以连接种子与服务器,所以torrent根本没有任何服务器正如它应该。如果是必须的话,生成的代码在我改变时不会改变。
答案 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中实现复杂的完整性约束。
这些方法非常复杂,您使用的自动化工具无法生成实现此复杂完整性约束所需的代码。