1
  1. 是否说每当我们谈论方向性(单向或双向)时,我们通常指的是对象模型?(我还没有看到有人在设计数据库时使用它)

  2. “对象模型”和“数据库模型”中的方向性是否必须相同?考虑一个包含 Employee 和 Department 实体的示例:

    • 对于“数据库模型”,我想指定这是一个单向关系,许多员工在同一个部门;而我不需要指定部门拥有哪些员工。

    • 对于“对象模型”,我想指定这是一个双向关系,其中一个 Employee 对象将具有一个 Department 对象,而一个 Department 对象将具有一个 Employee 对象的集合。

谢谢。

4

1 回答 1

0

是否说每当我们谈论方向性(单向或双向)时,我们通常指的是对象模型?(我还没有看到有人在设计数据库时使用它)

当人们谈论一对一、一对多和多对多关系时,他们隐含地指的是从一个表“A”到另一个表“B”的关系的(单)方向性。可能存在将“B”记录引用回“A”(作为单独的字段)的情况 - 使其成为双向的。这些情况通常涉及非简单的删除/更新查询,因为参照完整性检查可能会导致问题。

“对象模型”和“数据库模型”中的方向性是否必须相同?

也许是设计使然,但通常不是在实践中。以您的示例和我上面的 stmt 为例:要维护哪些部门拥有哪些员工的列表,您可以为查询性能创建第三个表 - 当然,当 Emps 或 Depts 发生更改时更新该表。这将保持从 B 到 A 的反向关系。这将使其类似于对象模型,因为您将计算哪些 Dept 具有哪些 Emps,并将其存储回 Depts 对象中。

或者,在您的对象模型中(以使其与您的数据库模型保持一致),您可以做的是:每次您想显示哪些部门有哪些员工时,您可以遍历您的 Emp 对象并获取它们的 _dept 属性来计算每次它。这就像没有第三张表的 A 到 B db 模型。

反向引用 obj 模型中的指针分配/obj 引用是否存在问题取决于您使用的编程语言的具体情况以及您是否将 Dept 对象中已删除/更新的 Emps 清理为出色地。在 C++ 中,您可以自己管理指针而不会出现问题。不确定某些高级语言会允许什么。
(自我注意:他们的垃圾收集会导致问题吗?)

于 2013-09-23T03:52:27.037 回答