数据库建表语句的使用及简单实战教程_SQL数据库建立一个表
大家好,又见面了,我是你们的朋友全栈君。
目录
介绍
本文将用一个简单的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课程,我听过的几个课中可以说是讲的最好的老师了。相关链接
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/195955.html原文链接:https://javaforall.cn
相关文章
- SQL Error (1055) sql_mode=only_full_group_by详解数据库
- 中的应用Oracle数据库中的SQL语句使用指南(sql语句在oracle)
- 数据库掌握Oracle,深刻理解SQL数据库(oracle是sql)
- 使用SQL Server实现快速数据库迁移(sqlserver数据库迁移)
- SQL Server数据库备份实操教程(sqlserver如何备份数据库)
- 探究Oracle数据库中触发器类型的知识点(oracle触发器类型)
- 「一键导出MySQL SQL文件,轻松备份数据库数据」(mysql导出sql工具)
- 轻松实现MySQL SQL批量执行方法,快速操作数据库(mysql批量执行sql)
- MySQL的删除语句SQL教程(mysql删除语句sql)
- 数据库导入SQL脚本,使用MSSQL数据库快速实现数据迁移(sql文件导入mssql)
- 降低MS SQL远程连接成本:使用数据库工具(mssql远程连接工具)
- Effortlessly Delete Tables in MySQL with these SQL Commands(mysql删除表sql)
- HTML5 Web SQL 数据库
- 基于SQL Server的省市区数据库实现(省市区sqlserver)
- 极速提升数据库管理效率:MS SQL革命性工具(数据库管理工具mssql)
- 息壤数据管理:MS SQL数据库技术实现(息壤mssql数据库)
- 深入浅出MySQL主键SQL,轻松学会数据库设计(mysql主键sql)
- MySQL数据库备份还原SQL操作指南(mysql数据还原sql)
- 管理SQL Server数据库的实践经验(sqlserver an)
- 快速高效导出MySQL数据库到SQL文件(mysql导出sql文件)
- MySQL中使用SQL剪切实现数据处理(mysql中sql剪切)
- 将SQL查询结果存入Redis缓存(sql结果存入redis)
- MySQL数据库SQL语句指南(mysql下sql语句)
- MySQL 数据库 SQL 优化技巧(mysql下sql优化)