一个人常常反对填充的非规范化表,虽然有一个主键,例如:
| RowID | Column1 | Column2 | Column3 | Column4 | ...
| 'Row1' | 'a1' | 'a2' | 'a3' | 'a4' |
| 'Row2' | 'b1' | 'b2' | 'b3' | 'b4' |
| 'Row3' | 'c1' | 'c2' | 'c3' | 'c4' |
...
问题是:如何有效地将其转换为存储数据的3nf? (理想情况下,我们假设列数及其名称未知)
| RowID | ColumnID | Value |
| 1 | 1 | 'a1' |
| 1 | 2 | 'a2' |
...
或理想情况下
| RowID | ColumnID | Value |
| 'Row1' | 'Column1' | 'a1' |
| 'Row1' | 'Column2' | 'a2' |
...
我知道的一个解决方案是使用几个UNION选择一个在另一个下面的列,但是在许多列的情况下脚本看起来很糟糕。
非常感谢任何帮助!
祝你好运, 君士坦丁。