2012-03-11 71 views
3

这可能是一个愚蠢的问题,但我总是想知道做到这一点的最佳方式是什么。设计类来表示数据库表的最佳实践

假设我们有两个表的数据库:UsersOrders(一个用户可以有多个订单),并在任何OOP语言有两个类来表示这些表UserOrder。在数据库中,很明显'订单'将具有'用户'ID,因为它是一对多关系(因为一个用户可以有很多订单),并且用户不会有任何订单ID。但是在代码中,以下三种中最好的做法是什么?

a)用户是否应该有一组订单?
b)订单是否应该有用户ID?
c)订单是否应该引用用户对象?

还是有更有效的方法来解决这个问题吗?我一直以不同的方式做到这一点,他们都有优点和缺点,但我从来没有问过专家的意见。

在此先感谢!

回答

1

在这种情况下,如果您在用户上执行操作(也涉及他们拥有的订单),则用户可以拥有一组订单。

每当我设计我的类时,相关的对象都包含指向对方的指针,所以我可以从订单中访问用户和用户的订单。

我不相信有一个最佳实践,因为它实际上取决于你想要完成的。通过用户和订单,我可以看到你从订单开始,需要访问用户,反之亦然;因此,在你的情况下,你听起来应该以两种方式映射对象。

一个警告字,只是要小心不要创建一个循环引用。如果删除两个对象而不删除引用,则可能会造成内存泄漏。

0

您在询问什么是“对象关系映射”(ORM)。我认为学习你想学习的最好方法是看看一些已经建立好的ORM库[比如ActiveRecord(Ruby)或者Hibernate(Java)],看看它们是如何实现的。

考虑到这一点:

a)如果应用程序需要它应该有访问通过用户对象表示用户订单对象数组(或类似的枚举)。然而,这通常最好涉及延迟加载(即,当用户从数据库中拉出时,通常不会从数据库中提取订单......当应用程序需要访问它们时,订单将随后被查询)。在对象延迟加载之后,可以通过ORM对它们进行缓存,以消除对该争用的进一步查询的需求。 b)除非出于表现的原因,否则您只需拉取特定的栏位,在下单时通常会拉出所有栏位。所以它会包含用户标识。

c)答案a也适用于此。