# US 11,442,905 B2 · Efficient denormalization of data instances

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,442,905 B2
- Document ID: US11442905B2
- Status: Granted
- Kind: B2
- Application number: 16/740,081
- Filed: 2020-01-10
- Published: 2020-05-14
- Granted: 2022-09-13
- Earliest claimed: 2016-08-03
- Assignees: Microsoft Technology Licensing, LLC
- Applicants: Microsoft Technology Licensing, LLC
- Inventors: Christopher Clayton McConnell; Weipeng Liu; Shahin Shayandeh; Robert Lovejoy Goodwin
- Web page: https://patentgrep.com/patent/US11442905B2

## CPC

- G06F 16/211: {Schema design and management}
- G06F 16/2228: {Indexing structures}
- G06F 16/2379: {Updates performed during online database operations; commit processing}
- G06F 16/901: Indexing; Data structures therefor; Storage structures (for retrieval from the web G06F16/951)
- G06F 16/9535: Search customisation based on user profiles and personalisation
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Technologies are described herein for denormalizing data instances. Schemas for data instances are embedded with annotations indicating how the denormalization is to be performed. Based on the annotations, one or more sub per object indexes (“sub POIs”) can be generated for each data instance and stored. The sub POIs can include a target sub POI containing data from the data instance, and at least one source sub POI containing data from another data instance, if the data instance depends on the other data instance. Data instance updates can be performed by identifying sub POIs that are related to the updated data instance in storage, and updating the related sub POIs according to the update to the data instance. The sub POIs can be sent to an indexing engine to generate an index for a search engine to facilitate searches on the data instances.

## Claims

### Claim 1

A computer-implemented method for performing a search based on sub per object indexes (“sub POIs”), the method comprising:
receiving a plurality of sub POIs associated with an annotation that is included in a schema, wherein the annotation specifies one or more elements of a data structure that are to be used as an index, the data structure being defined in the schema, and wherein the plurality of sub POIs at least partially represent denormalized data of a data instance of the data structure, and wherein the denormalized data is stored in a normalized data relationship among the data instance and at least another data instance;
generating an index based at least in part on the plurality of sub POIs;
receiving a query;
generating a query plan for the query based at least in part on a normalized logical model and the annotation;
modifying the query plan based at least in part on the annotation, wherein the modified query plan converts the generated query plan into a plan that utilizes the denormalized data; and
generating one or more search results based at least in part on the modified query plan.

### Claim 2 (depends on 1)

The method of claim 1, wherein the query is expressed over the normalized logical model such that the query is not re-written.

### Claim 3 (depends on 1)

The method of claim 1, further comprising:
determining a frequency at which another query has been issued; and
based at least in part on the frequency, recommending that another annotation be added to the schema.

### Claim 4 (depends on 3)

The method of claim 3, further comprising generating another query plan for the another query based at least in part on the another annotation.

### Claim 5 (depends on 1)

The method of claim 1, wherein the plurality of sub POIs include at least a target sub POI to store data of the data instance and a source sub POI to store data of a source data instance that the data instance depends on, wherein the data instance is linked to the source data instance through the normalized data relationship.

### Claim 6 (depends on 5)

The method of claim 5, wherein the data structure includes a table and the data instance includes a record and corresponding values of the table.

### Claim 7 (depends on 1)

The method of claim 1, wherein the annotation indicates that two or more elements of the one or more elements are to be indexed as a single value.

### Claim 8

An apparatus comprising:
a processor; and
a computer storage medium having computer executable instructions stored thereon which, when executed by the processor, cause the processor to:
receive a plurality of sub per object indexes (“sub POIs”) based at least in part on an annotation, the annotation at least partially indicates how data denormalization is to be performed on a data instance of a schema, wherein the plurality of sub POIs include at least a target sub POI to store data of the data instance and a source sub POI to store data of a source data instance that the data instance depends on, wherein the data instance is linked to the source data instance through a normalized data relationship;
generate an index based at least in part on the plurality of sub POIs;
receive a query;
generate a query plan for the query based at least in part on the annotation and a normalized logical model;
modify the query plan based at least in part on the annotation, wherein the modified query plan converts the generated query plan into a plan that utilizes the denormalized data; and
perform a search based at least in part on the modified query plan.

### Claim 9 (depends on 8)

The apparatus of claim 8, wherein the query is expressed over the normalized logical model such that the query is not re-written when a denormalization model associated with the denormalized data changes.

### Claim 10 (depends on 8)

The apparatus of claim 8, wherein the processor is further caused to:
determine a frequency at which another query has been issued;
based at least in part on the frequency, recommend that another annotation be added to the schema.

### Claim 11 (depends on 10)

The apparatus of claim 10, wherein the processor is further caused to generate another query plan for the another query based at least in part on the another annotation.

### Claim 12 (depends on 8)

The apparatus of claim 8, wherein the processor is further caused to:
receive a new data instance;
analyze the annotation in response to the receiving of the new data instance; and
update the source sub POI by populating the source sub POI for a particular target instance with data of the new instance.

### Claim 13 (depends on 8)

The apparatus of claim 8, wherein the annotation indicates that one or more elements of the data instance that are to be indexed separately.

### Claim 14

A system comprising:
one or more computing devices configured to:
receive an annotation that is included in a schema, the annotation indicates how one or elements of a data structure are to be indexed, the data structure being defined in the schema;
receive a plurality of sub POIs based at least in part on the annotation, the plurality of sub POIs at least partially represent denormalized data of a data instance stored in a normalized data relationship relating the data instance and at least another data instance;
generate an index based at least in part on the plurality of sub POIs;
receive a query;
generate a query plan for the query based at least in part on a normalized logical model and the annotation;
modify the query plan based at least in part on the annotation, wherein the modified query plan converts the generated query plan into a plan that utilizes the denormalized data; and
generate one or more search results based at least in part on the modified query plan.

### Claim 15 (depends on 14)

The system of claim 14, wherein the plurality of sub POIs comprising at least a target sub POI to store data of the data instance and a source sub POI to store data of a source data instance that the data instance depends on, wherein the data instance is linked to the source data instance through the normalized data relationship.

### Claim 16 (depends on 15)

The system of claim 15, wherein the one or more computing devices are configured to:
identify related sub POIs that are related to a second data instance; and
process annotations associated with the related sub POI to obtain instantiation values from the second data instance.

### Claim 17 (depends on 16)

The system of claim 16, wherein the one or more computing devices are further configured to:
create one or more new sub POIs in response to a determination that one or more new sub POIs need to be created based on the instantiation values;
process the related sub POIs and the one or more new sub POIs utilizing the instantiation values to generate processed sub POIs; and
send the processed sub POIs to POI storage.

### Claim 18 (depends on 14)

The system of claim 14, wherein the one or more computing devices are further configured to:
receive an update to the data instance;
identify a sub POI in POI storage that is related to the data instance by determining that the sub POI is either a target sub POI or a source sub POI of the data instance; and
generate sub POI updates for the related sub POIs based on the update to the data instance.
