在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个选项:
每个属性都有一列,所以:
HealthRatingNoProblems位无null, HealthRatingTemporaryChange位无空,
为HealthRatings,Hobbies,...创建查找表 可能我会以更多60张桌子结束......
使用Entity Framework现在支持的Enums和Flag枚举,并在我发布的Int列中存储一个选项和多个选项。
你会建议什么?
答案 0 :(得分:0)
无论如何 - 请! - 规范那个糟糕的桌子。如果最终得到50或60个表,那就这样吧。那就是设计。如果用户有兴趣,那么该信息将在Hobby表中。如果他有三个爱好,那么Hobby表中会有三个条目。如果他没有任何爱好,那么Hobby表中就没有任何东西了。等等所有其他表格。
在所有那些时候,你只对爱好感兴趣,你只需要将Hobby表与Reports表一起使用,并将所有其他表单独留下。你不能用一个巨大的,包罗万象的行试图抓住一切。在那里,如果您只想查看业余爱好信息,您仍然需要阅读整行,带来您不想要的所有数据。为什么要读取您要丢弃的数据?