Symmetric self-referential many-to-many
I would define levels in the hierarchy:

video_categories
  int     id
  int level
  string  name


I would propagate the parent and child levels into your link table:

video_category_links
  int     parent_id  
  int parent_level ((parent_id  , parent_level) foreign_key to video_categories(id, level))
  int     child_id   
  int child_level((child_id  , child_level) foreign_key to video_categories(id, level))
  check(child_level &gt; parent_level)