We are using InstallShield to author our MSI contractors.

InstallShield has support to operate SQL scripts throughout installation. The positive thing about the subject is they are transacted.

However, Personally i think uneasy about adding another reason for failure for installation. Should database initialization be carried out by the applying?

"Installation is not configuration" is most likely a great mantra for deployment engineers.

When it comes to deployment best practice, should database initialization setup be carried out by the applying or through the installer?

I believe in case your application can't work/run with no database then it ought to be appropriate for cellular phone to interrupt if there's a problem with establishing the database. But when you're still bothered by getting another reason for failure inside your application you can include a "first run" wizard which will configure you application prior to it being used. Also, when the database only supports an optional feature or non-essential area of the application you'll be able to within the database scripts in certain kind of publish installation/configuration screen the user can turn to while running this program.