优化数据库设计

                                       第一章 (E-R)图

实体可以是有形的事物,一个实体只描述一件事情。

映射基数:

1对1:X中的一个实体最多与Y中的一个实体关联。

1对多:X中的一个实体可以与Y中的任意数量的实体关联。

多对1:X中的一个实体最多与Y中的一个实体关联。

多对多:X中的一个实体可以与Y中的任意数量的实体关联。

图形:

矩形表示实体集。

椭圆形表示属性。

菱形表示联系集。

直线用来连接属性和实体集,也用来连接实体集和联系集。

范式:

第一范式:实现每列的数据不可以再分。

第二范式:目标:确保一张表只做一件事,实现:满足第一范式,其他列与主键都有关系。

第三范式:实现:满足第三范式,除主键外其他列都不传送依赖。

                                    第二章 (创建数据库和表,约束)

T-SQL语句构成
1.DML(数据库操作语言)
INSERT,UPATE,DELETE
2.DCL(数据控制语言)
3.DQL(数据查询语言)
4.DDL(数据定义语言)
CREATE DATABASE CREATE TABLE
创建数据库的步骤:
1、确定数据库
use master
2、判断数据库是否存在,若存在则删除数据库
if EXISTS(select * from sysdatabases where name=’数据库名’) DROP DATABASE 数据库名
3.创建数据库:
CREATE DATABASE 数据库名
ON RTMARY
(
--数据库主要文件参数
NAME=‘数据库主要文件逻辑名称’,
FILENAME=’数据库主要文件物理名称’,--路径
SIZE=数据库主要文件初始大小,
MAXSIZE=数据库文件最大值,
FILEGROWTH=数据库主要文件增长率
)
LOG ON
(
--数据库日志文件参数
NAME=‘数据库主要文件逻辑名称’,--名字后一般加个_log
FILENAME=’数据库主要文件物理名称’,
SIZE=数据库主要文件初始大小,
MAXSIZE=数据库文件最大值,
FILEGROWTH=数据库主要文件增长率

)

创建表的步骤:
1、确定数据库:
use 数据库名
2、判断数据表是否存在,若存在则删除数据表:
IF EXISTS(select * from sysobjects where name='数据表名')
DROP TABLE 数据表名
3、创建表:
CREATE TABLE 数据表名
(
列名1 数据类型 标识列 是否为空,-- studentNo int NOT NULL,不为空
IDENTITY(1,1)--标识种子,标识增量
列名2 数据类型 标识列 是否为空,-- studentNo int,为空
.....

)
创建数据表的约束:
use 数据库名
1.主键约束(不能为空)

ALTER TABLE 数据表名 [WITH NOCHECE] ADD
CONSTRAINT 主键名 PRIMARY KEY(列名)
(PK_表名)
[WITH NOCHECE]:可以省略,暂时不检查数据约束
2.唯一约束
ALTER TABLE 数据表名 ADD
CONSTRAINT 唯一约束名 UNIQUE(列名)
(UN_列名)
3.检查约束
ALTER TABLE 数据库名 ADD
CONSTRAINT 检查约束名 CHECK(表达式)
(CK_列名) (列名>=‘1980-1-1’)
4.默认值约束
ALTER TABLE 数据表名 ADD
CONSTRAINT 默认值约束名 DEFAULT(值) FOR 列名
(DF_列名)
5.外键约束
ALTER TABLE 数据表名 ADD
CONSTRAINT 外键约束名 FOREIGN KEY(列名) REFERENCES 主表名(列名)
(FK_子表名_主表名_主表上的列名)
删除约束:
ALTER TABLE 表名
DROP CONSTRAINT 约束名

                                        第三章(SQL编程)

