I'm starting work on a fairly complex project that will eventually be used to run multiple departments (HR, finance, etc.) as well as hold client data, etc. I've been handed a database design doc that explain how the previous individuals (who are no longer around) wanted to design the database. It's a design that I've never come across before. The simplified idea is that there is on table that holds actual data and a second table that combines that data into logical units.
For example, here would be the first table with data:
KEY, DATA
0, Name
1, First Name
2, Last Name
3, Position
4, Title
5, Reports To
6, John
7, Smith
8, Developer
9, CTO
And here would be the second table that combines the data:
KEY, GROUP_KEY, DATA_KEY, CHILD_KEY
0, NULL, 0, NULL
1, 0, 1, 2
2, 0, 2, NULL
3, NULL 3, NULL
4, 3, 4, 5
5, 3, 5, NULL
6, 0, 6, 7
7, 0, 7, NULL
8, 3, 8, 9
9, 3, 9, NULL
Basically, the first line in the second table (key 0) defines a new grouping that is called Name. The next two lines define the "columns" that belong to that group. The fourth line (key 3) defines another grouping that is called Position and again the following two lines define the "columns" that belong to the group. The last four lines "assign" the values John and Smith to the group Name and the values Developer and CTO to the group Position.
This is greatly simplified but I'm hoping it gives a basic idea of the proposed database structure. One table to hold all possible values that can exist in the database and a second table that combines these values into any and all possible combinations.
My new manager is not too keen on this design and personally I've never come across it. Since this will be a C# project using either the Entity framework or NHibernate for interacting with the database this kind of database design seems like it would be a challenge to implement in either of those frameworks. Is there a name for this kind of design so I can research it further? Are there any major pros or cons for this design? The documentation mentions that this is done for better performance and for "hyper" normalization.