Too many times architects and/or developers will start a project with delusions of grandeur, instead of addressing the issue and achieving the required goal, they end up tacking on so much more than is actually asked for which more often than not ends up in more of a mess than if they took the simple approach.
Simply look at what you’re trying to achieve, and in the simplest but more effective pattern, achieve it.
Code can change, modules can be added; database structures are not static, they can be changed - of course, it’s best to keep them as static as possible, but you don’t need to ensure your database structure will meet the demands of what your system might be in five years time.
Develop with expansion in mind, but focus more on what you’re trying to achieve. Code in a way that will be friendly to future developers, but also develop a system that will be friendly for the user because at the end of the day, it’s the user who matters most.