Database Design and structure
34 tables is a lot.


Over-nomalization
Many-to-many mappings that should be 1:many
Excessive use of "added by"
Use minimal datatypes


Some examples:

Because of the nested nature of districts-cities-states, and the fact that city and state names "never" change, there is no need to carry that normalization past district (or maybe even area).

I suggest it is OK to use the 2-letter state abbreviations and not have the full name.  Note: that should be CHAR(2) CHARACTER SET ascii to minimize the size (2 bytes).

Don't bother 'normalizing' simple things like keywords, course types, etc.  When there is a relatively small and static number of such things, consider using ENUM for them.

An "accreditation" is for one institute, correct?  It is not a blanket for many institutes?  So that is really 1:many, not many:many.  Hence, the intermediate table is unnecessary.  (Some relations should continue to be many:many.)

For dozens of items, use TINYINT UNSIGNED (1 bytes), not INT UNSIGNED (4 bytes). For hundreds, maybe thousands, use SMALLINT UNSIGNED (2 bytes).

What is a type_id?