将类作为设置项存储在sql中是一个好主意吗?

时间:2017-02-04 18:34:36

标签: c# sql database database-design

我在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

这样做的主要原因是有一个设置表而不是具有与类一样多的表,可能更容易进行类修改,更容易操作类之间的属性(如果有业务逻辑需要从一个类移动一个属性到另一个)

1 个答案:

答案 0 :(得分:1)

将对象分解为ID和属性值对是有时非常有用的技术之一。 EAV数据管理要比具有单独列的平面表复杂得多,因此不能轻易实现。

考虑到你发布的内容,我可能不会。您所拥有的所有字段似乎都与作为联系人可靠相关,并且不太可能需要在生产中动态更改(因为一个人开始或停止接受文本消息,而不是提升到文本消息在认识上无关紧要的存在平面)。 / p>

即使将某些字段表示为成对是有意义的,我只会对这些字段执行此操作:使用主键和基本数据保留用户表,然后将其余字段放在具有外部字符的EAV表中与用户的关键。