我在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
这样做的主要原因是有一个设置表而不是具有与类一样多的表,可能更容易进行类修改,更容易操作类之间的属性(如果有业务逻辑需要从一个类移动一个属性到另一个)
答案 0 :(得分:1)
将对象分解为ID和属性值对是有时非常有用的技术之一。 EAV数据管理要比具有单独列的平面表复杂得多,因此不能轻易实现。
考虑到你发布的内容,我可能不会。您所拥有的所有字段似乎都与作为联系人可靠相关,并且不太可能需要在生产中动态更改(因为一个人开始或停止接受文本消息,而不是提升到文本消息在认识上无关紧要的存在平面)。 / p>
即使将某些字段表示为成对是有意义的,我只会对这些字段执行此操作:使用主键和基本数据保留用户表,然后将其余字段放在具有外部字符的EAV表中与用户的关键。