【发布时间】:2017-02-04 18:34:35
【问题描述】:
我正在用 c# 做这个项目,在设计数据库时,我使用的规则是每个类基本上都是 sql 表(至少是必须持久化的类)。
由于某些类纯粹用于定义业务设置,而且这些类相当扁平,所以我很好奇做这样的事情是否有意义..
改造业务层类
class Contact
{
public string Name {get;set;}
public string PhoneNumber {get;set;}
public bool AcceptsTextMessages {get;set;}
public bool AllowedHoursForTextMessagesStart {get;set;}
public bool AllowedHoursForTextMessagesEnd {get;set;}
public List<DayOfWeek> SendMessagesOnlyOnWorkdays {get;set;}
}
到一个看起来像的数据层类(并将其保存在 sql 中)
public Settings
{
public ID {get;set}
public Name {get;set}
public Value {get;set;}
}
现实生活中的数据
ID Name Value
1 Name John Doe
2 PhoneNumber 01234657
3 ExceptsTextMessages true
4 AllowedHoursForTextMessagesStart 0
5 AllowedHoursForTextMessagesEnd 24
6 SendMessagesOnlyOnDays 1,2,3,4,5
这样做的主要原因是有一个设置表而不是像类一样多的表,可能更容易修改类,更容易在类之间操作属性(以防业务逻辑需要从一个类中移动一个属性给另一个)
【问题讨论】:
-
考虑到不同的用户可能有不同的设置,第一种方法可能更容易实现。当表的列太多或列本身因实体而异时,您真的只想使用第二种方法(正式称为实体属性值,EAV)。
标签: c# sql database database-design