我的数据库中有一个表,它代表自定义表单中的数据字段。 DataField 给出了它应该用什么样的控件来表示,以及它应该采用什么值类型的一些表示。简化你可以说我在这个表中有 2 个实体 - 文本框接受任何字符串和文本框只接受数字。
现在我将不同的值存储在一个单独的表中,引用数据字段定义。当类型不同时,在此处存储数据值的最佳方式是什么?
一种可能的解决方案是让 FieldValue 表为每种可能的值类型保留一个字段。现在这肯定是多余的,但至少我会得到以正确形式存储的值——稍后简化查询。
FieldValue
----------
Id
DataFieldId
IntValue
DoubleValue
BoolValue
DataValue
..
另一种可能性是将所有内容都存储为字符串,并将其转换为查询。我将 .Net 与 NHibernate 一起使用,我看到至少这里有一个 Projections.Cast 可用于转换,例如字符串到查询中的 int。
在这两种解决方案中的任何一种方式中,我都需要知道在进行查询时使用哪种类型,但我会从 DataField 中知道这一点,所以这不会成为问题。
无论如何;我认为这些解决方案中的任何一个听起来都不好。他们是吗?或者,还有更好的方法?
最佳答案
没有第三个“神奇”选项:您的具体情况决定了您要如何进行。
根据我的经验,仅字符串解决方案对应用程序设置等内容很有意义。通常,我不需要直接在查询中使用此类数据,因此它以字符串形式出现并没有让我很在意。
我不确定,但您似乎正在扩展具有自定义属性的实体,这听起来您可能希望在某个时候在数据库中进行一些处理。在这种情况下,您不妨采用多列方法,只填写类型正确的列。它不会很漂亮,但它可能会简化查询。
正如我所说,这取决于您是否需要运行查询以及需要运行何种查询,您需要什么样的性能等。
关于database - 不知道类型时将数据存储在数据库中的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2872067/