首页 > 数据库 >【MYSQL】表的设计

【MYSQL】表的设计

时间:2024-08-12 09:55:44浏览次数:14  
标签:范式 表中 约束 key MYSQL 设计 null 主键

目录


数据库约束

  • 是关系型数据库的一个重要功能,
  • 主要作用是保证数据的完整性,也可能理解数据的正确性(数据本身是否正确,关联关系是否正确),
  • 人工检查数据完整性的工作量非常的大,在数据表中定义一些约束,那么数据库写入数据的时候,数据库会帮我们做校验工作,
  • 约束一般是指定在列上的,
  • 使用在表的定义时在要约束的列的类型后加上。

not null 约束

表示该列不能存储null值。

如果存入null会报错。

unique (唯一)约束

表示该列中的数据不能重复(null)除外。

插入相同或者已有的值会报错。

default 默认值约束

指定列为空时的默认值。

primary key (主键)约束

相当于是not null 和 unique的结合,

表示该列中的数据既不能重复也不能为空。

如果存入null会报错。插入相同或者已有的值也会报错。

当主键是整型时,我们常常加上auto_increment让主键从当前最大值加1,

但是当插入错误时该值相当于被生成了,下一个从这个开始。

通俗将就是当前主键最大值为7,然后插入时报错了,改回来后插入行主键为9。

一张表中最多只能定义一个主键,定义超了就会报错,

要想多列为主键只能使用复合主键primary key (列名1, 列名2)

使用复合主键,必须列值都相同才算重复,任一列值都不能为null。

foreign key (外键)约束

保证一个表中的数据匹配另一个表中的值的参照完整性。

就是将另一个表中的值作为该表中该列的范围。

被外键约束的列在约束前先定义,

语法是foreign key (列名) references 外表名(外列名)

被外键约束的表还存在就不能删除外表。

check 约束

该约束在5.7版本不能使用,导致兼容性不好,所以一般不用。

使用了该约束后该列只能插入被约束的值。

总结

约束类型说明示例
not null 约束使用not null指定列不能为空name varchar(20) not null,
unique 约束指定列为唯一的、不重复的,null除外name varchar(20) unique,
default 默认值约束指定列为空时的默认值age int default 20,
primary key 主键约束not null 和 unique 的结合id int primary key,
foreign key外键约束关联其他表的主键或唯一键foreign key (字段名) references 主表(列)
check约束保证列中的值符合指定的条件check (gender = ‘男’ or gender =‘女’)

表的设计

一般我们编程流程如下:

OOA面向对象分析 -》OOD面向对象设计 -》OOP面向对象编程

设计表:

  1. 从需求中获得类,类对应到数据库中的实体,实体在数据库中就表现为一张一张的表,类中的属性就对应着表中的字段(列),
  2. 确定类与类之间的关系,
  3. 使用SQL去创建具体的表。

三大范式

设计表的时候我们一般要遵循一些规则,这些规则我们一般称之为三大范式。
范式就是描述数据关系的模型,下面只介绍三大范式。

第一范式

第一范式就是表中的字段不可再拆分。

第一范式是关系型数据库最基本的要求,不满足第一范式的数据库不是关系型数据库。
也就是在定义表时每个字段都可以用一种数据类型来表示,那么这个表就是满足第一范式的。

第二范式

在满足第一范式的基础上,不存在非关键字段对任意候选字段存在部分函数依赖(存在于复合主键的情况下)

非关键字段即非主键字段,候选字段可以理解为主键或者没有主键时的唯一键。

对于由两个或多个关键字段(复合主键)决定一条记录的情况,如果一行数据中有些字段只与关键字段中的一个有关系,那么这种就说他只存在部分函数依赖。

表中没有复合主键的表天然满足第二范式。

第三范式

在第二范式的基础上,不存在非关键字段,对任一候选键的传递依赖。

两个强相关关系存在传递现象,这种传递关系称为传递依赖。比如学生表中拿到学号,可以根据学号拿到学校,根据学校又可以拿到学院等信息。

表的关系

  1. 一对一:
    比如一个人只有一个身份证一样。
  2. 一对多:
    比如一个班级拥有多个学生一样。
  3. 多对多:
    比如一个学生选多个课程,一个课程被多个学生选一样。

标签:范式,表中,约束,key,MYSQL,设计,null,主键
From: https://blog.csdn.net/yj20040627/article/details/140966278

相关文章

  • 海南海口经济学院计算机软件工程毕业设计课题选题参考目录​
    海南海口经济学院计算机软件工程毕业设计课题选题博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台,✌️Java领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者、专注于大学生项目实战开发、讲解和毕业答疑辅导。主要项目:小程序、SpringBoot......
  • 基于微信小程序的心理测评平台设计与实现
    基于微信小程序的心理测评平台设计与实现DesignandImplementationofaPsychologicalAssessmentPlatformbasedonWeChatMiniProgram完整下载链接:基于微信小程序的心理测评平台设计与实现文章目录基于微信小程序的心理测评平台设计与实现摘要第一章引言1.1......
  • 广东广州城市理工学院计算机软件工程毕业设计课题选题参考目录​
    广东广州城市理工学院计算机软件工程毕业设计课题选题博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台,✌️Java领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者、专注于大学生项目实战开发、讲解和毕业答疑辅导。主要项目:小程序、SpringB......
  • Golang中使用redis,mysql
    一、redis简介redis(REmoteDIctionaryServer)是一个由SalvatoreSanfilippo写key-value存储系统,它由C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value类型的数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(......
  • 助医陪诊系统小程序,要怎么去设计这个程序呢?
        设计一个助医陪诊系统小程序,就如同为一位初来乍到的外国游客配备一个既懂当地语言又了解风土人情的超级导游。这位“导游”需要帮助游客轻松应对新环境,解答各种问题,并提供贴心的服务。以下是设计程序步骤:1.培养多语言能力-需求分析    语言课:深入了解......
  • 盘点硬件工程师PCB设计冷知识
    PCB(PrintedCircuitBoard,印刷电路板)设计原理与关键节点涉及多个方面,以下是对这些方面的详细阐述:PCB设计原理电气连接:PCB上的导线和金属线路用于连接电子元件(如电阻、电容、集成电路等)之间的电气信号。导线通过印刷、刻蚀或添加导线层的方式实现电路连接,以满足电路的电气性......
  • 设计模式 - Singleton pattern 单例模式
    文章目录定义单例模式的实现构成构成UML图单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现总结其他设计模式文章:最后定义单例模式是一种创建型设计模式,它用来保证一个类只有一个实例,并且提供一个......
  • 【C++高阶】:特殊类设计和四种类型转换
    ✨                      人生如梦,朝露夕花,宛若泡影   ......
  • 基于大数据的混合音乐推荐系统的设计与设计(论文+源码)_kaic
    摘 要随着数据的不断增长和用户对随听随播的收听方式的习惯,开发一款音乐推荐系统变得越来越必要。为了满足这一需求,本论文采用Java语言、Vue以及数据库MySQL进行开发。系统的主要功能包括登录注册、音乐分类管理、音乐推荐管理、音乐资讯管理、音乐库管理、音乐论坛管理、用......
  • 基于SpringBoot框架的企业财务管理系统设计与实现(论文+源码)_kaic
    摘  要在快速增长的信息时代,每个企业都在紧随其后,不断改进其办公模式。与此同时,各家企业的传统管理模式也逐步发生变化,政府和企业都将需要一个更加自动化和现代化的财务管理系统。这能够便利员工之间的信息交流和公司的工作任务进而提高工作效率。因此对现有的系统进行调......