我有一种情况需要在我的数据库中存储一般数据(可能是int,float或string),但我不知道它会提前发生。我需要一个表(或不太优选的表)来存储这个未知类型的数据。
我认为我要做的是为每种数据类型设置一个列,每个记录只使用一列,而保留其他数据NULL
。这需要在数据库之上有一些逻辑,但这不是太大的问题,因为无论如何我将在模型中表示这些记录。
基本上,有没有最好的做法来做这样的事情?我还没有提出任何比这更糟糕的东西,但似乎这是一个有点常见的问题。提前谢谢。
编辑:另外,这被认为是3NF吗?答案 0 :(得分:1)
如果您的应用程序可以可靠地转换数据类型,您可以考虑基于可变长度二进制列的单列解决方案,并使用第二列来跟踪原始数据类型。 (之前我做了一个非常小的例行程序,它运行得很好。)测试会显示在应用程序或数据库端是否更有效地处理转换。
答案 1 :(得分:1)
如果您used SQLite作为数据库后端,则可以轻松完成此操作:
版本3数据库中的任何列(INTEGER PRIMARY KEY列除外)都可用于存储任何类型的值。
对于其他RDBMS系统,我会选择Philip的解决方案。
请注意,在我的软件系列(业务应用程序)中,我无法想到需要此类需求的任何情况(具有未知数据类型的值)。除非领域模型存在缺陷,当然......我可以想象其他软件系列可能会产生不同的做法,但我建议您考虑重新考虑整体设计。
答案 2 :(得分:0)
如果我这样做,我会选择你的方法,或者我会把所有东西都拼成字符串而只使用一列。当然会有另一个类型的列(对于第一种方法也可能有用)。
对于更快的代码,我可能会使用您的方法。