当前位置:网站首页>数据库的范式(第一范式,第二范式,第三范式,BCNF范式)「建议收藏」
数据库的范式(第一范式,第二范式,第三范式,BCNF范式)「建议收藏」
2022-07-31 15:06:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
在了解范式之前我们先了解下数据库中关于码的概念
1.码
1.1 超码
能够唯一标识元组的某一属性或属性组,任何包含超码的超集也是超码,这里唯一标识元组可以简单的理解为根据某一个字段或几个字段的值,查询出某一行特定的数据
1.2 候选码
从超码中选出的最小的码,即其任何真子集都不能满足条件。即属性不可再删减。
1.3 主码
从候选码中选出一个作为主码。
2.范式(NF)
范式:符合某一种级别的关系模式的集合,简而言之就数据库表设计的标准级别,范式有1NF,2NF,3NF,BCNF,4NF等,通常高级别的范式包含低级别的范式。数据库的设计一般到BCNF即可,有时候为了性能要就也会
2.1 1范式(1NF)
1范式:关系中的表的属性不可再分割。 举个简单的例子,有个学生表,有以下字段,sid,sname,address,sid为主键,sname为学生姓名,address为地址,地址的数据可能包括省份,城市,街道之类的。日后可能我们需要单独统计有个城市有多少学生之类的,而将这么多信息合成一个属性,即不符合第1范式,属性应该分割成省份,城市等多个字段,来满足业务要求。
2.2 2范式(2NF)
2范式:消除非主属性对码的部分函数依赖。 函数依赖:简单的说,如果对于每个x属性或属性组都有对应的确切的y值与之对应,则称Y函数依赖于x。记做 x->y 完全函数依赖:有x->y,但对于x的任意真子集都不存在x’->y,称之为完全函数依赖。比如有一张成绩表,有若干字段,学号,课程,成绩。 (学号,课程)->成绩,任意(学号) !-> 成绩,(课程)!-》成绩,我们称成绩完全依赖于(学号,课程) 部分函数依赖:Y函数不完全依赖于x叫部分函数依赖,例如(学号,课程)->课程名),学号和课程名无关,即(课程)->课程名。
2.3 3范式(3NF)
3范式:消除非主属性对码的传递函数依赖 传递函数依赖: 一个关系R(U),X,Y,Z为属性集U上的子集,其中存在X→Y和Y→Z,但Y不决定X,即 Y!->X 同时Y不包含Z,则存在X→Z,即X传递函数决定Z,Z传递函数依赖于X。 例如:商品表:商品名->仓库,仓库!->商品,仓库->仓库管理员,仓库管理员 !->仓库(假定一个仓库可以有多个管理员) 。
2.4 BCNF范式(BCNF)
BCNF范式:消除主属性之间的间接函数依赖和传递函数依赖。
3.总结
一般我们数据库设计到3范式或BCNF范式即可,但是在实际项目中总是在性能和扩展性中做取舍。数据库设计标准越高,可扩展性越好,耦合性越低,但性能也会受损。所以有时候会到2范式,为了减少表与表之间的关联,加快查询速度,各种利弊还需自己权衡。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128339.html原文链接:https://javaforall.cn
边栏推荐
- Introductory UnityShader learning (2) - the rendering pipeline
- NPM Taobao mirror (latest version) released a new version of npm mirror at 2021-11-21 16:53:52 [easy to understand]
- UnityShader入门学习(三)——Unity的Shader
- 使用 PyTorch 检测眼部疾病
- /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用
- Advanced Mathematics - Commonly Used Indefinite Integral Formulas
- Use of el-tooltip
- 微服务架构选型
- UnityShader入门学习(二)——渲染流水线
- R language test whether the sample conforms to normality (test whether the sample comes from a normally distributed population): shapiro.test function tests whether the sample conforms to the normal d
猜你喜欢

The paper manual becomes 3D animation in seconds, the latest research of Wu Jiajun of Stanford University, selected for ECCV 2022

自适应控制——仿真实验二 用Narendra方案设计模型参考自适应系统

Architecture actual combat battalion module 8 message queue table structure design

OAuth2:搭建授权服务器

华医网冲刺港股:5个月亏2976万 红杉与姚文彬是股东

Sentinel热点参数限流

基于极限学习机(ELM)进行多变量用电量预测(Matlab代码实现)

Ubuntu Topic 5: Setting a Static IP Address

模板与泛型编程值typelist实现

"Listen to me, thank you" can be said in ancient poetry?Tsinghua University has developed an artifact of "Searching Sentences According to Meaning", which can search for the famous sayings you want wi
随机推荐
网线RJ45接口针脚[通俗易懂]
R language ggplot2 visualization: use the ggmapplot function of the ggpubr package to visualize the MA plot (MA-plot), the font.legend parameter and the font.main parameter to set the title and legend
梅克尔工作室-第一次
OpenShift 4 - Customize RHACS security policies to prevent production clusters from using high-risk registry
Getting started with UnityShader (1) - GPU and Shader
OpenShift 4 - 用 Operator 部署 Redis 集群
Selenium自动化中无头浏览器的应用
工程力学复习资料
蔚来杯2022牛客暑期多校训练营4
乡村基冲刺港交所:5个月期内亏2224万 SIG与红杉中国是股东
Message queue data storage MySQL table design
763.划分字母区间——之打开新世界
Groupid(artifact id)
Word表格转到Excel中
基于极限学习机(ELM)进行多变量用电量预测(Matlab代码实现)
如何进行需求分析评审
abaqus find contact pairs报错:surface name is already in use
Getting started with UnityShader (3) - Unity's Shader
sentinel与nacos持久化
最小费用最大流问题详解