Why does DRUPAL_BOOTSTRAP_PAGE_CACHE phase come before DRUPAL_BOOTSTRAP_DATABASE? According to this article about drupal_bootstrap function, all parameters for drupal_bootstrap() run sequentially. And if we see the sequence, here first comes - DRUPAL_BOOTSTRAP_CONFIGURATION, second DRUPAL_BOOTSTRAP_PAGE_CACHE and then database (DRUPAL_BOOTSTRAP_DATABASE),

So, My question is cache is itself stored in database, so in order to serve pages from cache, a database connection is a must. Then How Drupal manages these calls sequentially?

Accordingly, DRUPAL_BOOTSTRAP_DATABASE should come before DRUPAL_BOOTSTRAP_PAGE_CACHE. If not, what is the reason?
Inside of _drupal_bootstrap_page_cache() the key bit of information is this bit of code

  if (variable_get('page_cache_without_database')) {
    $cache_enabled = TRUE;
  }
  else {
    drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES, FALSE);
    $cache_enabled = variable_get('cache');
  }


The call to bootstrap DRUPAL_BOOTSTRAP_VARIABLES will also bootstrap DRUPAL_BOOTSTRAP_DATABASE because it's before variables inside of drupal_bootstrap()

What this means is if your cache doesn't require a database connection (like memcache or filecache) then you can speedup page cache hits by not connecting to the database. The linked article talks about this.