【问题标题】:Why is it considered bad table design to use multiple tables in dynamodb?为什么在 dynamodb 中使用多个表被认为是糟糕的表设计?
【发布时间】:2019-08-14 22:45:35
【问题描述】:
我想知道为什么我一直读到 nosql 数据库的正确实现只涉及一个表(在大多数情况下)。我有一个用例,它具有某种层次结构,可以在单个表中实现,但目前正在使用更多表来实现。两种实现中的读/写次数是相同的(至少我认为),所以我不明白为什么我应该费心尝试只使用一个表来实现我的数据库
我知道数据不应该在 nosql 数据库中进行规范化,但为什么这意味着我不应该使用多个表?是否只是因为维护多个表的成本更高,而我应该求助于使用具有多个 GSI 的单个表?
【问题讨论】:
标签:
database-design
nosql
amazon-dynamodb
【解决方案1】:
我会说这个关于单表的声明是从the context 中删除的,并且最近被夸大了。没有人强迫您使用任意数量的表格。您无需为 DynamoDB 中的表数量付费,只需为存储和查询的数据付费,因此额外的表无需额外费用。最后,DynamoDB 是完全托管的解决方案,拥有 100 个表就像拥有一个表一样简单。
这个想法是,与强制数据规范化的 RDBMS 不同,您不应该为 相关 条目使用多个表。通常,因为,你知道,“NoSQL 中没有连接”。具有多个订单行项目、部门和员工的订单——这样的数据确实可以放在一个表中。即使在单个项目中(但请始终记住 item size limit)。
关于“单表”设计的另一件事:它要求您提前了解您将存储在其中的数据以及您将针对它运行的查询。
但是想象一下一个用于存储客户订单和员工订单的表格(当问题不是“我的销售有多少订单?”时)。该模式根本没有意义:您可以为此使用两个表。存储所有数据的表是"god object"(或“上帝表”)。而且它是一种反模式:从控制台和代码查询很棘手,理解它的目的很棘手,并且当您更改需求时几乎不可能扩展(添加另一种记录或新的查询/使用模式)。