Dynamic canister creation

As I know, it is possible to dynamically create canisters, but if I create application which may not host Terrabyte of data, do I need to dynamically create canisters?

No, you do not need to dynamically create canisters. Currently, a canister can store up to 4GB in heap memory. So as long as you do not see yourself exceeding that limit you should be fine to just statically define your one canister.