从零开始编写自己的C#框架(9)——数据库设计与创建
对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合;空间换性能;空间换开发效率;减少null异常......当然不同的公司与项目要求不同,初学者要学会适应不同的项目开发要求,使用本框架开发时,必须严格按照本章节的要求来设计数据库,不然可能会产生不可控的异常。
从零开始编写自己的C#框架
数据库设计规范
文件状态: [√] 草稿 [ ] 正式发布 [ ] 正在修改 |
文件标识: |
C#框架 |
当前版本: |
0.1 |
|
作 者: |
陈焕(AllEmpty) |
|
联系方式: |
1654937@qq.com |
|
更新日期: |
2014-04-26 |
版本/状态 |
作者 |
参与者 |
起止日期 |
备注 |
0.1 |
陈焕(AllEmpty) |
2014-04-26 |
创建 |
|
目 录
一、 文档介绍 3
1、文档目的 3
2、文档说明 3
3、读者对象 3
4、系统开发强度等级 3
5、使用工具 3
6、ExcelToSQLString2.91 for July软件介绍 3
二、 创建数据库 4
1、 数据表设计要求 4
2、 数据字典设计要求 4
3、 数据库存储过程创建规范 5
4、 生成SQL代码 5
一、文档介绍
1、文档目的
本文档是《从零开始编写自己的C#框架》项目后台管理系统的开发指引说明。
2、文档说明
本文主要讲述数据库设计的要求与规范,开发者必须严格按照本规范来设计,不然可能在开发中会产生不可控的异常。
本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合;空间换性能;空间换开发效率;减少null异常。
3、读者对象
本项目的开发人员。
4、系统开发强度等级
(强度分为:容易、中等、困难) 当前难度为:容易
5、使用工具
Excel + ExcelToSQLString2.91 for July软件。
6、ExcelToSQLString2.91 for July软件介绍
这个软件是我身边的大神July开发的,将指定格式的数据字典(Excel格式)转为SQL执行语句,减轻开发工作量。
经得July同意,现在无尝共享出来,后面代码中也会使用到大神开发的一些功能非常强大的函数或类,所以在这里也为他宣传一下,以对他无尝奉献的精神表示感谢。
July有十多年的开发经验,在我们的小圈子里的全能型开发人员(除了UI设计不会)。ASP、ASP.NET、PHP都有十年左右的开发经验,经手过的大中小型项目几十个(估计快上百个了),前后端(包括WinFrom开发各种进销存软件与应用、微信开发、WAP站开发)开发都非常擅长,非常精通前端切图、JS、CSS,在他手上没有解决不了的浏览器兼容问题。开发速度效率非常高,承接各种类型的外包开发。想联系他的话请加群327360708找July。
二、 创建数据库
1、 数据表设计要求
1. 数据库表名与字段名应遵守Pascal风格,包含一到多个单词,每一个单词第一个字母大写,其余字母均小写。(具体命名要求请查看第3章节)
2. 如果是关联表,则命名规则为R_表A_表B,如R_ProductInfo_Tag等。
4. 对于视图命名,规则为View_表A,视图由多个表产生,就用下划线连接几个表名,如View_ProductInfo_ProductClass。
5. 存储过程,命名规则为P_表名_存储过程功能名称。如P_ProductInfo_Add;如果该存储过程是很多表共用的,命名为:P_All_存储过程功能名称
6. 数据字段命名,也使用Pascal风格。当字段引用的是其他表字段时,使用表名_其他表字段名称,间用下划线隔开,命名规则:表名_单词。如ProductInfo表与ProductClass表关联的字段:ProductClass_Id,ProductClass_Name等。与外表的主键或相关字段引用时(包括状态值),须加同时添加外表所引用主键(或状态值)对应的名称,以方便查询时减少多表关联语句的编写,提高代码执行效率,详细请看《数据字典》中的设计。
2、 数据字典设计要求
必须使用附件中的Excel表并按里面设计格式来设计数据库(如下图)。
可能有的朋友会说,既然要按软件工程开发规范来做,为什么不用建模工具呢?
呃……其实对于中小型项目来说,我觉得不必要用建模工具来处理,那样很麻烦且更费时间,而使用本文介绍的工具,操作起来方便快捷,直接查看数据字典也很直观明了。
在设计字段名时,除了上面要求外,还有一些特殊的命名规则要求,这将会影响逻辑层生成的函数,当然有些函数如果名称与下面要求一致,而它却不是你想要的功能定义时,你可以忽略该生成函数,不去调用即可。具体如下:
1) 主键Id必须命名为“Id”,将会生成UpdateValue()函数,用来更新指定Id的记录;
2) 字段名包涵Name这个字串的,会生成GetXxxName()函数,可以直接读取该字段值;
3) 字段名包涵_Id这个字串的,会默认为该字段是外键Id,将会生成DeleteByXxx_Id()函数,用来删除当前表值为指定外键的所有记录;还会生成UpdateValue_For_Xxx_Id()函数,用来更新当前表值为指定外键的记录值;
4) 字段类型为tinyint的字段,会被默认为状态字段,会生成UpdateXxx()函数,用来更新该状态值;
5) 字段名包涵Key这个字串且该字段为string类型的,会生成GetModelByXxxKey()函数,主要功能是通过Key这个字段值来获取当前记录实体;
6) 字段名包涵Count这个字串且该字段为int型的,默认为访问计数字段,会生成UpdateXxxCount()函数,用来执行该字段值累加功能;
7) 字段名包涵Img这个字串且该字段为string类型的,默认为图片路径存储字段,会生成DeleteXxx函数,用来执行图片删除功能;
以上规则大家在开发中可以根据需要自己在T4模板中任意添加或修改,使用这种规则生成后,将会大大减轻开发人员的代码量与出错次数(主要减少重复代码的开发),提高开发效率。
另外单独说明一下《数据字典》中“上传管理”与“上传配置明细”这个工作表,它们是July开发的上传组件所要使用的相关配置表,只要配置好相要生成的图片大小与路径,那么就可以通过简单的调用得取想要的效果,在后面代码编辑章节会有详细例子介绍说明。
3、 数据库存储过程创建规范
在创建存储过程时,头部必须写上功能、创建人、创建日期及修改情况。存储过程主体必须写上清晰的注释说明。
例:
- ---------------------------------------------------------
- --功能说明:删除用户使用日志
- --操作历史
- ------操作 操作人 日期
- ------创建 Empty 2013-11-20
- ------修改
- ---------------------------------------------------------
- CREATE PROCEDURE [dbo].[P_Userlog_Delete]
- AS
- BEGIN
- --定义临时变量
- DECLARE @UseLogReserveTime INT
- --获取系统设置的操作日志保留日期
- SELECT TOP 1 @UseLogReserveTime = UseLogReserveTime FROM WebConfig
- --如果设置为无限制,则不执行删除程序
- IF @UseLogReserveTime <= 0
- RETURN 0
- --执行日志删除程序
- DELETE FROM UseLog WHERE DATEDIFF(d, AddDate, DATEADD(d, -@UseLogReserveTime, CONVERT(VARCHAR(10),GETDATE(),110))) >= 0
- END
4、 生成SQL代码
在数据字典(Excel表)里设计好数据库架构后,用ExcelToSQLString2.91生成相应的SQL代码,然后打开SQL查询分析器运行后生成相应的数据表。
在Excel表中设计好数据库架构,设置好主键与排序标识,生成的SQL语句就会自动创建对应的主键和绑定排序列。(主意事项:主键Id设计时,名称必须为Key、Id、表名 + Id或 表名 + _Id,不然使用SubSonic3.0插件时会出错)
打开ExcelToSQLString2.91软件
打开软件,选择《数据字典》文件路径,设置好要生成的表格名称,按图中的选项全部打好勾。
然后点击运行,生成对应的SQL语句。
将上面语句复制到SQL查询分析器中直接运行就可以了。
版权声明:
本文由AllEmpty原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如有问题,可以通过1654937@qq.com 联系我,非常感谢。
发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:327360708 ,大家一起探讨。
更多内容,敬请观注博客:http://www.cnblogs.com/EmptyFS/
从零开始编写自己的C#框架(9)——数据库设计与创建的更多相关文章
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- 从零开始编写自己的C#框架(25)——网站部署
导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...
- 从零开始编写自己的C#框架(1)——前言
记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种语言,也只能整天混在图收馆里拼命的啃书.而再后 ...
- 从零开始编写自己的C#框架(20)——框架异常处理及日志记录
最近很忙,杂事也多,所以开发本框架也是断断续续的,终于在前两天将前面设定的功能都基本完成了,剩下一些小功能遗漏的以后发现再补上.接下来的章节主要都是讲解在本框架的基础上进行开发的小巧. 本框架主要有四 ...
- 从零开始编写自己的C#框架(17)——Web层后端首页
后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显 ...
- 从零开始编写自己的C#框架(15)——Web层后端登陆功能
对于一个后端管理系统,最重要内容之一的就是登陆页了,无论是安全验证.用户在线记录.相关日志记录.单用户或多用户使用帐号控制等,都是在这个页面进行处理的. 1.在解决方案中创建一个Web项目,并将它设置 ...
- 从零开始编写自己的C#框架(11)——创建解决方案
这段时间一直在充电,拜读了园子中大神们的博文(wayfarer的<设计之道>.TerryLee的<.NET设计模式系列文章>.卡奴达摩的<设计模式>还有其他一些零散 ...
- 从零开始编写自己的C#框架(2)——开发前准备工作
没想到写了个前言就受到很多朋友的支持,大家的推荐就是我最大的动力(推荐得我热血沸腾,大家就用推荐来猛砸我吧O^-^O),谢谢大家支持. 其实框架开发大家都知道,不过要想写得通俗点,我个人觉得还是挺吃力 ...
- 从零开始编写自己的C#框架(8)——后台管理系统功能设计
还是老规矩先吐下槽,在规范的开发过程中,这个时候应该是编写总体设计(概要设计)的时候,不过对于中小型项目来说,过于规范的遵守软件工程,编写太多文档也会拉长进度,一般会将它与详细设计合并到一起来处理,所 ...
随机推荐
- Python操作Mysql数据库时SQL语句的格式问题
一.概述 近日使用Python对Mysql数据库进行操作,遇到SQL语句死活出问题的情况.由于最初没有将异常打印出来,一直不知道原因.随后,将异常打印出来之后,通过异常信息,对代码进行修改.最终,成功 ...
- 一鼓作气 博客--第一篇 note1
1. 语言的类型 ,编译型(c,c++),解释型(python,php,ruby,java),编译型可移植性差,优点是运行速度快,解释型语言特点:边执行边翻译,速度慢. 2.翻译官就是机器的解释器,跟 ...
- ASP.NET Core中显示自定义错误页面
在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白. 如果在 Startup.cs 的 Configure() 中加上 app. ...
- 轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)
在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类:文本消息.二进制消息. 文本协议相对简单,通常使用一个特殊的标记符作为一个消息的结束. 二进制协议,通常是由消息头(Head ...
- Net作业调度(二) -CrystalQuartz远程管理
Source Code-1.6M 介绍 上篇已经了解Quartz.NET的基本使用方法了.但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面. 本文介绍Qua ...
- 防刷票机制研究和.NET HttpRequest Proxy
最近应朋友之约 测试他做的投票网站 防刷票机制能力如何,下面有一些心得和体会. 朋友网站用PHP写的,走的是HttpRequest,他一开始认为IP认证应该就差不多了.但说实话这种很low,手动更换代 ...
- 关于printf错用格式化字符串导致double和long double输出错误的小随笔
[题外话] 以前用HUSTOJ给学校搭建Online Judge,所有的评测都是在Linux下进行的.后来为了好往学校服务器上部署,所以大家重新做了一套Online Judge,Web和Judge都是 ...
- Win7&Ubuntu12.04 双系统引导问题
周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述: 在重装 ...
- Functional Programming without Lambda - Part 2 Lifting, Functor, Monad
Lifting Now, let's review map from another perspective. map :: (T -> R) -> [T] -> [R] accep ...
- 跟我一起数据挖掘(21)——redis
什么是Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...