I am working on an online test application which supports multiple choice questions.

I have created schema for taxonomy (classification) system to be used with questions.

    taxonomy(id, name, slug, description)
    taxonomy_terms(id, taxonomy_id, name, slug, parent, weight)

    question_taxonomy(id, question_id, taxonomy_term_id)

A question is classified under various categories (taxonomies).

At the top rests `Exam` taxonomy which has `Subject` taxonomy as children. Each `Subject` consists of various `Topic` taxonomy which may further be divided into Sub Topics by adapting `Sub Topic` taxonomy.

To create relationships between various taxonomy terms(linked across taxonomies), I have created another table as 

    taxonomy_term_relations(id, parent_id, child_id)

e.g, 

`MAT` is a taxonomy term for `Exam` Taxonomy

`MAT` may have two subjects viz `Reasoning` & `General Knowledge` which are taxonomy terms for `Subject` taxonomy

`Reasoning` subject will have 10 different topics with taxonomy terms falling under `Topic` taxonomy, say `Reasoning` will have `Topic A`, `Topic B` ....

Each `Question` will belong to a `Topic` which in turn will belong to `Subject` which again will belong to `Exam`.

A `Subject` may belong to multiple `Exam`s or a `Topic` may belong to multiple `Subject`s.

Is this the correct approach to create db schema for this system.

###UPDATE###
@MirNazim suggested another approach to this problem with `Exams`, `Subjects` and `Topics` treated as separate entities rather than taxonomy, which will reduce the complexity of whole thing. So the new structure may become

    exams(id, name, description...)
    subjects(id, name, description ...)
    exam_subjects(id, exam_id, subject_id)
    topics(id, name, parent, weight....)
    subject_topics(id, subject_id, topic_id)

Any suggestions on this approach will be appreciated.