关系数据库(MySQL)的规范化、以及设计原则
1.了解范式(NF)
为了使得关系数据库能够符合规范理论,所有的数据库表都要满足:范式。
关系数据库的范式有五类:第一范式,第二范式,....第五范式。下面我们来了解一下前三个范式:
第一范式:简单来说就是表中不能嵌套表(使用一个列不能有多个值,列是原子级别的不能在分割)
第二范式:(在介绍第二范式之前,首先要知道什么是主键,如果这一列是主键那么,每一行的的这一列都是不能为空且不能重复的)
简单来说第二范式就是说,你的属性必须完全依赖你的主键,如果你的表里面有一个属性是不依赖你的主键的,或者是依赖你的联合主键中的一个,那么你必须将表进行拆分。
最后最简单来讲就是,你表中的属性要和你的主键相关联,能被主键标识。
第三范式:就是说一张表里面不能存在传递依赖。就是说你这表里面的某一属性不能依赖另外一个属性来传递。
2.数据库的设计原则
1.数据库中的数据应该尽可能的实现共享,减少重复等等。
2.保证输入、修改数据时的一致性和正确性。
3.保证数据与使用数据的程序有较高的独立性。
3.实体的三种关系
1.一对一:一张表中的一个属性只与另外一张表的一个属性匹配。
2.一对多:一张表中的一个属性可以与另外一张表的多个属性匹配。
3.多对多:多对多,需要使用三种表来实现。第三个表为链接表,链接表里面含有另外两张表的主键。
4.数据库的三级模式结构
1.外模式:一个数据库可以有多个外模式,是呈现在用户目前的模式。可以看见数据逻辑和特征描述。
2.模式:数据库只有一个逻辑模式,在数据库的中间层。
3.内部=模式:数据库只有一个内模式,就是对数据库的存储方式在底层的描述。
关系数据库(MySQL)的规范化、以及设计原则的更多相关文章
- MySQL数据库主键设计原则
目录 1. 主键定义... 5 2. 主键设计原则... 5 2.1 确保主键的无意义性... 5 2.2 采用整型主键... 5 2.3 减少主键的变动... 5 2.4 避免重复使用主键... 6 ...
- 「 MySQL高级篇 」MySQL索引原理,设计原则
大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...
- 「MySQL高级篇」MySQL索引原理,设计原则
大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...
- mysql数据库关系表设计原则
三范式https://blog.csdn.net/qq_36432666/article/details/78934073 https://kb.cnblogs.com/page/138526/ ht ...
- MySQL数据库索引的设计原则
为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引. 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录.例如,学生表中学号是具有唯 ...
- Mysql 学习-索引的设计原则
索引的设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍.高效的索引对获的良好性能非常重要.设计索引是,应该考虑一下准则: (1)索引并非语讹夺越好,若一个表中有大量索引,不仅占用磁盘空间,而 ...
- MySQL三层结构、用户权限、索引设计原则
一.守护进程是什么? Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对 ...
- mySql 数据库设计原则
mysql数据库设计原则: 必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...
- mysql的索引设计原则以及常见索引的区别
索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索 ...
随机推荐
- hdu多校1002 Balanced Sequence
Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...
- Qt画笔实现波形区域图
参考文章:https://blog.csdn.net/yuxing55555/article/details/79752978 效果图: void WareArea::paintEvent(QPain ...
- 六招让你的Ubuntu马上提速
Chris Hoffman Ubuntu的启动速度非常快,按了开机键之后很快就进入桌面.但我们仍然可以充分利用内存,通过多种方法让开机速度更快.某些方法真的可以提速,对于旧电脑的效果尤其明显. 选用轻 ...
- python常用
列出当前目录 import os: print os.getcwd() python load .mat variable a import scipy.io as sp tmp=sp.loadmat ...
- learning ddr input clock frequency change condition
- day04_python_1124
01 上周内容回顾 int bool str int < --- > str: i1 = 100 str(i1) s1 = '10' int(s1)字符串必须是数字组成. in ...
- 随机生成id
function getRandom(){ return Math.random().toString(36).substring(7);}
- java字符串根据空格截取并存进list,并在每个元素前后加上/
public class List1 { public static void main(String[] args) { String s = "abc nnn ooo/xzsxc bs& ...
- pyhton-函数初级
f = open("司马光砸缸", mode="r+", encoding="utf-8") f.seek(12) f.truncate() ...
- 数据泵导入 ORA-31626
Oracle,10G,数据泵导入时,报错如下: 解决方案:对当前用户做如下授权 . 具体操作:grant connect,resource to user;