database - 不知道类型时将数据存储在数据库中的最佳方法

标签 database nhibernate custom-data-type

我的数据库中有一个表,它代表自定义表单中的数据字段。 DataField 给出了它应该用什么样的控件来表示,以及它应该采用什么值类型的一些表示。简化你可以说我在这个表中有 2 个实体 - 文本框接受任何字符串和文本框只接受数字。

现在我将不同的值存储在一个单独的表中,引用数据字段定义。当类型不同时,在此处存储数据值的最佳方式是什么?

一种可能的解决方案是让 FieldValue 表为每种可能的值类型保留一个字段。现在这肯定是多余的,但至少我会得到以正确形式存储的值——稍后简化查询。

FieldValue
----------
Id
DataFieldId
IntValue
DoubleValue
BoolValue
DataValue
..

另一种可能性是将所有内容都存储为字符串,并将其转换为查询。我将 .Net 与 NHibernate 一起使用,我看到至少这里有一个 Projections.Cast 可用于转换,例如字符串到查询中的 int。

在这两种解决方案中的任何一种方式中,我都需要知道在进行查询时使用哪种类型,但我会从 DataField 中知道这一点,所以这不会成为问题。

无论如何;我认为这些解决方案中的任何一个听起来都不好。他们是吗?或者,还有更好的方法?

最佳答案

没有第三个“神奇”选项:您的具体情况决定了您要如何进行。

根据我的经验,仅字符串解决方案对应用程序设置等内容很有意义。通常,我不需要直接在查询中使用此类数据,因此它以字符串形式出现并没有让我很在意。

我不确定,但您似乎正在扩展具有自定义属性的实体,这听起来您可能希望在某个时候在数据库中进行一些处理。在这种情况下,您不妨采用多列方法,只填写类型正确的列。它不会很漂亮,但它可能会简化查询。

正如我所说,这取决于您是否需要运行查询以及需要运行何种查询,您需要什么样的性能等。

关于database - 不知道类型时将数据存储在数据库中的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2872067/

相关文章:

数据库性能

c# - Fluent NHibernate 解决方案结构 - 如何在 Web 应用程序/控制台应用程序的后端引用一次 DLL

database - 像我五岁时解释->主键如何满足第一范式

mysql - 如何获取存储过程中的百分比

.net - NHibernate:SQL 查询结果映射

nhibernate - 如何按 Criteria API 中的计算列对记录进行排序?

c++ - 如何从字符串中检测数据类型?

python - Spyder 变量资源管理器如何显示自定义数据类型?

java - 使用Hadoop自定义数据类型时EOF异常-biginsghts

mysql - 当表具有唯一值时查询显示重复项?