如何存储数据
CZ
匠友们,请教一个细节问题:
在一张表里,有一个字段"图件类型",包括 "平面图,柱状图,统计图",我现在是将该字段设计为 varchar 类型,直接存放类型名称。
现在有同事建议,应该设计为interger类型,然后定义一个枚举变量,
enum MapType
{
AllMapType=0,
Plane=1,
Histogram,
Cartogram
};
理由是,
1)这样查询的效率高。
2)避免使用字符串比较(其实没有避免)。
我觉得他说得有些道理,
但是,这样编码时就多了一层无谓的转换:因为界面上显示是类型名称,每次写入时需要将类型名称转换为代码(即对应的枚举变量),读出来时要将代码转换为类型名称。
第一次做数据库的东西,不知道大家在实际中遇到这类问题时是怎么处理的?
STST
不要从"如何存"开始考虑,要从"如何用"开始考虑
先把高层的概念,类型整理好,最后考虑怎么把这些概念存到数据库
这是面向对象的设计方法
如果用面向过程的设计,当然可以先考虑如何存
"如何存"只是一个最具体的细节罢了
在往数据库里存之前,最好用平面文件先实现一边
CZ
STST
这样可以确保你的概念分层很清晰
确保从平面文件转到数据库的过程很平滑,那么你的整个设计就是比较好的了
CZ
好像之前听过这样的说法
但是一般不都是先把数据库设计好然后就直接写代码吗?
STST
恩,当然是书上的,我只能说书上的,我只是一个读者,复读机罢了
CZ
@怀化-英界尔-C 读了后能理解,就已经很牛了。很多书我通常是读不下去。以前也很少接触数据库。
STST
从OOD的视角来看,UI和Data都不是面向对象的,为了不让这两层污染我们的OOD设计,就出现了两个专门的隔离层,一个就是ORM,一个就是MVC,这样我们在这两个隔离层之间可以自由使用OOD的各种设计方式