Database normalization consists in eliminating redundancy and
inconsistent dependencies between tables. While normalization is generally considered the
goal of database design, denormalization, the deliberate duplication of certain data in
order to speed data retrieval, may sometimes be more desirable.
PowerDesigner supports denormalization through:
- Horizontal partitioning -
dividing a table into multiple tables containing the same columns but fewer
rows.
- Vertical partitioning -
dividing a table into multiple tables containing the same number of rows but
fewer columns.
- Table collapsing - merging
tables in order to eliminate the join between them.
- Column denormalization -
repeating a column in multiple tables in order to avoid creating a join between
them.
Horizontal and vertical partitioning involve tradeoffs in terms of performance and
complexity. Though they can improve query response time and accelerate data backup and
recovery, they require additional joins and unions to retrieve data from multiple
tables, more complex queries to determine which table contains the requested data, and
additional metadata to describe the partitioned table. Column denormalization can
simplify queries but requires more maintenance and storage space as data is
duplicated.
When deciding whether to denormalize, you should analyze the data access
requirements of the applications in your environment and their actual performance
characteristics. Often, good indexing and other solutions may more effectively address
performance problems. Denormalization may be appropriate when:
- Critical queries rely upon data from
more than one table.
- Many calculations need to be applied to
columns before queries can be successfully answered.
- Tables need to be accessed in different
ways by different kinds of users simultaneously.
- Certain columns are queried extremely
frequently.