Foreign keys can reduce redundancy. Before: entity attribute value ------ --------- ----- 1 name Fred 1 age 51 1 sign Scorpio 2 name Mary 2 age 43 2 sign Leo 3 name George 3 sign Scorpio After: base_table | attr_lookup | val_lookup ---------------------- | ------------ | --------- entity attr_id val_id | id attribute | id value ------ -------- ----- | -- --------- | -- ------ 1 1 11 | 1 name | 11 Fred 2 1 12 | 2 age | 12 Mary 3 1 13 | 3 sign | 13 George 1 2 14 | | 14 51 2 2 15 | | 15 52 3 2 16 | | 16 53 1 3 17 | | 17 Scorpio 2 3 17 | | * Useful pivot table will hide the joins.