Challenge: Efficient querying
This issue came out in my Alexandria sample app. I wanted to have a Queue of books for each user, and each book has a collection of its authors. The model looks something like this:
And the physical data model:
So far, so good, and relatively simple and straightforward to work with, right?
Except, what kind of a query would you want to make to get all the books in the user’s queue? Here is the code that uses your results:
bus.Reply(new MyQueueResponse
{
UserId = message.UserId,
Timestamp = DateTime.Now,
Queue = books.Select(book => new BookDTO
{
Id = book.Id,
Image = book.Image,
Name = book.Name,
Authors = book.Authors.Select(x => x.Name).ToArray()
}).ToArray()
});
Hint, note that we need to bring the Book’s image as well, and pay attention to the number of joins you require as well as the number of queries.