I have a novice developer who is very enthusiastic about what he calls the "matrix"
I'm looking for peer understanding
In short, this is what we have:
- 1 highly denormalized table with approximately 120 columns
- Data points vary from account, customer, family, relationship, product, employee, etc.
- One index per column: about 120 non-clustered indexes
- About 90% of the total space in the database used by indexes today is the indexes in this table.
- Today about 1.5 million lines with many zeros
- The table is loaded with a stored procedure, the core of which is dynamic SQL
- All field names are common and do not describe data
- the data dictionary type table is used with dynamic SQL to load any data point in any field
- The display of fields is not static: today the column dim_0001 is the name of the client, but tomorrow there may be something else
- No primary key
- Lack of foreign keys
- There are no real restrictions (for example, all fields are zero)
Argument for the table:
- simplifies recording of requests, as it eliminates the need to record some connection
Intended Use:
- The end-user level will be the main component of building the Universe in Business Objects
- Development of an ETL development process
My recommendation will either kill the process it is in today (early development in a test environment) or move it to the next stage of the test.
Based on my research, my education and experience, I do not support it and I want the tables to be deleted as soon as one or two processes that depend on these tables are transferred to another solution.
The script below is for your reference (I limited myself to one sample example).
Any understanding that you can offer (at least one word) is valuable
-- The Matrix CREATE TABLE [z005497].[tblMatrix]( [as_of_dt] [datetime] NOT NULL, [dim_0001] [varchar](100) NULL, [dim_0002] [varchar](103) NULL, [dim_0003] [varchar](100) NULL, [dim_0004] [varchar](100) NULL, [dim_0005] [varchar](100) NULL, [dim_0006] [varchar](100) NULL, [dim_0007] [varchar](100) NULL, [dim_0008] [varchar](100) NULL, [dim_0009] [varchar](100) NULL, [dim_0010] [varchar](100) NULL, [dim_0011] [varchar](100) NULL, [dim_0012] [varchar](100) NULL, [dim_0013] [varchar](100) NULL, [dim_0014] [varchar](100) NULL, [dim_0015] [varchar](100) NULL, [dim_0016] [varchar](100) NULL, [dim_0017] [varchar](103) NULL, [dim_0018] [varchar](103) NULL, [dim_0019] [varchar](103) NULL, [dim_0020] [varchar](103) NULL, [dim_0021] [varchar](103) NULL, [dim_0022] [varchar](103) NULL, [dim_0023] [varchar](103) NULL, [dim_0024] [varchar](103) NULL, [dim_0025] [varchar](103) NULL, [dim_0026] [varchar](11) NULL, [dim_0027] [varchar](11) NULL, [dim_0028] [varchar](11) NULL, [dim_0029] [varchar](11) NULL, [dim_0030] [varchar](11) NULL, [dim_0031] [varchar](11) NULL, [dim_0032] [varchar](11) NULL, [dim_0033] [varchar](11) NULL, [dim_0034] [varchar](11) NULL, [dim_0035] [varchar](11) NULL, [dim_0036] [varchar](11) NULL, [dim_0037] [varchar](11) NULL, [dim_0038] [varchar](11) NULL, [dim_0039] [varchar](11) NULL, [dim_0040] [varchar](11) NULL, [dim_0041] [varchar](11) NULL, [dim_0042] [varchar](11) NULL, [dim_0043] [varchar](11) NULL, [dim_0044] [varchar](11) NULL, [dim_0045] [varchar](11) NULL, [dim_0046] [varchar](11) NULL, [dim_0047] [varchar](11) NULL, [dim_0048] [varchar](11) NULL, [dim_0049] [varchar](11) NULL, [dim_0050] [varchar](11) NULL, [dim_0051] [varchar](11) NULL, [dim_0052] [varchar](11) NULL, [dim_0053] [varchar](11) NULL, [dim_0054] [varchar](5) NULL, [dim_0055] [varchar](5) NULL, [dim_0056] [varchar](5) NULL, [dim_0057] [varchar](5) NULL, [dim_0058] [varchar](5) NULL, [dim_0059] [varchar](5) NULL, [dim_0060] [varchar](5) NULL, [dim_0061] [varchar](5) NULL, [dim_0062] [varchar](5) NULL, [dim_0063] [varchar](5) NULL, [dim_0064] [varchar](5) NULL, [dim_0065] [varchar](5) NULL, [dim_0066] [varchar](5) NULL, [dim_0067] [varchar](5) NULL, [dim_0068] [varchar](5) NULL, [dim_0069] [varchar](5) NULL, [dim_0070] [varchar](5) NULL, [dim_0071] [varchar](5) NULL, [dim_0072] [varchar](5) NULL, [dim_0073] [varchar](5) NULL, [dim_0074] [varchar](5) NULL, [dim_0075] [varchar](5) NULL, [dim_0076] [varchar](5) NULL, [dim_0077] [varchar](5) NULL, [dim_0078] [varchar](5) NULL, [dim_0079] [varchar](5) NULL, [dim_0080] [varchar](5) NULL, [dim_0081] [varchar](5) NULL, [dim_0082] [varchar](5) NULL, [dim_0083] [varchar](5) NULL, [dim_0084] [int] NULL, [dim_0085] [int] NULL, [dim_0086] [int] NULL, [dim_0087] [int] NULL, [dim_0088] [int] NULL, [dim_0089] [int] NULL, [dim_0090] [int] NULL, [dim_0091] [int] NULL, [dim_0092] [int] NULL, [dim_0093] [int] NULL, [dim_0094] [varchar](12) NULL, [dim_0095] [varchar](12) NULL, [dim_0096] [varchar](12) NULL, [dim_0097] [varchar](120) NULL, [dim_0098] [varchar](120) NULL, [dim_0099] [varchar](120) NULL, [dim_0100] [numeric](20, 0) NULL, [dim_0101] [varchar](20) NULL, [dim_0102] [varchar](20) NULL, [dim_0103] [varchar](20) NULL, [dim_0104] [varchar](20) NULL, [dim_0105] [varchar](20) NULL, [dim_0106] [varchar](20) NULL, [dim_0107] [varchar](20) NULL, [dim_0108] [varchar](20) NULL, [dim_0109] [varchar](20) NULL, [dim_0110] [varchar](20) NULL, [dim_0111] [varchar](20) NULL, [dim_0112] [varchar](20) NULL, [dim_0113] [varchar](20) NULL, [dim_0114] [varchar](20) NULL, [dim_0115] [varchar](20) NULL, [dim_0116] [varchar](20) NULL, [dim_0117] [varchar](20) NULL, [dim_0118] [varchar](20) NULL, [dim_0119] [varchar](20) NULL, [dim_0120] [varchar](20) NULL, [lastLoad] [datetime] NULL ) ON [PRIMARY] -- Index example CREATE NONCLUSTERED INDEX [idx_dim_0001 (not unique)] ON [z005497].[tblMatrix] ( [dim_0001] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -- The configuration table from which developers would find out what is in the Matrix CREATE TABLE [z005497].[tblMatrixCfg]( [dimId] [int] IDENTITY(100000,1) NOT NULL, [colName] [varchar](25) NOT NULL, [dataType] [varchar](25) NOT NULL, [dimName] [varchar](25) NOT NULL, [dimDesc] [varchar](500) NOT NULL, [dimpath] [varchar](5000) NOT NULL, [loadDate] [datetime] NOT NULL, [modUser] [varchar](100) NOT NULL, [modDate] [datetime] NOT NULL, CONSTRAINT [PK_tblMatrixCfg_1] PRIMARY KEY CLUSTERED ( [dimId] ASC, [colName] ASC, [dimName] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]