我需要将其他数据放入数据库中,并且可以选择修改现有表 (table_existing) 或创建新表。
这就是 table_existing 现在的样子:
table_existing
-------------------------
| ID | SP | SV | Field1 |
| .. | WW | 1 | ...... |
| .. | WW | 1 | ...... |
-------------------------
选项 (A)
table_existing
----------------------------------------------------------------------
| ID | SP | SV | Field1 | Field2 | Field3 | Field4 | Field5 | Field6 |
| .. | XX | 1 | ...... | ...... | ...... | ...... | ...... | ...... |
| .. | YY | 2 | ...... | ...... | ...... | ...... | ...... | ...... |
----------------------------------------------------------------------
选项 (B)
table_existing would be converted into table_WW_1_data
---------------
| ID | Field1 |
| .. | ...... |
| .. | ...... |
---------------
table_XX_1_data
------------------------
| ID | Field1 | Field2 |
| .. | ...... | ...... |
| .. | ...... | ...... |
------------------------
table_YY_2_data
---------------------------------
| ID | Field1 | Field2 | Field3 |
| .. | ...... | ...... | ...... |
| .. | ...... | ...... | ...... |
---------------------------------
上下文:SP、SV 的组合决定了将要填充的字段的“数量”。例如,(XX, 1) 有 2 个字段。(YY, 2) 有 3 个字段。
如果我选择选项 (A),我将在“更宽”表中有许多空/NULL 值。
如果我选择选项(B),我基本上会创建更多的表......一个用于 SP、SV 的“每个”组合 - 总共可能有 4-5 个。但是每个都将完全填充正确数量的字段。table_existing 也将被更改。
从速度的角度来看,更优化的数据库结构是什么?我认为从可维护性的角度来看,选项(B)可能会更好。
编辑1
这两个选项都不是我的应用程序中最关键/最常用的表。
在选项(B)中,数据被拆分后,根本不需要加入它们。如果我知道我需要 XX_1 的字段,我会去那张桌子。
我试图了解拥有一个包含许多未使用值的大表与将相同的数据拆分到更多数量的表中是否有利弊。更多的表是否会导致数据库性能下降(我们已经有大约 80 个表)?