2010-05-25 1 views
0

Я пишу это приложение, которое позволит пользователю определить пользовательские викторины, а затем разрешить другому пользователю отвечать на вопросы. Каждый вопрос викторины имеет соответствующий тип данных. Все ответы на все вопросы хранятся вертикально в моей таблице [Response]. В настоящее время я использую 2 поля для хранения ответа.Как мне сделать <T> в varbinary и все еще быть в состоянии выполнить CONVERT на стороне SQL? Последствия?

//Response schema 
ResponseID int 
QuizPersonID int 
QuestionID int 
ChoiceID int //maps to Choice table, used for drop down lists 
ChoiceValue varbinary(MAX) //used to store a user entered value 

Я использую .net 3.5 C# SQL Server 2008.

Я думаю, что я хотел бы, чтобы хранить различные типы данных, в том же поле, а затем в моем докладе SQL прока я Преобразовать в правильный тип данных. Я думаю, что это идеально, потому что я должен проверять только одно поле. Я также думаю, что это может быть больше проблем, чем того стоит.

Я думаю, что мои другие варианты; хранить данные как строки в db (yuck) или иметь столбец для каждого типа данных, который я мог бы использовать.

Так что я хотел бы знать, как бы я отформатировал свои типы данных на C#, чтобы они могли быть правильно преобразованы в SQL? Что такое производительность для преобразования в SQL? Должен ли я просто создать целый столбец для каждого типа данных?

+0

Я не уверен, что понимаю вашу проблему ... зачем вам нужны разные типы данных? Как я вижу, нет никаких «данных», связанных с выбором, просто текст и, возможно, изображение. Какие данные вы бы там поместили? Не могли бы вы привести конкретный пример? –

+0

Пользователь может ответить с датой на один вопрос, двойной на другой и строку на другой. Я думал хранить все эти разные типы данных в одном поле «ChoiceValue». В таблице вопросов будет ссылка на тип данных. –

ответ

1

Все еще не идеальное решение, но вы можете взглянуть на sql_variant data type, который позволяет вам хранить самые Типы SQL Server в том же столбце. Но обратите внимание, что «длинные» данные не поддерживаются.

Альтернативой, которую я также использовал в подобных ситуациях в прошлом, является наличие отдельной таблицы для каждого типа ответа вместе с «родительской» таблицей ответов. Это aso позволяет вам правильно относиться к вашей таблице выбора. Например, вы бы следующие таблицы:

  • Response
  • StringResponse
  • DateTimeResponse
  • BitResponse
  • ChoiceResponse
  • XyzResponse, и т.д.

Все таблицы ответов типизированных будет в факультативном соотношении 1-1 с ответом и все другие связанные таблицы будут относиться только к родительской таблице ответов.

+0

Мне нравится ваше решение. :) Очень хорошо. –

Смежные вопросы