T-SQL的变量
1、局部变量:
定义:由自己声明的变量。
形式:@变量名
应用:
1、声明:
DECLARE @变量名 数据类型
2、赋值:
1.SET方式赋值:
SET @变量名=值
SET @变量名=(Select 列名 from 表名 where 条件)
注意事项: 1.SET只能为一个变量赋值
2.SET赋值时,变量值只能是一个,若有多个变量将报错
2.SELECT方式赋值:
SELECT @变量名=值
SELECT @变量名=列名 from 表名 where 查询条件
注意事项:1.SELECT可以为多个变量赋值
2.SELECT赋值时,若变量值有多个,将赋于变量最后一个变量值
3.查询条件可以省略,一般不省略
4.赋值时,变量值为NULL,若变量之前的值是NULL,则变量被赋予NULL值
5.赋值时,变量值为NULL,若变量之前的值不是NULL,则变量将保持原有值
3、调用:
PRINT @变量名 --打印
2、全局变量
定义:由系统声明的变量,只能使用不能修改
形式:@@变量名
应用:
常用全局变量:
1.@@ERROR:最后一个T-SQL的错误号
2.@@IDENTITY:记录最后一次插入的标识值
3.
数据转换:CONVERT(nvarchar(10),列名,格式)
(100,101,111...)
CAST(表达式AS数据类型)
T-SQL逻辑控制:
1.顺序结构:
2.分支结构:
1)IF-ELSE选择结构:
语法:
IF(判断条件)
BEGIN
代码块1
END
ELSE
BEGIN
代码块2
END
2)CASE-WHEN结构:

3.循环结构:
1)WHILE循环结构:
语法:
WHILE(循环条件)
BEGIN
循环操作
END

                                  第四章(高级查询)

SELECT.........FROM 表1 WHERE 列1>(子查询)

一个查询里面嵌套另一个完整的查询语句

子查询还可以在多表间查询符合条件的数据,从而替换表连接(join)查询。

IN 和NOT IN子查询

IN(包含这个区间的)

NOT IN(包含这个区间以外的)

IF EXISTS(子查询)

语句

如果子查询的结果非空,则EXISTS(子查询)将返回真(true),否则返回假(false).

子查询可以指定表名

SELECT * FROM (子查询) AS 表的别名

                            第六章(事务,视图,索引)

事务:
属性:
原子性:
一致性:
隔离性:
永久性:
步骤:
1.开始事务
BEGIN TRANSACTION
2.业务处理,记录处理结果
3.判断处理结果
若处理结果为零,提交事务:
COMMIT TRANSACTION
若处理结果不为零,回滚事务:
rollback trnsaction
if(@num=0)
begin
commit transaction
end
else
begin
rollback trnsacition
end
分类:
1.显示事务

2.隐式事务
注意:将截断字符串或二进制数据(长度不够)
视图:
语法:
1.确定数据库
use 数据库名
2.判断视图是否存在,若存在则删除视图
IF EXISTS(select * from sysobjects where name='视图名')
DROP VIEW 视图名
GO
3.创建视图
CREATE VIEW 视图名
AS
--SQL查询语句
GO
4.使用视图:
可以重复使用的虚拟表
不能使用 order by,insert

索引:
类型
唯一索引

主键索引

聚集索引
数据逻辑位置与物理位置一致,一张表只有一个聚集索引
非聚集索引
数据逻辑位置不与物理位置一致,一张表有多个非聚集索引

                              第七章(存储过程)

存储过程
1.系统存储过程
由系统定义并实现,以sp_开头
2.扩展存储过程

3.用户自定义存储过程
由用户自定义并实现,以usp_开头

语法
1.确定数据库
use 数据库名
2.判断存储过程是否存在,若存在则删除
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE
NAME='存储过程名') DROP PROCEDURE 存储过程名
Go
3.创建存储过程
CREATE PROCEDURE 存储过程名
参数列表
(默认:=赋值)(OUTPUT:传出参数)
AS
--SQL语句S
4.调用存储过程
EXECUTE 存储过程名 参数列表
1.(按照参数的顺序依次赋值)
2.(指定参数名称给予参数赋值)
3.(以default关键字替代有默认值的参数)
4.(定义变量来接收传出参数,变量名 OUTPUT)

我是不会选择做一个普通人的,如果我能够做到的话,我有权成为一位不寻常的人,我寻找机会,但我不寻求安稳,我不希望在国家的照顾下,成为一名有保障的国民,那将被人瞧不起,而使我感到痛苦不堪,我要做有意义的冒险,我要梦想,我要创造,我要失败,我也要成功,我的天性是挺胸直立,骄傲而无所畏惧,我勇敢的面对这个世界,自豪的说:在上帝的帮助下,我已经做到了。
原文地址:https://www.cnblogs.com/xiongrui/p/4510353.html