2012-03-20 5 views
2

Можно ли использовать тип данных varbinary для внешних ключей? Почему? У меня есть таблица EvalAnswer с FK для таблицы баллов. Оценка чувствительна и должна быть зашифрована. Шифрование/дешифрование происходит в проекте asp.net (4.0), а не в sql-сервере (2008), поэтому тип данных должен быть varbinary.Использовать varbinary как внешний ключ

EDIT: больше информации

Конечно. У меня эти столбцы: Id, Score, ScoreText, Description, Index Id - это инкрементный счетчик. (PK) Оценка - это оценка как число (например, 1). ScoreText - это оценка в виде буквы (оценка 1 равна букве A). Описание - это комментарий для каждого балла.

Причина, по которой это у меня есть, это также, что есть особые ситуации, , например, один из вопросов имеет только выигрыш от 1 до 4, а остальное - 1-5.

Таким образом, у каждого вопроса есть оценка 1, но описание отличается от других вопросов: 1. Итак, если у меня есть 5 вопросов, это дает 5 * 5 строк в таблице баллов. (Все с другим описанием)

Когда я загружаю страницу, я получаю правильный результат (с описанием) для каждого раскрывающегося списка. Обычно 1-5. Но когда пользователь сохранил счет, мне нужно знать более раннюю оценку saaved для каждого вопроса при загрузке страницы. Поэтому у меня есть отношение между EvalAnswer и счетом.

Есть вопросы относительно таблицы оценки, которая НЕ чувствительна. Но некоторые из них. И для них мне нужно скрыть отношение между EvalAnswer и Score.

Что может быть плохой дизайн - это тот факт, что я использую ту же таблицу (таблицу баллов), что и , чтобы показать доступный результат для каждого вопроса. , а также как удерживать то, что выбрал пользователь. (Это FK от EvalAnswer забьют)

Пожалуйста совет .......

+2

Это не против закона, но это плохая идея. – Oded

+0

Хорошо, почему это плохая идея? Пожалуйста, порекомендуйте другое решение. Если вам нужна дополнительная информация о моем дизайне, спросите пожалуйста. –

+0

ОК. Пожалуйста, объясните, почему вам нужно присоединиться к партитуре? – Oded

ответ

0

Я предлагаю добавить в ID int столбец таблицы Score и ссылки это поле из EvalAnswer таблицы.

Это означает, что ваши сценарии таблицы изменятся

CREATE TABLE Score (
    Id int not null identity primary key 
, Code varbinary(max) --> The new field containing the encrypted information 
, Score int 
, ScoreText varchar(5) 
, Description varchar(max) 
, Index int) 

CREATE TABLE EvalAnswer (
    Id int not null identity, 
    ScoreId int not null references Score(Id) 
    ... 
) 

Как вы можете видеть, «Старое» Id поля теперь стало Code полем. Новое поле - это столбец identity, содержащий уникальный номер

Нет ничего против использования столбца varbinary в чужом ключе, но это сделает запрос и отладку намного сложнее.

Также обратите внимание, что существует ширина 900 байтов по ширине индекса, который может быть легче ударить при хранении зашифрованного блоба.

+0

Hi Filip У меня уже есть ссылка от EvalAnswer до Score. И этот ИД, который у меня есть, тот, который мне нужно защитить. Но мне нужно склеить/расшифровать приложение asp.net. Поэтому мне нужно, чтобы столбец был заменен на varbinary, и поэтому мой вопрос. Итак, нет другого способа, чем использовать мой FK как varbinary? –

+0

Итак, у вас есть 2 внешних ключа от EvalAnswer до таблицы баллов? –

+0

Нет У меня есть только один. Я не знаю, где я тебя неправильно понял. Но это все еще должно быть varbinary. –

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