2014-09-27 74 views
0

请考虑在数据库中有一个名为users的表和一个名为wallets的表。除此之外,用户有0,1个或更多的钱包。这种关系是一对多关系,这意味着钱包有一个指向用户的外键。以静态语言分隔数据库表和合并对象

现在的问题是:当建立一个结构或一个人一个班我看到两种可能性:

1)用户没有钱包的迹象。有一个函数将用户作为参数并获取钱包数组。

2)用户具有包含钱包的数组作为成员,并且在创建对象/结构时获取钱包。

我认为第一种方法可能会更好,因为它更模块化 - 第二种方法是用户依赖钱包,即使用户没有钱包。 不过,我不确定哪种方法更好,所以我正在寻找两种方法的比较。

回答

1

在应用层面,你可能有这样的用户类型(去符号):

type User interface { 
    Wallets() []Wallet 
} 

远的下方,有一个数据库,你的情况是SQL。这应该是而不是通过看你的应用程序是显而易见的,思想。

做出有关依赖性的假设,超出了他们以接口契约的形式保证他们不可逆地耦合这些组件。

这意味着,如果您通过数据库的模式对应用程序进行建模,那么就会造成错误,因为您的整个应用程序现在与所述数据库紧密耦合,并且对其任何部分的任何更改都会产生巨大的不可预测的影响。

一个常见的解决方案是使用所谓的ORM layer,它位于数据库驱动程序和实体模型之间。它会照顾的东西,如:

  • 如何以及何时应该取钱包的钱包?
  • 哪里在数据库中存储钱包的信息?
  • 当你删除一个用户时,该钱包是否也应该被删除?

等等。

PS:此答案适用于静态和动态类型的语言。

+1

正是我需要开始我的研究,谢谢! – Bloodcount 2014-09-28 10:38:50