码迷,mamicode.com
首页 > 移动开发 > 详细

02-大鸭梨博客系统数据库设计及Dapper的使用

时间:2017-03-12 23:47:07      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:ati   完整   use   font   数据库   values   编译   类别   arp   

  毫无疑问,数据库的设计在一个系统中起了至关重要的作用。我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计。构建一个完善的系统需要这两个阶段的充分考量、周密设计、合理联接以及密切配合。数据库设计是整个系统的根基,它关乎系统功能的实现、稳定性、扩展性等多个方面,可见数据库设计的重要性。

  那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点:

1、充分体现系统的需求

  不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业务需求。

2、保证数据的准确性和一致性

  在数据库设计时通过主外键、非空、限制、唯一索引等保证数据的健壮。

3、提高数据的查询效率

  一个好的系统要做到流畅,信息化的作用就是要提高人们 生产力,提高效率,所以一定要保证系统的的运行效率,减少用户的等待时间,要通过合理的表结构,安排物理存储分区,增加索引等方式,提高数据的读取效率。

4、良好的扩展性

  一个好的产品往往会不断的进行扩展升级,以适应不断更新的业务需求,但凡要扩展业务,必定首先涉及数据库的扩展,在数据库设计时,务必要遵循数据库设计规范,我们通常将数据库的规范到第三范式就可以了,所有的物理模型尽量达到范式要求,扩展时的原则就是尽量不要去改动原来的表结构,一旦涉及到原来的表结构,就会出现代码重写的危险。

  关于数据库设计的规范,每一点我们都不容忽视,规范的约定,字段规范,表结构规范以及使用的规范,包括表的命名、字段的命名等等,这些都会为未来的系统的开发造成很大的影响。下面我针对这个简单的博客系统,进行数据库设计,其中不免会有不合理的地方,请大家批评指正,当然设计可能不会太完善,只实现基本功能。

  平时我们使用的数据库设计工具一般有两个,一个是PowerDesigner,另一个是ERStudio,我个人习惯使用ERStudio,各有各的优势吧,我也只是习惯使用ERStudio而已,无需计较,看个人习惯。

  再次强调,我这里的数据库设计并不是一个完整的博客系统的设计,只为了实现部分的博客的功能而设计,甚至目前数据库设计中所涉及的不一定会全部开发,我们先看下逻辑数据模型,分为两部分,一部分是关于系统用户,另一部分是关于博客内容

技术分享

 

结构比较简单,无需多讲了吧,下面是博客的相关表:

技术分享

  简单说以下关于博客的相关表,首先有博客的类别,有标签,这些我们应该很熟悉了,再就是博客的内容,收藏的博客,以及浏览的博客,我们都知道关于一篇博客,其他人可以对这篇博客进行评论,也可以对别人的评论进行回复,素以在评论回复这张表里呢,被回复的ID,可能是博客的ID,也可能是别人评论的ID,与回复类型相对应,1为博客评论,2为评论回复。回复状态为是否删除。各表之间的关系应该比较简单,不多说了吧。另外再说明下,在这个博客系统中,我只实现博客的增删改查功能,其他的以后有时间再做,其目的主要是,学习.net跨平台。

  已经数据库脚本以及设计放到了github上,下面我们看下Dapper的使用,主要就是数据库的连接以及增删改查,就跟我们平时用的Ado.net类似。那么Dapper到底是什么呢,Dapper一个轻量级的ORM框架,我们在项目中添加Dapper,放到我们的Service层,在这个项目中就是数据访问层了,我们一样通过Nuget包来引入它,技术分享可以看到它的解释,A high performance Micro-ORM,一个高效率可执行的轻量级的ORM框架,我们直接点击Install安装即可。安装完成以后,我们来测试下看如何使用Dapper在项目中操作数据库,我创建一个数据库操作类,以博客的类别表为例:BlogCategService.cs,在此之前先创建一个公共的连接类,即获取我们的数据库连接字符串,注意Dapper是可以支持多种数据库的,我们还是以Sql Server为例,进行操作,创建获取数据库连接的类ConnectionFactory.cs,

 

/// <summary>
/// 获取Sql Server数据库连接
/// </summary>
/// <returns></returns>
public static DbConnection GetOpenSqlConnection()
{
     var conn = new SqlConnection("server=.;uid=sa;pwd=666666;database=DayaliBlogDB");
     conn.Open();
     return conn;
 }


下面我们在BlogCategService类中添加数据插入的方法Insert,代码如下:

 

 

/// <summary>
/// 插入博客类别
/// </summary>
/// <returns>插入的博客类别ID</returns>
public int InsertCateg()
{
    using (var conn = ConnentionFactory.GetOpenSqlConnection())
    {
        var resId = conn.Query<int>(@"INSERT INTO [dbo].[T_BLOG_CATELOG](CatelogName,CreateUser,UpdateUser) VALUES (@CatelogName,@CreateUser,@UpdateUser);" +
            " SELECT  @@IDENTITY",new { CatelogName = "Linux", CreateUser = 1, UpdateUser = 1}).First();
        return resId;
    }
}

 

 

操作类创建完成以后,我们在Web项目中引用我们的Model层和Service层技术分享

在Web层创建一个测试的控制器调用我们刚刚创建的插入博客大类的方法,TestController.cs

技术分享

然后运行我们的Web应用程序,

技术分享Ok,我们的测试成功了!我们把这个插入的方法再进行修改,增加传参,也就是我们要插入的数据类,首先我们在Model层添加我们的博客类的实体,我这边都均已创建完成了,我们直接修改方法,不要在Service层添加对Model的引用,修改插入方法如下:

public int InsertCateg(T_BLOG_CATELOG categry)
{
    using (var conn = ConnentionFactory.GetOpenSqlConnection())
    {
        var resId = conn.Query<int>(@"INSERT INTO [dbo].[T_BLOG_CATELOG](CatelogName,CreateUser,UpdateUser) VALUES (@CatelogName,@CreateUser,@UpdateUser);" +
            " SELECT  @@IDENTITY",categry).First();
        return resId;
    }
}

 

然后修改我们的控制器里面方法,改为传参,不多说了,直接编译通过:

技术分享技术分享

再就是查询、修改、删除的方法了,博客里面就不再提了,有点浪费时间,我会整理完后提交代码。

  这篇博客就写这么多内容。晚安!又要开始新的一周!!!Fighting!!!

02-大鸭梨博客系统数据库设计及Dapper的使用

标签:ati   完整   use   font   数据库   values   编译   类别   arp   

原文地址:http://www.cnblogs.com/Allen0910/p/6539498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!