我目前正在开发一个项目,我在Azure SQL数据库中重新创建MS SQL Server数据库。我已经获得了当前架构(虽然没有实际的列数据类型),我遇到了这个:
Question (QuestionID, QuestionDescription, UnitOfMeasure, SQLDataType)
QuestionAnswer (QuestionID, AnswerID, Answer, SQLDataType, UnitOfMeasure)
因此,数据库包含各种问题,每个问题都使用不同类型的数据(int,text,date等等)进行回答/测量,所有答案与标识所用数据类型的列一起存储。 “答案”栏。
我想知道这是否是一种常见做法以及如何实施? (一列中有多种类型的数据)。另一种选择显然是将所有问题放在一起,但将各种答案分成不同的表格,但我可以看到30多个不同的问题会变得多么麻烦。
答案 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}}