How to eat the elephant
I love Man vs Food.
It's indulgent, over the top, and somehow the host manages to accomplish ridiculous eating feats that you don't think are possible.
And he does it one bite at a time.
Iterative development forces you to deliver some working piece of functionality every iteration. So realistically you can't go too far down the wrong path and lose too much time, because you'll be reviewing and readjusting your course every few weeks.
How do you break down a piece of functionality into small enough pieces that they still deliver value?
Let's start with how you don't do it - When you're building tiered technology, you do not break it along those layers. For example - I would not have separate stories for the DB portion, The business logic and the UI. Each piece by themselves do not deliver any real business value.
Remember - we're looking for fast feedback from the business - and demonstrating some DB tables, indexes and views isn't going to get you that feedback.
As a general rule, people are pretty bad at defining what they want in any sort of detail. Those same people are usually much better at telling you what they do/don't like after seeing something. So build a small piece of it, show it to them, get their feedback, and then adjust.
They may decide they don't really feel like Elephant for lunch; and that they're in the mood for sashimi.