如何存储抽象类型的数据?将数据存储为 sql_variant 数据类型是不是明智?

Posted

技术标签:

【中文标题】如何存储抽象类型的数据?将数据存储为 sql_variant 数据类型是不是明智?【英文标题】:How to store data with abstract type? Is it sane to store data as sql_variant data type?如何存储抽象类型的数据?将数据存储为 sql_variant 数据类型是否明智? 【发布时间】:2013-07-09 07:35:50 【问题描述】:

我需要存储未知类型(但可以在存储前检查)(抽象类型)数据。我可以看到存储它的两种变体。

检查数据类型并移至特定类型的表。有许多类型特定的不利于抽象。

或将所有内容存储为变体。

会有很多数据,我担心将布尔类型的数据保存到sql_variant会导致过多的内存浪费。是这样吗?

这种情况还有其他解决办法吗?

【问题讨论】:

Bad habits to kick : choosing the wrong data type - 请参阅 Aaron 在 sql_variant 上的观点 - 不建议在任何严重的系统中使用! @marc_s 那么每种类型有很多表吗? 取决于你拥有什么样的数据。这一切都将是BITINT 吗?还是所有二进制数据>= 64 KB?对于二进制、非结构化数据,您可能会调查 VARBINARY() 而不是 sql_variant,对于文本数据可能会调查 XMLVARCHAR(n) / VARCHAR(MAX) 【参考方案1】:

很难从您的问题中确定正确答案。

您期望成为什么数据类型以及您打算如何处理这些类型?

因为,如果您要为每种类型创建多个表,那么您最终会比使用 sql_variant 类型更复杂并且在磁盘上的大小更大。 请记住,当使用 sql_variant 表示布尔值时,只会表示 1 个字节的开销(用于存储数据类型类型)+ 可变长度字节(您可能已经在表中拥有)。 但是,如果您在某些复杂的关键任务逻辑中使用该类型,并且如果您的数据访问框架不支持 sql_variant,则不应使用 sql_variant。

【讨论】:

以上是关于如何存储抽象类型的数据?将数据存储为 sql_variant 数据类型是不是明智?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现noSQL数据库抽象?

抽象数据类型(ADT)和面向对象编程(OOP)3.3 抽象数据类型

线性表-顺序存储结构(即数组)

抽象数据类型

在数据结构中数据、数据元素、数据对象、数据结构、存储结构、数据类型以及抽象数据类型的定义分别是啥

GeoPoint 不允许存储在 Room 中