Are you asking if you can create your own user defined GATT DB? Yes.
Are you then asking if memory is available for your custom application/GATT DB? Also Yes.
1. Then can I modify the GATT DB after the module is built? for example, the module is already uploaded with original firmware and later want to modify one UUID. Is there a doc shows how to modify the UUID over the air(wireless) using smart phone?
2. In case of using external memory for the GATT DB modification, do you have any doc to show how to make it happen?
The GATT DB within your application is stored in the NVRAM of the module, along with the rest of your application.
I think there is a sample in this thread that shows how to change/re-define GATT attributes at runtime: How to change the GATT database after init (bleapp_set_cfg) ?
You can write an application that supports firmware upgrade and program it in the factory. When time comes you can write different application with different GATT DB and download it from a smartphone.