【发布时间】:2018-02-24 22:08:29
【问题描述】:
假设我正在使用 SQL 并且我有两个表。一个是公司,另一个是员工。当然,员工表有一个外键引用他或她工作的公司。
当我在我的代码中使用这个数据集时,我想知道每个员工所在的公司。我认为最好的解决方案是将一个实例变量添加到我的名为 Company 的 Employee 类(Company 类型)。该变量可能是延迟加载的,也可能是手动填充的。
问题是许多员工为同一家公司工作,因此每个员工最终都会存储一个完全相同的 Company 对象副本,这是不必要的。如果需要更新有关公司的某些内容,这可能是一个大问题。此外,Company 对象自然会存储其员工列表,因此我也可能遇到无限循环引用的问题。
我应该做些什么不同的事情?面向对象的设计似乎不适用于关系数据。
这更像是一个设计/原理之类的问题,我没有任何具体的代码,我只是在寻找朝着正确方向迈出的一步!
如果您有任何问题,请告诉我。
【问题讨论】:
-
如果您缓存公司并引用同一个实例,则根本没有重复。
-
只是对@Gusman 评论的补充,您想使用基于哈希的集合来存储这些引用。此外,根据您的应用程序,它可能是并发收集。
-
@Karolis 这是这个问题的正常解决方案吗?我从来没有在任何地方看到过这种情况,所以我假设有一个更典型的解决方案,考虑到地球上几乎所有使用 SQL 的应用程序都可能遇到这个问题。
-
你应该使用 ORM 框架(我知道 Java 的),例如 Hibernate、Ebean、ActiveJDBC 等。如果你不想或不能使用 ORM 框架,你应该使用您的对象是对象而不是数据值,即如果公司 Acme 的 id=1,则应该只存在一个具有该 id 的公司实例,无论是否有许多 Employee 实例都引用了该公司。有很多技术可以实现这一点,设计持久层很难......
-
OOP 从来都不是用来建模和表示数据的。数据应该被封装或作为消息传递。对象应该围绕系统服务和职责进行设计。你所做的相当于根据路线图造车。不要将域模型实体与系统对象/服务混为一谈。
标签: java c# sql oop design-patterns