对外键使用数据类型varbinary是否可以? 为什么? 我有一个EvalAnswer表,FK到Score表。 分数很敏感,应加密。加密/解密发生在asp.net(4.0)项目中,而不是在sql server(2008)中,因此数据类型必须是varbinary。
编辑:更多信息
当然。 我有这些列:Id,Score,ScoreText,Description,Index Id是增量计数器。 (PK) 分数是分数(例如1)。 ScoreText是一个字母的分数(分数1等于字母A)。 描述是对每个分数的评论。
我这样做的原因还在于有特殊情况, 例如其中一个问题只有1-4分,其余的分数为1-5分。
所以每个问题都有1分,但描述与另一个问题得分1不同。 所以如果我有5个问题,这会在Score表中提供5 * 5行。 (所有描述不同)
当我加载页面时,我会为每个下拉列表获得正确的评分(包含说明)。通常1-5。 但是当用户保存得分时,我需要知道页面加载时每个问题的早期saaved得分。 因此,我与EvalAnswer和评分之间存在关联。
关于得分表存在一些不敏感的问题。 但有些人是。对他们来说,我需要隐藏EvalAnswer和Score之间的关系。
可能是一个糟糕的设计是我使用相同的表(分数表)作为 一个显示每个问题的可用得分。 并且也是保持用户选择的那个。 (这是EvalAnswer的FK得分)
请建议.......
答案 0 :(得分:0)
我建议在Score表中添加ID int
列,并从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字节限制,在存储加密blob时可能更容易命中。