When creating a database and an ETL process to either load or extract from it, you can help yourself quite a bit by creating a metadata repository. The benefit of this metadata is that you can use it to create data-driven ETL and other processes: instead of creating numerous lines of code for each particular object, you can create a dynamic process which uses metadata to perform the appropriate ETL for all your objects.