将多种数据类型存储到数据库中的最佳方法是什么

LOK*_*LOK 4 sql database sql-server mixed types

我正在设计一个使用 MSSQL Server 2005 的数据库来存储来自不同设备的日志值。值的数据类型可以是 boolean、int-32 或 64 bit-double

将有一个名为 的查找表channels

ID(PK)      | int32

device_name | varchar(32)  
Run Code Online (Sandbox Code Playgroud)

将有一个表被调用values来存储该值。因此 boolean 和 int-32、double 值将被转换为 DECIMAL 数据类型。

ID(foreign key to ID@channels)  | int32

logtime                         | DATETIME
value                           | DECIMAL
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是最终用户可以在一个表上使用简单的 select 语句来选择数据,例如 select logtime,value from values where ID = 1不知道通道的数据类型。

但这是浪费内存,因为现在我将 int32 和 boolean 存储为 Decimal。我是数据库编程的新手,我想知道是否有人知道更好的方法来做到这一点?

Rem*_*anu 6

您可以存储 3 个可以为空的单独字段。两个将具有 NULL 值,第三个将具有实际值(您甚至可以使用 CHECK 约束强制执行三个中的一个不是 NULL)。NULL 值不占用空间。您可以添加一个将非空值公开为伪列的计算值。

或者,您可以使用sql_variant字段。sql_variant可以存储多种类型并保留类型元数据(类型、精度、比例)。