菜鸟也能飞:SQL数据库实战专业教程(二)

  • 时间:
  • 浏览:5

  create table当然什儿 什儿 建表的意思了,在表名前最好加另有俩个“t_”,表示是表(table),原先容易区分,为甚让 专业。括号里的什儿 什儿 什儿 表中的字段,格式是: 字段名类型 约束,注意每个字段写原先边也有加逗号(最后另有俩个就不必加啦),表示分隔。举什儿 例子,约束用的还是比较全的,重点一段话约束。约束原先数据库中相当重要的 东西,它保证了数据库的安全和稳定,同時 也保证了数据完全性。约束主要有6种,分别是:NOT NULL约束(非空约束)、PRIMARY KEY约束(主键约束)、FOREIGN KEY约束(外键约束)、UNIQUE约束(唯一约束)、CHECK约束(检查约束)、DEFAULT约束(默认值约束)。什儿 约束可不也能 用在任何字段的后 边,另有俩个字段也可不也能 有多个约束,用空格分隔即可,比如顶端的sex字段,就同時 使用了非空约束和检查约束。当然,什儿 约束非要用一次,比如主键约束。我只 是提了一下什儿 常用约束,亲戚朋友了解我的目的就达到了,原先具体用到,再去google,就怕你问你有什儿 约束。在查询分析器中执行这段代码,表就建立好 了,提示一下:SQL查询分析器可不也能 选中执行,也什儿 什儿 你选中什儿 代码就执行什儿 代码,建表的原先注意太大再次执行建数据库的一段话哦。

   --指定数据库

   use t_studentManager;

  五、优化数据库。

   --指定数据库

   use t_studentManager;

   --创建班级表

   create table t_class

   (

   id bigint IDENTITY(1,1) PRIMARY KEY,

   gradeID bigint NOT NULL,

   [name] varchar(10) NOT NULL,

   CONSTRAINT FK_class_gradeID FOREIGN KEY(gradeID) REFERENCES t_grade(id) --外键约束

   );

  优化数据库,真难了解数据库设计三范式,简单说下:

   根据需求分析亲戚朋友就可不也能 设计数据库了,非常“简单”嘛,须要另有俩个表就行了,把它命名为student表,顶端再加原先提的什儿 字段就可不也能 了。注意,数据 库中的一切,包括:数据库名、表名、字段名、存储过程等等,也有用英文,不可不也能 出現中文,肯能咱是专业菜鸟,不走业余路。接着往下看,教你如可创建数据 库。

   --创建数据库

   create database studentManager;

   --创建年级表

   create table t_grade

   (

   id bigint IDENTITY(1,1) PRIMARY KEY,

   [name] varchar(10) NOT NULL

   );

  第一步先创建数据库,我先把创建数据库的标准格式给亲戚朋友:

  这段代码,我还是要重点一段话约束,与上一次创建表不同的是,不仅仅是表多了,为甚让 最后多了外键约束,CONSTRAINT是创建另有俩个约束,顶端 接约束名;FOREIGN KEY代表该约束是外键约束,括号里写字段名,代表什儿 字段是外键;REFERENCES是参考的意思,也什儿 什儿 参考哪个表里的哪个字段,也什儿 什儿 主键在哪, 顶端接"表名(字段名)"。其实我是故意把它写在最后的边的,外键约束也是约束,完全可不也能 放入字段定义的最顶端,也什儿 什儿 NOT NULL那个位置上,我原先写是想告诉亲戚朋友还有另四种 生活写法,所有的约束都可不也能 什儿 原先写,什儿 什儿 换个位置,我现在提出来正确处理亲戚朋友原先见到发蒙。须要注意的 是,创建表的括号里,无论是写约束还是写字段,也有用逗号分隔,千万别忘了。

  作为专业教程,俺不必教你用鼠标建立数据库,咱们要用T-SQL一段话建立数据库,也什儿 什儿 写数据库脚本。原先建立数据库,离米 留了个备份,无论到哪,假若有SQL环境,直接执行一下脚本数据就建好了,非常方便快捷,就算不算第一次写脚本,也比用鼠标建立数据库快。在大型系统开发时,脚本还可不也能 作为数据库维护的土最好的法律法律依据,非常有用。真难 如可写呢,打开SQL server 10005 Management Studio,输入帐号密码登录平台,为甚让 点一下左上角的"新建查询"就可不也能 打开查询分析器了,亲戚朋友可不也能 在这输入任何SQL一段话。

