强制关系 m:n
Mandatory relationship m:n
我有一个学校作业的概念方案(Power Designer)并且在tables torrent和服务器之间我有一个强制关系(一个torrent必须至少有一个服务器)。我生成了物理模型,然后是代码(Oracle 10g),然后当我向 torrent 插入新行时,table 连接 torrents 与服务器还没有任何内容,所以 torrent 实际上没有任何服务器,因为它应该。如果是强制性的,生成的代码在我更改时不会更改。
- 然后在概念模型中有什么用,什么时候用
什么都没有?
- 我该怎么做才能使 Torrent 必须至少有一台服务器?
您需要了解产生概念、逻辑和物理模型的原因。
概念模型是以用户可以理解的形式表示感兴趣的区域。它将由 类 个具有属性的实体和相关的业务规则组成。除了图表之外,还需要自然语言描述来充分解释这些要点。如果所有相关方都同意概念模型完整地记录了感兴趣的区域,那么它就达到了目的。
逻辑模型将概念模型形式化为数据结构和完整性约束。逻辑模型可以呈现为关系数据模型(RDM)。在这种情况下,所有数据结构和完整性约束将仅使用数学关系来正式表示。它与数据库管理系统无关。
例如,您可以这样定义完整性约束:
{ t(ID_TORRENTU) | t∈v(TORRENT) } = { o(ID_TORRENTU) | o∈v(OBSAHUJE) }
即TORRENT
中的 ID_TORRENTU
值集等于 OBSAHUJE
中的 ID_TORRENTU
值集。
物理模型是逻辑模型在特定数据库管理系统上的表示。您可以使用 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 上实施此完整性约束,您需要自己编写代码。有多种方法可以实现这一点,包括编写自定义触发器或创建物化视图。 Internet 上有各种资源详细解释了如何在 Oracle 中实现复杂的完整性约束。
方法非常复杂,您使用的自动化工具无法生成实现此复杂完整性约束所需的代码。
我有一个学校作业的概念方案(Power Designer)并且在tables torrent和服务器之间我有一个强制关系(一个torrent必须至少有一个服务器)。我生成了物理模型,然后是代码(Oracle 10g),然后当我向 torrent 插入新行时,table 连接 torrents 与服务器还没有任何内容,所以 torrent 实际上没有任何服务器,因为它应该。如果是强制性的,生成的代码在我更改时不会更改。
- 然后在概念模型中有什么用,什么时候用 什么都没有?
- 我该怎么做才能使 Torrent 必须至少有一台服务器?
您需要了解产生概念、逻辑和物理模型的原因。
概念模型是以用户可以理解的形式表示感兴趣的区域。它将由 类 个具有属性的实体和相关的业务规则组成。除了图表之外,还需要自然语言描述来充分解释这些要点。如果所有相关方都同意概念模型完整地记录了感兴趣的区域,那么它就达到了目的。
逻辑模型将概念模型形式化为数据结构和完整性约束。逻辑模型可以呈现为关系数据模型(RDM)。在这种情况下,所有数据结构和完整性约束将仅使用数学关系来正式表示。它与数据库管理系统无关。
例如,您可以这样定义完整性约束:
{ t(ID_TORRENTU) | t∈v(TORRENT) } = { o(ID_TORRENTU) | o∈v(OBSAHUJE) }
即TORRENT
中的 ID_TORRENTU
值集等于 OBSAHUJE
中的 ID_TORRENTU
值集。
物理模型是逻辑模型在特定数据库管理系统上的表示。您可以使用 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 上实施此完整性约束,您需要自己编写代码。有多种方法可以实现这一点,包括编写自定义触发器或创建物化视图。 Internet 上有各种资源详细解释了如何在 Oracle 中实现复杂的完整性约束。
方法非常复杂,您使用的自动化工具无法生成实现此复杂完整性约束所需的代码。