Blog
MSI System Tables The System tables contain the metadata for the Installer database—that is, they are the tables that describe the tables in the database. There are five system tables as described below:
The _Tables Table: (MSI System Tables)
What is a _Tables Table?
The _Tables table lists all of the tables in the Installer database. It has following column:
Name:
This column displays the name of the table.
The _Columns Table
What is a _Columns Table?
The _Columns table describes all of the columns in all of the tables in the Installer database. This table has these columns:
Table:
This column is a foreign key to the _Tables table, and it names the table that contains the column that this row of the Columns table describes.
Number:
This is the order in which the column appears within the table.
Name:
This is the name of the column.
The _Streams Table
What is a _Streams Table?
The _Streams table lists embedded OLE data streams in the Installer database. This table contains these columns:
Name:
This column contains the name of the stream.
Data:
This is the raw binary data for the stream.
The _Storages Table
What is a _Storages Table?
The _Storages table lists embedded OLE data storages in the Installer database. This table contains these columns:
Name:
This column displays the name of the storage.
Data:
This is the raw binary data for the storage.
The _Validation Table
What is a _Validation Table?
The _Validation table contains information on the acceptable range for columns in the Installer database. This table has these columns:

Table:
This column contains a foreign key into the _Table table; it identifies the table being validated.
Column:
This is a foreign key into the _Column table; this column identifies the column being validated.
Nullable:
This column identifies whether the target column is nullable. The value may be Y if the column allows nulls, N if it does not allow nulls, or @ if it’s part of a multicolumn key but still allows nulls.
MinValue:
This column shows the minimum permissible value for a date, numeric, or version column.
MaxValue:
This column shows the maximum permissible value for a date, numeric, or version column.
KeyTable:
If this column is non-null, the target column is a foreign key into the table identified here.
KeyColumn:
If this column is non-null, the target column is a foreign key to the column number in the KeyTable identified here.
Category:
This column specifies the data type of the target column.
Set:
If present, this is a semicolon-delimited list of acceptable values for the column.
Description:
This is a description of the data stored in the target column.
Definitions of Primary and Foreign key:
Key | Meaning |
Primary_Key | The primary key of a table uniquely identifies each record in the table. It can either be a normal attribute that is guaranteed to be unique (such as Social Security Number in a table with no more than one record per person) |
Foreign_Key (or) External_ Key | A foreign key is a field in a table that matches the primary key column of another table. The foreign key can be used to cross-reference tables. |