cra*_*ech 2 schema nosql rdbms mongodb database-design
假设我有一个 BankAccount 表和一个 BankAccountHistoryTransactions 表。
当涉及到 RDBMS 数据库模式设计时,大多数数据库设计人员会推荐以下内容:
BankAccount Table
int: BankAccountNumber Primary key
double: CashBalance
......
..
Run Code Online (Sandbox Code Playgroud)
此外,在 RDBMS 数据库设计中,BankAccountHistoryTransactions 表将类似于:
BankAccountHistoryTransactions Table
int: BankAccountHistoryTransactionsId Primary key
int: FK_BankAccountNumber Foreign key
DateTime2: DateOfTransaction
.................
.........
Run Code Online (Sandbox Code Playgroud)
在 NoSQL MongoDB 数据库模式中,它更像是一个包含嵌入式 BankAccountHistoryTransactions 集合的 BankAccount 集合:
db.BankAccount.find().pretty()
{
"_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
"BankAccountNumber" : "7575785885859",
"CashBalance" : "890399",
....................................,
...............................,
.......................,
"BankAccountHistoryTransactions" : {
"_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
"BankAccountHistoryTransactionsId": 1,
"DateOfTransaction" : ISODate("2019-12-31T23:00:00Z")
}
}
Run Code Online (Sandbox Code Playgroud)
我对 NoSQL MongoDB 数据库架构设计方法的问题是银行账户可能有大量的 BankAccountHistoryTransactions 条目(可能进入银行账户的数十万个 BankAccountHistoryTransactions 条目)。
因此,如果我们使用如下所示的伪外键关系会不会更好:
db.BankAccount.find().pretty()
{
"_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
"BankAccountNumber" : "7575785885859",
"CashBalance" : "890399",
....................................,
...............................,
.......................,
}
Run Code Online (Sandbox Code Playgroud)
以及 BankAccountHistoryTransactions 的不同单独集合
db.BankAccountHistoryTransactions.find().pretty()
{
"_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
"FK_BankAccountNumber" : "7575785885859",
"BankAccountHistoryTransactionsId": 1,
"DateOfTransaction" : ISODate("2019-12-31T23:00:00Z")
}
Run Code Online (Sandbox Code Playgroud)
我听说 NoSQL MongoDB 数据库设计者不鼓励使用像上面那样的伪外键关系。但是,像“伪外键关系”这样的设计不是更有条理、更模块化吗?(如果我错了,请纠正我,但性能可能是一个问题,但它肯定更有条理和模块化)
归档时间: |
|
查看次数: |
161 次 |
最近记录: |