目录

  • 介绍
  • 需求
  • 思路
    • 思路1:一张表来表示所有数据(如下图)
    • 思路2:两张表,学生表和班级表(如下图)
  • 代码
  • 扩展
    • 1.数据库设计三范式
      • 1.数据库表中不能出现重复记录,每个字段是原子性的不能再分(不可重复,不可再分)
      • 2.第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖
      • 3.建立在第二范式基础上的,非主键字段不能传递依赖于主键字段。(不要产生传递依赖)
      • 2.经典的数据库设计框架--er图

介绍

本文将用一个简单的tip来简单介绍建表语句,可以作为建表语句的模板使用

需求

采集一个学校中学生的信息,学生具有班级姓名学号等属性

思路

思路1:一张表来表示所有数据(如下图)


缺点:产生大量的数据冗余

思路2:两张表,学生表和班级表(如下图)


优点:优化空间,数据具有条理性

思路2将班级编号cno作为外键,且加上非空,这样子的话一个学生一定对应了一个班级。这个时候,学生表叫做子表,班级表叫做父表。

外键:外键的内容一定要是父表对应字段中存在的内容,如果没有该内容,则会添加数据失败,报错。

代码

drop table if exists t_classes;
create table t_classes(classes_id   int (3),classes_name    varchar(30) not null,constraint pk_classes_id   primary key(classes_id)
)drop table if exists t_student;
create table t_student(student_id   int(10),student_name    varchar(50) not null,sex        char(2) not null,birthday   date not null,email     varchar(30) unique,classes_id   int (3) not null,primary key(student_id),foreign key(classes_id) references t_classes(classes_id)
)

扩展

1.数据库设计三范式

1.数据库表中不能出现重复记录,每个字段是原子性的不能再分(不可重复,不可再分)


其中联系方式可以再分,不是原子性

2.第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖


以上虽然确定了主键,但此表会出现大量的冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”,出现冗余的原因在于,学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号,而教师姓名部门依赖了主键的一个字段教师编号,这就是第二范式部分依赖。

解决方法:绘制两张表



如果一个表是单一主键,那么它就复合第二范式,部分依赖和主键有关系

以上是一种典型的“多对多”的设计

3.建立在第二范式基础上的,非主键字段不能传递依赖于主键字段。(不要产生传递依赖)


从上表可以看出,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键,班级名称字段依赖于班级编号,班级编号依赖于学生编号,那么这就是传递依赖,解决的办法是将冗余字段单独拿出来建立表,如下:



以上设计是一种典型的一对多的设计,一存储在一张表中,多存储在一张表中,在多的那张表中添加外键指向一的一方的主键。(外键指向主键)

2.经典的数据库设计框架–er图

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”或圆角矩形表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;

用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型

用来表现数据对象与数据对象之间的联系,例如学生的实体和成绩表的实体之间有一定的联系,每个学生都有自己的成绩表,这就是一种关系,关系用菱形来表示。(如下图)

最后,推荐一个优质的mysql课程,我听过的几个课中可以说是讲的最好的老师了。相关链接