====================================分割线================================

   --创建t_student表

   create table t_student

   (

   number varchar(20) PRIMARY KEY, --PRIMARY KEY 是主键约束

   classID bigint NOT NULL,

   [name] varchar(20) NOT NULL, --name属于sql保留字,什儿 什儿 用方括号括起来

   sex varchar(1) NOT NULL CHECK(sex in ('男','女')), --CHECK约束,意思是性别字段非就说 男或女。

   age int NOT NULL,

   remark varchar(1000),

   addTime datetime DEFAULT(getdate()),--默认值约束,getdate()获取服务器时间

   CONSTRAINT FK_student_classID FOREIGN KEY(classID) REFERENCES t_class(id) --外键约束

   );

  3、第三范式:第三范式须要确保数据表中的每一列数据都和主键直接相关,而非要间接相关。

  数据库设计是应用程序的根基,也是一门艺术。上一节亲戚朋友设计的数据库,太随意了,什儿 都真难 考虑,作为专业菜鸟,原先是不行的。

四、需求分析→数据库设计

 通过UML类图,清晰的描述了表之间的关系。什儿 什儿 ,在大型项目开发中,须要借助工具设计数据库,展示数据库的实物和关系,原先亲戚朋友也能优化、改进 数据库,数据库也有一下就能设计成功的,往往要根据需求的理解而发生变动。什儿 什儿 童鞋肯能会问为什儿 用实体类,我只说一段话:用实体类便于在应用程序中对数据库 进行操作,实体类是对数据的打包,便于数据传递。剩下的就要去google啦~太大说。这下亲戚朋友的数据库设计算不算完工了,删掉原先的数据库,对照这UML 实体类图写优化后的数据库脚本,代码如下:

最新内容请见作者的GitHub页:http://qaseven.github.io/

  这另有俩个范式大致的意思什儿 什儿 :数据库中表的职责要单一,依赖关系明确,尽量减少数据库数据冗余。从网上查,可不也能 查到什儿 什儿 另一方理解,我在这什儿 什儿 理解 了,核心思想什儿 什儿 我原先说的。我首先声明,三范式什儿 什儿 另有俩个整体的指导思想,太大肯能完全遵从,有原先数据冗余不假若坏事,要考虑实际情形。

  相信看着什儿 什儿 这所另一本人都蒙了,简单说一下,其实真难 多代码,也就第一句最重要,意思是创建另有俩个名字叫studentManager的数据库。On primary下边的是对数据库的什儿 初始设置,比如:路径、初始大小、增量等等。Log on下边的是对数据库日志的 设置,也是真难 几项。很明确的告诉亲戚朋友,除非是特殊需求,为甚让 亲戚朋友没必要管真难 多,默认的就够咱们用了,创建数据库就一段话:create database studentManager,输入原先点一下工具栏上的“执行”,就甩掉啦。数据库建完了,就该在数据库里建表了,还是先给出代码:

  在讲代码原先,须要先说什儿 是外键约束,外键约束什儿 什儿 :A表的某个字段用到了B表的主键字段,真难 A表中的什儿 字段就叫外键,A、B另有俩个表间的 约束关系就叫外键约束。A表的外键字段须要依赖于B表的主键字段,肯能向A表外键字段中再加另有俩个B表主键字段中不发生的数据,真难 将失败。外键约束保证了 数据的完全性和合理性。

   --创建t_student表

   create table t_student

   (

   number varchar(20) PRIMARY KEY, --PRIMARY KEY 是主键约束

   grade varchar(10) NOT NULL, --NOT NULL是非空约束

   class varchar(10) NOT NULL,

   [name] varchar(20) NOT NULL, --name属于sql保留字,什儿 什儿 用方括号括起来

   sex varchar(1) NOT NULL CHECK(sex in ('男','女')), --CHECK约束,意思是性别字段非就说 男或女。

   age int NOT NULL,

   remark varchar(1000),

   addTime datetime DEFAULT(getdate())--默认值约束,getdate()获取服务器时间

   );

