如何存储抽象类型的数据?将数据存储为 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 那么每种类型有很多表吗?
取决于你拥有什么样的数据。这一切都将是BIT
和INT
吗?还是所有二进制数据>= 64 KB?对于二进制、非结构化数据,您可能会调查 VARBINARY()
而不是 sql_variant
,对于文本数据可能会调查 XML
或 VARCHAR(n)
/ VARCHAR(MAX)
【参考方案1】:
很难从您的问题中确定正确答案。
您期望成为什么数据类型以及您打算如何处理这些类型?
因为,如果您要为每种类型创建多个表,那么您最终会比使用 sql_variant 类型更复杂并且在磁盘上的大小更大。 请记住,当使用 sql_variant 表示布尔值时,只会表示 1 个字节的开销(用于存储数据类型类型)+ 可变长度字节(您可能已经在表中拥有)。 但是,如果您在某些复杂的关键任务逻辑中使用该类型,并且如果您的数据访问框架不支持 sql_variant,则不应使用 sql_variant。
【讨论】:
以上是关于如何存储抽象类型的数据?将数据存储为 sql_variant 数据类型是不是明智?的主要内容,如果未能解决你的问题,请参考以下文章
抽象数据类型(ADT)和面向对象编程(OOP)3.3 抽象数据类型