我有一个 DynamoDB 表,其中包含以下格式的发票项目:
PK: invoice#ID_12345
SK: department#electronics
client: Client A
PK: invoice#ID_45678
SK: department#furniture
client: Client B
当用户创建新发票时,“客户”字段是自由文本,但当然大多数客户都是回头客,并且已经在某处拥有发票。为了避免输入客户端名称时出现不一致,我想要一个现有客户端名称的下拉列表,供用户选择,或者单击“创建新”并自由文本一个新名称。
是否有一种方法可以保留前端可以访问的唯一客户端名称的运行列表以填充下拉列表?我一直在研究 DynamoDB Streams,但不确定这是否是一个好的候选者?
您可以使用一些选项来实现您的用例。我将按照我的喜好顺序列出它们,但请随意使用最适合您的。
当用户创建新客户端时,创建一个标识该列的元数据项。
为索引使用静态分区键,例如值
1
和客户端名称作为排序键。
GSI_PK | 客户 |
---|---|
1 | 客户A |
1 | 客户B |
现在您的索引将仅包含唯一的客户端,因为它仅在用户创建新客户端时创建。使用静态分区键允许您按字典顺序对客户端进行排序,这将有利于您的下拉菜单。
您可以使用 DynamoDB 流来侦听新用户创建并更新保存您的唯一客户名称的第二个表。与上面的索引方法可能包含重复项不同,拥有第二个表将确保每个客户端只有一个。
由于不存在一致性问题,流和 Lambda 可以让您异步卸载逻辑。
要结合这两个选项,您可以简单地拥有第二个表,在创建客户端时在其中添加客户端,如果客户端已经存在,它将允许您拒绝写入(避免重复)。创建新发票时,如果您需要,您可以在添加新发票之前使用交易和条件,即客户已存在于客户表中。