Multidimensional databases can present their data to an application using two types of cubes: hypercubes and multicubes. In the hypercube model, all data appears logically as a single cube. All parts of the manifold represented by this hypercube have identical dimensionality. In the multicube model, data is segmented into a set of smaller cubes, each of which is composed of a subset of the available dimensions.
Hypercubes and multicubes differ in terms of available metadata. In a hypercube, each dimension belongs to one cube only. A dimension is “owned” by the hypercube. In a multicube, a dimension can be part of multiple cubes. That is, dimensions are not “owned” by any one cube; rather, they are available to all cubes. In fact, there can be dimensions that do not belong to any cube.
In the OLE DB for OLAP metadata model, it is possible to browse both hypercube and multicube schemas. The CUBES rowset lists all the available cubes, regardless of whether there is a single hypercube or many multicubes. The DIMENSIONS rowset has one row for each dimension/cube combination. If there are dimensions that are not part of any cube, then the CUBE_NAME field of the DIMENSIONS rowset is NULL.
In a true multicube system, dimensions “exist” in the catalog or the schema. Different subcubes use a subset of these dimensions. By contrast, in a “multiple hypercube” system, the catalog or the schema has multiple cubes, each with its own set of dimensions.
The important distinction between these two systems for OLE DB for OLAP schema rowsets is this: In the true multicube system, if there are two rows in the DIMENSIONS rowset for which the DIMENSION_NAME value is the same (and the CUBE_NAME value is different), then these two rows represent the same dimension. This is because the subcubes are built from the same pool of available dimensions. However, in a multiple hypercube scenario, it is possible for two hypercubes to have a dimension of the same name, each of which has different characteristics. In this case, the DIMENSION_UNIQUE_NAME value is guaranteed to be different. Consumers checking dimension names between cubes for doing natural joins must make sure to check DIMENSION_UNIQUE_NAME values, not DIMENSION_NAME values.