Manual:Category table

Track all existing categories. Something is a category if Categories might not have corresponding pages, so they need to be tracked separately. cat_pages, cat_subcats, and cat_files are signed to make underflow more obvious.
 * 1) it has an entry somewhere in categorylinks, or
 * 2) it once did.

The pages and sub-categories are stored in the categorylinks table.

Information regarding which categories are hidden is stored in the page_props table.

The number fields are signed to make underflow more obvious. We make the first number include the second two for better sorting: subtracting for display is easy, adding for ordering is not.

If the information in this table is incorrect, run the maintenance script populateCategory.php, if neccessary with the --force option.

cat_id
Primary key

cat_title
Name of the category, in the same form as page.page_title (with underscores). If there is a category page corresponding to this category, by definition, it has this name (in the Category namespace).

cat_pages
Number of pages in the category. This number includes the number of subcategories and the number of files.

cat_subcats
Number of sub-categories in the category.

cat_files
Number of files (i.e. Image: namespace members) in the category.

cat_hidden
Was reserved for future use; apparently no one found a use for it because it was removed in v1.20. Instead, the status of hidden categories is stored in the page props table as the property "hiddencat" in.

Schema
mysql> describe category; +-+--+--+-+-++ +-+--+--+-+-++ +-+--+--+-+-++ 5 rows in set (0.00 sec)
 * Field      | Type             | Null | Key | Default | Extra          |
 * cat_id     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
 * cat_title  | varbinary(255)   | NO   | UNI | NULL    |                |
 * cat_pages  | int(11)          | NO   | MUL | 0       |                |
 * cat_subcats | int(11)         | NO   |     | 0       |                |
 * cat_files  | int(11)          | NO   |     | 0       |                |

mysql> describe category; +-+-+--+-+-++ +-+-+--+-+-++ +-+-+--+-+-++
 * Field      | Type                | Null | Key | Default | Extra          |
 * cat_id     | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
 * cat_title  | varbinary(255)      | NO   | UNI | NULL    |                |
 * cat_pages  | int(11)             | NO   | MUL | 0       |                |
 * cat_subcats | int(11)            | NO   |     | 0       |                |
 * cat_files  | int(11)             | NO   |     | 0       |                |
 * cat_hidden | tinyint(3) unsigned | NO   |     | 0       |                |

+-+-+--+-+-++ | Field      | Type                | Null | Key | Default | Extra          | +-+-+--+-+-++ | cat_id     | int(10) unsigned    |      | PRI | NULL    | auto_increment | | cat_title  | varbinary(255)      |      | UNI |         |                | | cat_pages  | int(11)             |      | MUL | 0       |                | | cat_subcats | int(11)            |      |     | 0       |                | | cat_files  | int(11)             |      |     | 0       |                | | cat_hidden | tinyint(3) unsigned |      |     | 0       |                | +-+-+--+-+-++