“对象模型”与“数据库模型”的方向性

时间:2013-09-22 23:57:33

标签: database-design object-model

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

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

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

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

  3. 感谢。

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

通过设计可能,通常不在实践中。以您的示例和我的stmt为例:要维护哪些部门具有哪些员工的列表,您可以为查询性能创建第3个表 - 当然,当Emps或Depts发生更改时更新该表。这将保持从B到A的反向关系。这将使它类似于对象模型,因为您可以计算哪些Depts无论如何都有哪些,以及存储返回Depts对象。

或者,在对象模型中(为了使其与数据库模型保持一致),您可以做的是:每次要显示哪些Depts具有哪些Employees时,您可以迭代Emp对象并获取其_dept属性为计算每次。这就像没有第3个表的A到B db模型。

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