进入BS学习牛腩新闻发布系统也有半个月了,还没有开始写点什么东西,针对前几集的知识翻看了一下笔记,下面就我认为重点的地方做下小结。前5集包括工具介绍、文档、数据库设计、界面设计这几块知识,6~8集则是关于SQLHELPER的讲解,这篇博客就针对这两块知识点进行总结。
针对前5集的设计,我想重点强调下数据库的设计,在当时自己做机房重构的时候,对于数据库的运用,开始按照自己的ER图来设计数据库,按照数据库的预设字段进行程序的设计,但是到最后还是在数据库中做了比较大的改动,而且我的好几张表里的主键也删掉了,表与表之间的主外键也是加了删删了再加,不好。
如下图所示:
这是在第三集“编写数据库”里进行的数据库设计,category表中的id充当news表中的外键,news表中的id充当comment表的外键,就这样把三张表联系起来,而这样做的好处就在于,直接删除news表中的id字段是不能实现的,因为他充当了其他表的外键,通过这样的约束,就能够避免因为误删数据表中相关信息而使得系统功能瘫痪。联想到当初的机房收费系统,对于Card_Info表,将其中的CardNo字段设置为OnLine_Info、Recharge_Info、Cancelcard_Info表的外键,将会使得系统更加稳定,当初没有通过这样在数据库中加约束的设计,学习了牛腩,这一点在之后的数据库设计中会用到实处,当然包括相关的其他约束。
当然,解决上面因主外键约束而不能删除相关字段的问题,有一个方法就是通过级联删除,创建级联删除的语句,创建外键的时候.在删除主记录的时候删除对应外键的明细,针对这一点,会单独通过一篇博客进行说明总结。
这一点是在6~9集中讲解的,也是从这三集,感觉视频的含金量提升了。
首先说明,这三集里所讲的知识点,在做CS项目机房收费系统重构的时候都遇到了,这次通过BS视频的学习,对于之前的理解起到更加加深一步的作用。
下面从两个方面进行介绍:
1、 深入理解SQLhelper
机房验收之后,其实我对于SQLHELPER这块还是比较糊涂的,糊涂的不是D层与sqlhelper之间的关系,也不是sqlhelper的作用,而是其中的与数据库相关联的代码的理解,比如sqlcommand、sqlconnection、dataset这些鬼东西究竟是什么?感觉没有头绪,但是看大家的博客浅显的理解之后也就过了,到了这次没有放过他。
简单的说就是对“连接—打开---数据库操作----关闭---返回值”这个过程进行的优化,通过将单条线的操作加入面向对象的思想之后减轻代码以及CPU的负担。
关于ADO.NET的相关总结我不打算放到这里,发一张从博客园里看的图片,我准备过了考试写一个ADO与ADO.NET的系列博客,到时候再逐语句进行介绍。2、优化sqlhelper
看这段代码:
//将conn cmd sdr 设置为变量,节省资源 private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; //初始化过程写在构造函数里 public SqlHelper() { //数据库连接字符串,通过配置文件获取与 String connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //实例化一个连接 conn = new SqlConnection(connStr); }
起初不太理解,这样设计的原理,和周坤交流之后,还是一个系统使用效率的问题,变量先声明,暂不分配内存,每次用到它的时候分配内存,真正做到了从CPU的角度去思考编程。
同时,将每个方法中都会有的东西写到构造函数中,也是这个道理,之前感觉sqlhelper就是对D层代码进行了封装,学习了这个之后,又对于sqlhelper进行了一次优化,思想一直在进步。
这段时间正好赶上专业课复习,计算机的进度有点慢了,好几天前的知识点有点遗忘,通过这次的总结,算是对旧知识进行梳理。