存储可能是多种不同类型的值的正确方法

Dav*_*son 13 database-design sql-server eav

我有一个Answers表和一个Questions表。

答案表中有值,但根据问题,这个值可以是一个bitnvarcharnumber(到目前为止)。该问题有其意的答案值类型应该是什么概念。

在某一点或另一点解析这些Answer值非常重要,因为至少需要比较这些数字。

对于更多的上下文,问题和潜在答案(通常是允许文本框类型输入的数据类型)由某些用户在各种调查中提供。然后由其他指定用户提供答案。

我考虑过的几个选项是:

A. 根据预期类型(在问题中记录)不同解析的 XML 或字符串

B. 三个单独的表,它们引用(或被引用)Answer 表并根据预期类型连接到其中。在这种情况下,我不确定设置约束以确保每个问题只有一个答案的最佳方法,或者是否应该将答案留给应用程序。

C. Answer 表上的三个单独的列,可以根据预期的类型进行检索。

我很乐意就这些方法的优缺点或我没有考虑过的替代方法获得一些意见。

Oli*_*bes 2

这实际上取决于您的前端如何访问数据。

如果您使用 O/R 映射器,请重点关注类的面向对象设计,而不是数据库设计。然后数据库仅反映类设计。确切的数据库设计取决于您使用的 O/R 映射器和继承映射模型。

如果您直接通过记录集、数据表、数据读取器等访问表,则简单的做法是使用不变区域性将值转换为字符串并将其存储在简单的文本列中。当然,再次使用相同的区域性以便在读取值时将文本转换回专门的值类型。

或者,您可以为每个值类型使用一列。今天我们有 TB 驱动器!

XML 列是可能的,但与简单的文本列相比可能会增加更多的复杂性,并且执行几乎相同的操作,即序列化/反序列化。

分离的连接表是正确的规范化处理方式;然而,它们也增加了相当多的复杂性。

把事情简单化。

另请参阅问卷数据库设计的回答 - 哪种方式更好?