DynamoDB - Indexing a list attribute

0

I have a dataset of call recording information, with fields/attributes including: Incoming Number, Dialled Number, Call Start Date, Agent(s) name. The end user will most likely want to search on Agent name, which is stored in a list attribute as there might be more than one. I can't add an index to a list attribute, so as a SQL dev I'm learning towards storing the agent ID in a different table and creating a many to many relationship between the two tables. However, Dynamo's a bit different so what's my best approach if I want to index the Agents attribute?

asked 2 years ago863 views
1 Answer
1

You're correct that you would not normally create "join" scenarios for DynamoDB. Typically you would have an individual item for each Agent:

PKSKotherother-1
01202333444C#012023334441/1/2023Call metadata
01202333444Bob1/1/2023Data
01202333444Michelle1/1/2023Data
01202333444Lee1/1/2023Data

In DynamoDB and other NoSQL databases its common to de-normalize the data, which takes a little bit of getting used to coming from a relational database background.

profile pictureAWS
EXPERT
answered 2 years ago
  • Thanks Leeroy

    I could denormalise to the following:

    Incoming Number StartTime PrimaryAgent SecondaryAgent 01202333444 1/1/2023 Bob Michelle

    but then, what happens if there's another agent?

  • I edited my answer to show how I would model the data

  • so, if I do a search for 01202333444, I'd get one record for each of the agents involved in the call, rather than just one record for the call?

  • Yes and you would also get the call metadata. The cost of reading does not change as you still pay up to the nearest 4KB.

  • not sure I like that, to be honest. A user would see two calls where there are actually only one, and this would confuse them. Thanks for your help though, Leeroy

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions