我有一个关于类建模和底层数据库设计的问题。
简单地说,情况如下:目前我们有Positions和Accounts对象和表格,它们之间的关系是一个 Position '有一个' Account(一个 Account 可以有多个 Positions)。这是一个简单的聚合,由持有账户 ID 作为外键的位置表在数据库中处理。
我们现在需要通过Trades和Portfolios将这种“向下”扩展。一个或多个交易构成一个头寸(但一个交易本身不是一个头寸)和一个或多个投资组合构成一个账户(但一个投资组合本身不是一个账户)。交易与投资组合相关联,就像头寸与账户相关联一样(“有一个”)。请注意,仍然可以有一个没有交易的头寸和一个没有投资组合的账户(即,不必将所有现有对象分解为子组件)。
我的第一个想法是简单地进行以下操作(前两个类已经存在):
class Account;
class Position {
Account account;
}
class Portfolio {
Account account;
}
class Trade {
Position position;
Portfolio portfolio;
}
我认为(潜在的)问题很明显:从交易开始,您可能最终会进入不同的账户,具体取决于您采用头寸路线还是投资组合路线。当然,这绝不应该发生,创建和存储对象的代码也不应该产生这种不一致。我想知道理论上可能存在不一致的数据库这一事实是否意味着设计有缺陷?
期待您的反馈。