复制长表输入表设计注意事项

时间:2012-07-08 23:41:32

标签: sql sql-server database-design

我目前正在将基于纸张的系统转换为新的门户网站。当公司(医疗实践)招募新患者时,患者目前填写一种特定形式。此表包含28个问题,每个问题有多达20个不同的是/否选项。

我的问题是,我应该创建一个包含多列的表(可能多达300个,主要包含BIT字段),还是应该以某种方式对其进行规范化?

所有字段都与单个实体相关联;病人来这里的原因。

根据我的数据库设计经验,100多列的大表通常不赞成,但我想看看社区对此示例的看法。

1 个答案:

答案 0 :(得分:2)

当使用许多布尔(BIT)字段时,有时最好使用单个INT字段,这是一个按位求和。这简化了存储和表定义,但使代码更加复杂。假设您有一张桌子患者和一些具有不同含义的数值:服用药物,对扑热息痛过敏,患有糖尿病等。当您插入勾选的字段时,您只需将相应的数值相加。执行select语句时,您将按位进行比较:TotalValue & Value = Value。 这是一些代码:

CREATE TABLE #Patients(Id INT, PatientName VARCHAR(50), MiscIssues INT)

DECLARE @IsOnMedication TINYINT = 2
DECLARE @IsParacetamolAllergic TINYINT = 4
DECLARE @IsDiabetic TINYINT = 8

INSERT INTO #Patients
VALUES
    (1, 'A', @IsDiabetic + @IsOnMedication)
    , (2, 'B', @IsDiabetic + @IsOnMedication + @IsParacetamolAllergic)

SELECT * FROM #Patients WHERE MiscIssues & @IsDiabetic = @IsDiabetic

DROP TABLE #Patients

另一种选择是使用自定义字段,但根据我的经验,当您有大量记录时,这种方法表现不佳。