摘要: 简介 数据库范式在数据库设计中的地位一直很暧昧,教科书中对于数据库范式倒是都给出了学术性的定义,但实际应用中范式的应用却不甚乐观,这篇文章会用简单的语言和一个简单的数据库DEMO将一个不符合范式的数据库一步步从第一范式实现到第四范式。范式的目标 应用数据库范式可以带来许多好处,但是最重要的好处归结为三点: 1.减少数据冗余(这是最主要的好处,其他好处都是由此而附带的) 2.消除异常(插入异常,更新异常,删除异常) 3.让数据组织的更加和谐… 但剑是双刃的,应用数据库范式同样也会带来弊端,这会在文章后面说到。什么是范式 简单的说,范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好的组织 阅读全文
posted @ 2012-04-01 16:16 欢喜王子 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 引言 SQL有着非常强大且灵活的查询方式,而多表连接操作往往也可以用子查询进行替代,本篇文章将会讲述子查询的方方面面。简介 子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句,在子查询中,只有下面几个子句可以使用SELECT子句(必须)FROM子句(必选)WHERE子句(可选)GROUP BY(可选)HAVING(可选)ORDER BY(只有在TOP关键字被使用时才可用) 子查询也可以嵌套在其他子查询中,这个嵌套最多可达32层。子查询也叫内部查询(Inner query)或者内部选择(Inner Select),而包含子查询的查询语 阅读全文
posted @ 2012-04-01 15:54 欢喜王子 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 引言 在前两篇文章中,对于单表查询和多表查询的概念做出了详细的介绍,在本篇文章中会主要介绍聚合函数的使用和数据的分组.简介 简单的说,聚合函数是按照一定的规则将多行(Row)数据汇总成一行的函数。对数据进行汇总前,还可以按照特定的列(column)将数据进行分组(Group by)再汇总,然后按照再次给定的条件进行筛选(Having). 聚合函数将多行数据进行汇总的概念可以简单用下图解释: 简单聚合函数 简单聚合函数是那些拥有很直观将多行(Row)汇总为一行(Row)计算规则的函数。这些函数往往从函数名本身就可以猜测出函数的作用,而这些函数的参数都是数字类型的。简单聚合函数包括:Avg,Sum 阅读全文
posted @ 2012-04-01 15:52 欢喜王子 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 引言 在前篇文章中(SQL查询入门(上篇),我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路。多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。 因此,连接(Join)就是一种把多个表连接成一个表的重要手段. 比如简单两个表连接学生表(Student)和班级(Class)表,如图: 进行连接后如图: 笛卡尔积 笛卡尔积在SQL中的实现方式既是交叉连接(Cros. 阅读全文
posted @ 2012-04-01 15:51 欢喜王子 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 引言 SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句。但对于大多数开发者来说,使用SQL查询数据库并没有一个抽象 的过程和一个合理的步骤,这很可能会使在写一些特定的SQL查询语句来解决特定问题时被”卡”住,本系列文章主要讲述SQL查询时一些基本的理论,以及写 查询语句的抽象思路。SQL查询简介 SQL语言起源于1970年E.J.Codd发表的关系数据库理论,所以SQL是为关系数据库服务的。而对于SQL查询,是指从数据库中取得数据的子集,这句话貌似听着有些晦涩是吧,下面通过几张图片简单说明一下: 假如一个数据库中只有一个表,再假如所有数据如下图(取自Adve 阅读全文
posted @ 2012-04-01 15:50 欢喜王子 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata. 视图简单的理解如下: 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。为什么要使用视图(View) 从而我们不难发现,使用视图将会得到如下好处: 视图隐藏了底层的表结构,简化了数据访问操作 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性 视.. 阅读全文
posted @ 2012-04-01 15:38 欢喜王子 阅读(169) 评论(0) 推荐(1) 编辑
摘要: 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能。但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知 识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过。所以本文并不会深入讨论这些主题。索引是什么 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 精简来说,索引是一种结构.在SQL Server中,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是 阅读全文
posted @ 2012-04-01 13:57 欢喜王子 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 〇、 前言最近两天自己写了个简单的ORM框架,非常的Easy,但是没有相应的代码生成工具,于是就很杯具了!于是乎,花费了一天的时间学习并写了一个CodeSmith可以使用的模板。在此记录下CodeSmith的学习笔记。所用工具: CodeSmith Professional v5.1.3.8510,代码示例全部是以C#为例。一、 工具设置CodeSmith默认是不支持中文的,那么我们必须要先设置使其支持中文显示,保存。并且要能够在生成文件中支持中文。[Tools->Options...->Studio->Editor->Enable unicode]将这个选项勾上,那么 阅读全文
posted @ 2012-04-01 11:50 欢喜王子 阅读(240) 评论(0) 推荐(0) 编辑
摘要: “努力学习的熊”CodeSmith基础系列:1.CodeSmith基础(一)2.CodeSmith基础(二)3.CodeSmith基础(三)4.CodeSmith基础(四)5.CodeSmith基础(五)6.CodeSmith基础(六)7.CodeSmith基础(七)8.CodeSmith基础(八)“Terrylee”CodeSmith实用技巧系列:1.CodeSmith实用技巧(一):使用StringCollection2.CodeSmith实用技巧(二):使用FileNameEditor3.CodeSmith实用技巧(三):使用FileDialogAttribute4.CodeSmith实 阅读全文
posted @ 2012-04-01 11:44 欢喜王子 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦.下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做一个简单的Demo,并不详细的讲解CodeSmith各个强大的功能,有兴趣的朋友可以打开CodeSmith的帮助文档了解.我只做个抛砖引玉,希望能激起大家更多思想的火花~先看看CodeSmith的工作原理:简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代模板的动态变量,最终输出并保存为我 阅读全文
posted @ 2012-04-01 11:37 欢喜王子 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 开始我们的CodeSmith旅程吧,我先讲讲这个系列教程要完成的目标吧,众所周知,CodeSmith其中一个强大的功能就是依照模板生成批量代码,这也是吸引着众多编程人士使用它的原因,它大大的节约了编程时间,省去了大量复制粘贴的废操作.首先,既然要讲解如何使用CodeSmith和PowerDesigner快速生成批量代码,当然要先安装这2个软件啦,下面就简单说说如何安装破 解这2款软件吧,当然破解只是学习之用,请大家不要用于商业用途哈,要支持正版,大家都是做软件的,知道开发一套软件实属不易啊.CodeSmith安装方法: 1). 点击下载安装文件 2). 运行,安装步骤就不说了,选择你... 阅读全文
posted @ 2012-04-01 11:35 欢喜王子 阅读(334) 评论(0) 推荐(0) 编辑
摘要: namespace Bll{ public class empBll { IDAL.empDal itu = DALFactory.emp_Factory.Createusers(); //=new IDAL.empDal()行吗?这样有什么好处? public DataTable GetAll() { return itu.GetAll(); }}namespace IDAL{ public interface empDal { DataTable GetAll(); ... 阅读全文
posted @ 2012-04-01 10:10 欢喜王子 阅读(324) 评论(0) 推荐(0) 编辑