如果可能要考虑数据存储,则拆分表:键/ A / B键/ C键/ D
您可以通过视图(在db中定义数据位置)或通过更改ORM定义来执行访问。
这不是性能最高的(涉及连接),但是随着时间的推移,它可以呈现A / B / C / D的任何组合,而无需更改底层存储,并且取决于您的实际访问模式,这可能就足够了。
您可能不高兴能够在生产系统中实现停机,重组表等功能。
通过视图执行访问,使您可以在基础表中从A / B / C切换到A / B / C / D到A / B / D,而只需很少的更改,就不会移动数据。视图对读取逻辑是透明的,并且如果您的dbms支持功能或可更新视图,那么对写入逻辑也是透明的。
确实,我认为您的决定会反映出现实世界中的许多担忧:1)什么是C和D数据类型2)为C / D收集的相对数据量3)C / D数据与纯C或D条目相比的相对重叠4)停机/维护窗口的可用性和持续时间5)DBMS支持可更新的视图6)希望将ORM中的数据库物理结构详细信息保持为透明,而通过db中的视图/功能进行呈现使其透明(对于所有访问都是相同的)应用程序,而不仅仅是当前的应用程序)
我的答案更适合(1)的大型/复杂数据类型,(3)的重叠少和(4)的停机时间最短,理想情况下,在(5)中具有良好的dbms支持,并且在(6)中有多个应用程序访问数据
但是对于很多替代品来说没有对/错:-从A / B / C开始,以后添加D,调整ORM,再到后来删除列C-从A / B / C / D开始并且忽略null等。我认为,考虑您的解决方案以及您对它的预期用途/生命周期的了解,进行一些大小/体积建模,并期望稍后进行更改,因为并非所有事物都能按预期实现。