给亲戚朋友解释一下,原先亲戚朋友创建完数据库,在这要引用一下,也什儿 什儿 use,原先才可不也能 在指定数据库中建表。

  2、第二范式:第二范式须要确保数据库表中的每一列都和主键相关,而非要只与主键的某一部分相关(主要针对联合主键而言)。

  1、第一范式:是指数据库表的每一列也有不可分割的基本数据项,同一列中非要有多个值,即实体中的某个属性非要有多个值肯可不也能 有重复的属性。

  很明显,原先亲戚朋友设计的数据库不符合三范式的要求。在此表中学生应该依赖的是学号,而亲戚朋友冒昧的把班级、年级也放入了这里,学生当然也应该依赖 于班级、年级。原先一来,表就乱了,造成的直接后果什儿 什儿 数据不完全,比如亲戚朋友肯能失误,插入了另有俩个年级是1000的学生,而根本就真难 1000什儿 班级。原先 还有个比较大的什儿 的什么的问题什儿 什儿 数据冗余,肯能亲戚朋友每插入另有俩个学生,不得不记录一次班级、年级,造成一定量无用数据。什儿 什儿 亲戚朋友要改,要把另有俩个表拆成另有俩个,分别是:年 级表、班级表、学生表。原先一来,数据库就显得漂亮多了。原先是另有俩个表,亲戚朋友还应付得过来,现在另有俩个表,记不住了为甚么办?别急,原先提到了UML图,它可 以用来设计数据库。在应用程序设计过程中,数据库中的每另有俩个表,后要在应用程序中映射成另有俩个类,而表中的每另有俩个字段,也有类中的另有俩个属性,它们的类型是一致的,我 们管他叫做实体类(可不也能 提前google一下三层架构哦),这时亲戚朋友可不也能 借能够UML中的类图画出数据库的实物。如下图:

  从这结束了英语 ,就真正进入项目实战啦。先说点体会,我结束了英语 英语 接触编程的原先,也有编写什儿 小东西,往往也有半天肯能一天什儿 的就编完了,那原先根本没想过做应用程序原先须要有需求分析。经过快两年的学习, 接触的也有比较大的系统,才明白真难 需求分析的应用程序都太业余了,真难 任何技术含量。对于另有俩个系统来说,肯能需求分析非要位,真难 将有灾难性的后果,从这节 的小标题就能看出,需求是数据库设计的基石,需求定了,数据库基本上就定了,数据库定了,应用程序的基本功能也就定了。亲戚朋友以另有俩个简单的学生管理系统为例子, 来分析一下需求。分析需求地球人一般也有用UML图,啥是UML图呢,什儿 什儿 四种 生活把应用程序用图形表示的标准,它可不也能 表示需求、应用程序流程、应用程序模块、应用程序功能等 等,可不也能 说,UML图画完了,应用程序基本上就出来了,目前比较好的画UML的工具是Rational rose,太大说啦,剩下的就交给google了。本系统的需求非常简单,什儿 什儿 老师可不也能 再加、删除、修改学生记录,学生的记录包括:学号、年级、班级、姓名、性别、年龄、备注(什儿 什儿 什儿 字段)。根据什儿 叙述,亲戚朋友可不也能 画出UML用例图(用例图什儿 什儿 用来分析需求的):