I always understood that in agile, each sprint is about adding a new functionality to existing application, so that the application can be build incrementally.
On the other hand, when you define data model, you need to think of many possible use cases and functionalities upfront, so that data model satisfies wide range of them and performance of CRUD operations is satisfying. This is usually a case when starting a new project. It might be hard to modify data model later, incrementally, because far too many existing functionalities might be bound to it. I'm used to waterfall methodology in this case.
So how those two conflicts methodologies can be combined together when defining an initial data model? Or there is some third way?