• 数据库设计==>>MySchool


    1.数据库设计的步骤

    第一步:需求分析(收集信息)

    第二步:绘制 E-R 图 (标示实体 ,找到实体的属性

    第三步:将 E-R 图转换成数据库模型图

    第四步:将数据库模型图转换成数据表

    2.如何绘制 E-R 图
    矩形:实体
    椭圆形:属性
    菱形:关系

    3.如何绘制数据库模型图
    PowerDesigner :选择 PhysicalModel
    如有有人不小心关掉了 Platter,对工具栏点击右键,勾选 Platter 即可。
    当我们将数据库模型图设计完毕后,可以通过菜单中的 database下的
    GenerateDatabase来生成对应的 sql

    4.三大范式规范数据库设计
    第一范式:保证每列的原子性,不可再被拆分
    第二范式:在满足第一范式的基础上,一张表只能描述一件事情
    第三范式:在满足第二范式的基础上,除了主键列之外其他列都要直接依赖于
    要在规范化和性能之间取一个平衡

    5.T-SQL语句回顾(其中[]中的表示可省略)

    1.添加数据

     insert [into] 表名 (列1,列2,...) values(值1,值2,...)

    2.修改数据

     update 表名 set 列1=值1,列2=值2,... where (条件)

    3.查询数据

    select 列1,列2,... from 表名 where (条件) order by 列名

    4.删除数据

    delete from 表名 where (条件)

    6.使用SQL语句创建和删除数据库

      1.创建数据库([]表示可以省略,{}表示必需的部分,<>表示解释说明)

     语法:

       create detabase 数据库名

        on [primary]

         (

         <数据文件参数> [,......n] [<文件组参数>]

         )

         [log on]

        (

        {<日志文件参数> [,......n]}

        )

     数据文件的具体参数如下:

     ([name=逻辑文件名]

     filename=物理文件名

     [,size=大小]

     [,maxsize={最大容量|unlimited}]

     [,filengrowth=增长量]) [,.....n]

     文件组的具体参数如下:

      filegroup 文件组名 <文件参数> [,......n]

    eg:

    create database stuDB 
    on  primary  -- 默认就属于primary文件组,可省略
    (
    /*--数据文件的具体描述--*/
        name='stuDB_data',  -- 主数据文件的逻辑名称
        filename='D:stuDB_data.mdf', -- 主数据文件的物理名称
        size=5mb, --主数据文件的初始大小
        maxsize=100mb, -- 主数据文件增长的最大值
        filegrowth=15%--主数据文件的增长率
    )
    log on
    (
    /*--日志文件的具体描述,各参数含义同上--*/
        name='stuDB_log',
        filename='D:stuDB_log.ldf',
        size=2mb,
        filegrowth=1mb
    )

    2.删除数据库

    语法:

     drop database 数据库名

    那么如何删除这个数据库呢,SQL Server将数据库的清单存放在master系统数据库的sysdatabases表中,只需要查看该表是否存在于该数据库中就可以,这样在创建数据库的时候也可以先判断,再创建

    了,语句如下:

    use master -- 设置当前数据库为master,以便访问sysdatabases表
    go
    if exists(select * from sysdatabases where name='stuDB')
    drop database stuDBgo

     7.使用SQL语句创建和删除表

       1.回顾一下我们SQL Server 中的数据类型(转载自http://blog.sina.com.cn/zhanshiqi)

    第一大类:整数数据

    bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte.
    int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1.
    smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1
    tinyint: 是最小的整数类型,仅用1字节,范围:0至此^8-1


    第二大类:精确数值数据

    numeric:表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化.
    decimal:和numeric差不多


    第三大类:近似浮点数值数据

    float:用8个字节来存储数据.最多可为53位.范围为:-1.79E+308至1.79E+308.
    real:位数为24,用4个字节,数字范围:-3.04E+38至3.04E+38


    第四大类:日期时间数据

    datatime:表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节.
    smalldatetime:表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节.


    第五大类:字符串数据

    char:长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上.
    varchar:长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉.
    text:长宽也是设定的,最长可以存放2G的数据.


    第六大类:Unincode字符串数据

    nchar:长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节.
    nvarchar:长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节.
    ntext:长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.


    第七大类:货币数据类型

    money:记录金额范围为:-92233720368577.5808至92233720368577.5807.需要8 个字节.
    smallmoney:记录金额范围为:-214748.3648至214748.36487.需要4个字节.


    第八大类:标记数据

    timestamp:该数据类型在每一个表中是唯一的!当表中的一个记录更改时,该记录的timestamp字段会自动更新.
    uniqueidentifier:用于识别数据库里面许多个表的唯一一个记录.


    第九大类:二进制码字符串数据

    binary:固定长度的二进制码字符串字段,最短为1,最长为8000.
    varbinary:与binary差异为数据尾部是00时,varbinary会将其去掉
    image:为可变长度的二进制码字符串,最长2G.

     2.创建表

     语法:

       create table 表名

       (

         列1 数据类型 列的特征,

         列2 数据类型 列的特征,

         ......

        )

      **:数据库中表的清单存放在数据库的系统表sysobjects中.

    use StuDBgo 
    if exists(select * from sysobjects where name='stuMarks')
    drop table stuMarks
    create table stuMarks ( ExamNo int identity(1,1) primary key, stuNo char(6) not null, writtenExam int not null, LabExam int not null ) go

    其中,列属性"identity(起始值,递增量)" 表示"ExamNo"列为自动编号, 也称为标识列

      3.删除表

       语法:

     drop table 表名

    use StuDBgo 
    if exists(select * from sysobjects where name='stuMarks')
    drop table stuMarks

    8.使用SQL语句创建和删除约束

     1.回顾一下SQL Server 中有关数据完整性

      (1)实体完整性:唯一确定表中一行记录

      (2)域完整性:表中特定数据的有效性,以保不会输入无效的数值

      (3)引用完整性:插入或删除记录时,维护表之间定义的关系

      2.添加约束

      语法:

        alter table 表名

        add constraint 约束名 约束类型 具体的约束说明

    上述语法表示修改某个表,并在其中添加某个约束.其中,约束名的命名规则推荐采用"约束类型_约束列的形式

    eg:

    为学号(StudentNo)添加主键约束,约束名推荐取名"PK_StudentNo;

    ...唯一约束=>"UQ_IdentityCard;

    ...默认约束=>"DF_Address;

    ...检查约束=>"CK_BornDate;

    ...外键约束=>"FK_StudentNo.

    --添加外键约束(主表Student和Result建立关系,关联StudentNo)
    alter table Result
    add constraint FK_StudentNo
      foreign key(StudentNo) references Student(StudentNo)
    Go
    --添加主键约束(将StudentNo作为主键)
    alter table Student
    add constraint PK_StudentNo primary key (Student)
    
    --添加唯一约束(身份证)
    alter table Student
    add constraint UQ_IdentityCard unique (IdentityCard)
    
    --添加默认约束(不填地址,则默认为"地址不详")
    alter table Student
    add constraint DF_Address  default('地址不详') for Address
    
    --添加检查约束
    alter table Student
    add constraint CK_BornDate ckeck (BornDate>='1980-01-01')

    3.删除约束

      语法:

       alter table 表名

       drop constraint 约束名

    eg:

    --Student表中地址列默认约束的语句如下
    alter table Student
    drop constraint DF_Address
  • 相关阅读:
    PCL点云
    unity碰撞,刚体笔记
    动画剪辑 状态配置 脚本编写2
    unity中动画剪辑,状态机关系配置,脚本编写方式1
    unity给物体着色加纹理图 material(材质)
    C++/Java小白解Leetcode题,发现了知识盲区……
    NLP之统计句法分析(PCFG+CYK算法)
    Java:基于TCP协议网络socket编程(实现C/S通信)
    Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
    Java多线程技术:实现多用户服务端Socket通信
  • 原文地址:https://www.cnblogs.com/zhangzongle/p/5103201.html
Copyright © 2020-2023  润新知