数据库建表语句的使用及简单实战相关推荐

  1. PowerDesigner,如何将Oracle数据库建表语句转化成Mysql数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Oracle数 ...

  2. python脚本-通过数据库建表语句生成表格

    python脚本-通过数据库建表语句生成表格 文章目录 python脚本-通过数据库建表语句生成表格 获取数据库建表sql ,需要带备注COMMENT 把sql复制进txt文档,编写python脚本 ...

  3. PowerDesigner,如何将Mysql数据库建表语句转化成Oracle数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Mysql数据 ...

  4. 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等)

    * 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等)  * 1,表字段名称  * 2,表字段类型  * 3,表字段注释信息 这里介绍3种方式,如下: 第 ...

  5. 为什么要用数据库建表语句而不直接在工具里建表呢?

    因为使用数据库建表语句较为规范,你做的操作有迹可循,在本地建表以后,把语句复制在线上数据库执行一遍就可以了,手动建表的话不一定能保证两次建表一模一样,而且很麻烦(但是可以把表复制过去,但是这样的话测试 ...

  6. oracle创建表执行时间好长,Oracle数据库建表语句连续执行的问题

    Oracle数据库建表语句连续执行的问题 我写了一个sql文件,里面是整个库的建表语句,用oracle的dba权限用户登录.在执行每个表的建表语句的时候都是成功的,但放到一起连续执行就提示编译错误.语 ...

  7. mysql 建表脚本 shell_shell 数据库建表语句脚本

    #!/bin/sh SHELL_NAME=GetTabStript.sh /bin/rm -f CreateTable.sql /bin/rm -f tmp.sql ##获取数据库用户名.密码.实例, ...

  8. java生成mysql数据库建表语句、字段、字段类型、字段注释,可实现不用mysqldump备份数据库

    使用 mysqldump 备份数据库也是可行的,因为每次备份的时候都需要mysqldump这个文件, 我在windows备份时没问题,但是放到linux上面时,centos系统死活不认这个文件,但又不 ...

  9. 关于使用java程序从excel或者数据库中取出建表规则数据,自动生成数据库建表语句(适用于批量建数据库表)

    公司开发新系统,需要创建几百个数据库表,建表的规则已经写好放到Excel中,如果手动创建的话需要占用较长的时间去做,而且字段类型的规则又被放到了另一张表,如果手动去一个一个去匹配就很麻烦,所以我先把两 ...

  10. Java 实现两个不同服务器的数据库数据的迁移(注释含数据库建表语句备份)

    现在需要将内网数据库的数据及表同步到外网中,但是连接内网需要jar包才能穿透连接到,经测试,jar包对获取建表语句进行了限制(注释的代码),所以需要内外网两边把表建好,直接同步数据. 逻辑: 获取内网 ...

最新文章

  1. dataset__getitem___一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
  2. 积分商城如何梳理思路和进行设计
  3. python的语句_Python的语句
  4. 03MyBatis动态sql
  5. Unity shader实现水效果(折射,反射,波浪,1.菲尼尔,深度颜色)
  6. Spring源码入门——DefaultBeanNameGenerator解析
  7. 聊聊手游的那些惊喜与惊吓
  8. c语言分号应用,问什么C程序里总是提示缺少分号;,而明明有分号?
  9. 太全面了,RF接口自动化框架项目实战
  10. CentOS7.2安装linux版QQ
  11. 暗时间--BY刘未鹏
  12. 微积分入门(持续更新)
  13. Oracle 12.2 Flex ASM安装RU后ASM、GIMR等资源未启动, 手动启动提示CRS-2549“it is not a valid candidate as per the place
  14. 基于活动场景签到微会动平台上线发布两款酷炫微信现场扫码签到产品
  15. 算法【动态规划】 | 【01】二维表结构
  16. 炫“库”行动-人大金仓有奖征文-KingbaseES V8R6 手工创建主备流复制集群案例
  17. 在计算机视觉论文中benchmark和baseline的区别
  18. 千万别对女项目经理有幻想!
  19. SOT-23、SOT-223封装的三极管、MOS管
  20. [海豹海边爆]Daimayuan554

热门文章

  1. Win10怎么搜索文件内容?Win10通过文件内容查找文件的方法
  2. 微信小程序区分开发版、体验版和正式版
  3. HTML5中的source标签
  4. 英雄联盟掉线后显示无法连接服务器,英雄联盟掉线连不上出现英文窗口解决方案...
  5. 2006公务员考试-杂七杂八常识(1)
  6. android 跳转京东app,打开并跳转到京东app指定页面
  7. 解决dos打开界面变小和打开软件字体乱码的问题
  8. 旧手机改造成Linux服务器
  9. 推送微信公众号模板消息通知(Java版)
  10. c#求长方形的面积周长公式_长方形的面积和周长公式是什么?