在一列中存储不同的数据类型以减少表计数

时间:2016-10-27 16:08:20

标签: sql sql-server tsql database-design azure-sql-database

我目前正在开发一个项目,我在Azure SQL数据库中重新创建MS SQL Server数据库。我已经获得了当前架构(虽然没有实际的列数据类型),我遇到了这个:

Question (QuestionID, QuestionDescription, UnitOfMeasure, SQLDataType)
QuestionAnswer (QuestionID, AnswerID, Answer, SQLDataType, UnitOfMeasure)

因此,数据库包含各种问题,每个问题都使用不同类型的数据(int,text,date等等)进行回答/测量,所有答案与标识所用数据类型的列一起存储。 “答案”栏。

我想知道这是否是一种常见做法以及如何实施? (一列中有多种类型的数据)。另一种选择显然是将所有问题放在一起,但将各种答案分成不同的表格,但我可以看到30多个不同的问题会变得多么麻烦。

2 个答案:

答案 0 :(得分:2)

这是我们在生产中用于相同类型问题的模式。是的,它有效 - 您只需确保每个Answer实际上都可以投射到给定的SQLDataType。我们在插入/更新时执行此操作。

答案 1 :(得分:0)

您可以使用sql_variant(文档不清楚Azure)。

一个很大的优势是您不必维护有关值的任何元数据。

https://msdn.microsoft.com/en-us/library/ms173829.aspx https://msdn.microsoft.com/en-us/library/ms178550.aspx

╔══════════════════════════════════════╦══════════════════╦════╦═══╦════╦══════════════════════════════╦══════╗
║                 123                  ║       int        ║ 10 ║ 0 ║ 6  ║             NULL             ║  4   ║
╠══════════════════════════════════════╬══════════════════╬════╬═══╬════╬══════════════════════════════╬══════╣
║ 4.5                                  ║ numeric          ║  2 ║ 1 ║  9 ║ NULL                         ║    5 ║
║ Hello                                ║ varchar          ║  0 ║ 0 ║ 13 ║ SQL_Latin1_General_CP1_CI_AS ║ 8000 ║
║ שלום                                ║ nvarchar         ║  0 ║ 0 ║ 16 ║ SQL_Latin1_General_CP1_CI_AS ║ 8000 ║
║ 2016-10-27 21:08:58.027              ║ datetime         ║ 23 ║ 3 ║ 10 ║ NULL                         ║    8 ║
║ 2016-10-27 21:08:58.030              ║ datetime         ║ 23 ║ 3 ║ 10 ║ NULL                         ║    8 ║
║ E0FBA251-8DC2-4F88-9D23-1FB354932AE5 ║ uniqueidentifier ║  0 ║ 0 ║ 18 ║ NULL                         ║   16 ║
╚══════════════════════════════════════╩══════════════════╩════╩═══╩════╩══════════════════════════════╩══════╝
{{1}}