I want to know what are the best practice to use in order to decompose a big query which contains so many joins.Is it recommended to use stored procedures ? or is there any other solution?
Views are another solution.
Though while "building views upon views" is not uncommon, and it does increase the readability of each individual view, it add update fragility to the system.
Encapsulating high-level API concepts in functions and then writing queries within those functions with the benefit of views is one possibility. Your client access needs and general data model are necessary to choose a preferred design.
David J.