zoukankan      html  css  js  c++  java
  • 优化数据库设计

                                           第一章 (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)

    我是不会选择做一个普通人的,如果我能够做到的话,我有权成为一位不寻常的人,我寻找机会,但我不寻求安稳,我不希望在国家的照顾下,成为一名有保障的国民,那将被人瞧不起,而使我感到痛苦不堪,我要做有意义的冒险,我要梦想,我要创造,我要失败,我也要成功,我的天性是挺胸直立,骄傲而无所畏惧,我勇敢的面对这个世界,自豪的说:在上帝的帮助下,我已经做到了。
  • 相关阅读:
    caffe for python (官方翻译)
    实验三、页式地址重定位模拟
    实验二、银行家算法
    实验一:进程调度实验
    植物大战僵尸作弊器源代码(MFC版)
    植物大战僵尸作弊器源代码(控制台版)
    CE寻找游戏基址
    植物大战僵尸内存地址(转)
    Detour的简单使用
    C/S模型之命名管道
  • 原文地址:https://www.cnblogs.com/xiongrui/p/4510353.html
Copyright © 2011-2022 走看看