search
HomeDatabaseMysql Tutorial轻松理解数据库三范式
轻松理解数据库三范式Jun 07, 2016 pm 02:58 PM
officialdatabaseunderstandparadigmeasy

轻松理解数据库三范式 官方定义:第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。 我的理解:第一范式这个不用說了,只要是关系数据库都满足第一范式 官方定义:第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖

轻松理解数据库三范式

 

官方定义:第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。

我的理解:第一范式这个不用說了,只要是关系数据库都满足第一范式

官方定义:第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖

我的理解:在第二范式中组合主键(AB)【注明:也叫做复合主键】里面的A或者B 与其他字段不能存在组合重复,为解决这个问题,通常的做法是咱们不用组合主键,添加一个ID,做为单一主键即可满足第二范式。如果不想添加ID,请满足组合主键(AB)里面的A或者B 与其他字段不能存在组合重复。

如:不满足第二范式,复合主键中的A与字段C组合重复

+------------+-----------+-------------------+

    pk                pk             row

+------------+-----------+-------------------+

    A                  B                  C

+------------+-----------+-------------------+

    A                  D                  C

+------------+-----------+-------------------+

    A                  E                  C

+------------+-----------+-------------------+

改为这样满足第二范式(但是不满足第三范式,字段A与字段C是组合重复):

+---------+------------+-----------+-------------------+

    pk            row             row             row

+---------+------------+-----------+-------------------+

      1              A               B                  C

+---------+------------+-----------+-------------------+

      2              A               D                  C

+---------+------------+-----------+-------------------+

      3              A               E                  C

+---------+------------+-----------+-------------------+

官方定义:第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三 范式。

我的理解:在第三范式中字段与字段之间不能存在组合重复

如:不满足第三范式,字段A与字段C组合重复

+---------+------------+-----------+-------------------+---------------+

    pk            row             row             row                        row

+---------+------------+-----------+-------------------+---------------+

      1              A               B                  C                           F

+---------+------------+-----------+-------------------+---------------+

      2              A               D                  C                          G

+---------+------------+-----------+-------------------+---------------+

      3              A               E                  C                           K

+---------+------------+-----------+-------------------+---------------+

改为这样满足第三范式:

表1

+---------+------------+-----------+

    pk            row            row         

+---------+------------+-----------+

      1              A               B               

+---------+------------+-----------+

      2              A               D                 

+---------+------------+-----------+

      3              A               E                 

+---------+------------+-----------+

和表2

+---------+-------------------+------------+

    pk             row                       row

+---------+-------------------+------------+

      1              C                           F 

+---------+-------------------+------------+

      2              C                           G

+---------+-------------------+------------+

      3              C                           K

+---------+-------------------+------------+

原则:当出现字段与字段的组合重复,如上的A和C的组合重复,首先要考虑的就是把他们拆分为2个表,具体是C拆到表1, 还是A拆到表1,看情况而定.

关键要理解定义这种范式标准的主要目的是为了减少数据冗余,数据冗余产生的本质就是在一个表中存在字段与字段之间的一对多,或者多对多关系。解决这个几对几的关系问题,就能轻易实现满足第三范式的数据库设计。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
初学者也能轻松掌握:PyQT安装指南详细解析初学者也能轻松掌握:PyQT安装指南详细解析Feb 18, 2024 pm 06:06 PM

小白也能轻松上手:PyQT安装教程详解PyQT是一款基于Python语言的GUI开发工具包,它可以帮助开发者快速、简单地创建各种美观的图形用户界面。对于想要从零开始学习PyQT的初学者来说,安装PyQT可能是一个比较困难的第一步。本文将详细介绍PyQT的安装步骤,并提供具体的代码示例,帮助小白轻松上手。第一步:安装Python在安装PyQT之前,首先需要确保

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

数据库的什么是指数据的正确性和相容性数据库的什么是指数据的正确性和相容性Jul 04, 2022 pm 04:59 PM

数据库的“完整性”是指数据的正确性和相容性。完整性是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。完整性对于数据库系统的重要性:1、数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据;2、合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能;3、完善的数据库完整性有助于尽早发现应用软件的错误。

如何正确理解PHP中的值传递方式如何正确理解PHP中的值传递方式Mar 08, 2024 pm 03:30 PM

如何正确理解PHP中的值传递方式PHP是一种广泛应用于Web开发的脚本语言,而在PHP中的参数传递方式主要有值传递和引用传递两种。而理解PHP中的值传递方式对于编写高效的代码至关重要。本文将详细讨论PHP中的值传递方式,并通过具体的代码示例来帮助读者更好地理解。值传递方式的基本概念值传递是指将变量的值复制一份传递给函数或方法,在函数内部对该值的操作不会影响到

数据库系统的核心和基础是什么数据库系统的核心和基础是什么Jul 11, 2022 am 11:44 AM

数据库系统的核心和基础是“数据模型”。计算机不能直接处理现实世界中的客观事物,而数据库系统正是使用计算机技术对客观事物进行管理,因此就需要对客观事物进行抽象、模拟,以建立适合于数据库系统进行管理的数据模型。数据模型从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。

深入理解Linux管道的使用方法深入理解Linux管道的使用方法Feb 21, 2024 am 09:57 AM

深入理解Linux管道的使用方法在Linux操作系统中,管道是一种非常有用的功能,能够将一个命令的输出作为另一个命令的输入,从而方便地实现各种复杂的数据处理和操作。深入理解Linux管道的使用方法对于系统管理员和开发人员来说非常重要。本文将介绍管道的基本概念,并通过具体的代码示例来展示如何使用Linux管道进行数据处理和操作。1.管道的基本概念在Linux

深入理解Go语言文档中的strings.Split函数深入理解Go语言文档中的strings.Split函数Nov 04, 2023 pm 01:14 PM

深入理解Go语言文档中的strings.Split函数,需要具体代码示例在Go语言中,字符串操作是非常常见的需求。其中,strings包是Go语言提供的一个标准包,提供了丰富的字符串处理函数。其中,strings.Split函数是其中一个常用的函数,它的作用是根据指定的分隔符将一个字符串拆分成一个字符串切片。在正式深入探讨strings.Split函数之前,

理解Go语言注释的重要性理解Go语言注释的重要性Mar 29, 2024 pm 04:48 PM

在Go编程中,注释是一个非常重要的部分。注释可以帮助程序员更好地理解代码的逻辑、目的和细节,从而提高代码的可读性和可维护性。本文将介绍Go语言中注释的重要性,并结合具体的代码示例来说明注释对代码理解的帮助。首先,让我们来看一个简单的Go程序示例:packagemainimport"fmt"funcmain(){/

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.