Billing and recurrent payment db structure
Consistency


I like the naming convention of the auto-incrementing primary keys to be prefixed with the table name. This allows the use of using (keyname) when joining tables.
Some tables are created with IF NOT EXISTS, other aren't. Is there a strategy behind this?


Design


I am missing tables user and business.
Table business_product has a column product_type which overrides that of the referenced table product_type. Is this as designed?
Perhaps table user_authorized should be renamed to user, update the name of the primary key and referenced foreign keys along. (This has an impact on the constraints below)


Constraints


Table product_detail is missing a foreign key to product.
Table business_product is missing a foreign key to product, user and business.
Table billing is missing a foreign key to user and payment_method.
Table billing_detail is missing a foreign key to billing, product and business.
Table user_authorized is missing a foreign key to user and payment_method.