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。我是数据库编程的新手,我想知道是否有人知道更好的方法来做到这一点?
您可以存储 3 个可以为空的单独字段。两个将具有 NULL 值,第三个将具有实际值(您甚至可以使用 CHECK 约束强制执行三个中的一个不是 NULL)。NULL 值不占用空间。您可以添加一个将非空值公开为伪列的计算值。
或者,您可以使用sql_variant
字段。sql_variant
可以存储多种类型并保留类型元数据(类型、精度、比例)。
归档时间: |
|
查看次数: |
6483 次 |
最近记录: |