构造一个包含许多列的表

时间:2014-07-18 21:52:23

标签: c# sql sql-server entity-framework enums

在SQL Server数据库中,我有一个包含大约200个项目的表:

create table dbo.Reports
(
  Id int identity not null,
  HealthRating int not null, --- { One of: NoProblems; TemporaryChange; ... }
  Hobbies int not null, --- { Many of: None, Running, Tennis, Football, Swimming }
  HobbiesOthers nvarchar (400) null
  -- More 100 columns
);  

所以我有大约200个类型的列:INT,NVARCHAR,BIT和DATETIME。

有些INT列作为HealthRating来存储一个值。

其他人喜欢拥抱许多物品的爱好...并且通常有一个额外的列来存储其他选项作为文本(nvarchar)......

我应该如何构建此表?我看到3个选项:

  1. 每个属性都有一列,所以:

    HealthRatingNoProblems位无null,  HealthRatingTemporaryChange位无空,

  2. 为HealthRatings,Hobbies,...创建查找表 可能我会以更多60张桌子结束......

  3. 使用Entity Framework现在支持的Enums和Flag枚举,并在我发布的Int列中存储一个选项和多个选项。

  4. 你会建议什么?

1 个答案:

答案 0 :(得分:0)

无论如何 - 请! - 规范那个糟糕的桌子。如果最终得到50或60个表,那就这样吧。那就是设计。如果用户有兴趣,那么该信息将在Hobby表中。如果他有三个爱好,那么Hobby表中会有三个条目。如果他没有任何爱好,那么Hobby表中就没有任何东西了。等等所有其他表格。

在所有那些时候,你只对爱好感兴趣,你只需要将Hobby表与Reports表一起使用,并将所有其他表单独留下。你不能用一个巨大的,包罗万象的行试图抓住一切。在那里,如果您只想查看业余爱好信息,您仍然需要阅读整行,带来您不想要的所有数据。为什么要读取您要丢弃的数据?