规范化基本上是设计数据库模式,以避免重复和冗余数据。 如果某些数据在数据库中的多个位置重复,则存在在一个位置而不是另一个位置更新的风险,从而导致数据损坏。

从正常形式到正常形式有许多归一化水平。 每种常规形式都描述了如何摆脱一些通常与冗余相关的特定问题。

一些典型的规范化错误:

(1)在单元格中具有多个值。 例:

UserId | Car

---------------------

1 | Toyota

2 | Ford,Cadillac

这里“Car”列(它是一个字符串)有几个值。 这冒犯了第一个正常形式,即每个单元格应该只有一个值。 我们可以通过每辆车单独一行来规范化这个问题:

UserId | Car

---------------------

1 | Toyota

2 | Ford

2 | Cadillac

在一个单元格中具有多个值的问题在于,更新是棘手的,查询很棘手,并且您无法应用索引,约束等。

(2)具有冗余的非密钥数据(即,在多行中不必要地重复数据)。 例:

UserId | UserName | Car

-----------------------

1 | John | Toyota

2 | Sue | Ford

2 | Sue | Cadillac

此设计是一个问题,因为每个列都重复名称,即使名称始终由UserId确定。 这使得理论上可以在一行而不是另一行中更改Sue的名称,这是数据损坏。 通过将表拆分为两个并创建主键/外键关系来解决此问题:

UserId(FK) | Car UserId(PK) | UserName

--------------------- -----------------

1 | Toyota 1 | John

2 | Ford 2 | Sue

2 | Cadillac

现在看起来我们仍然有冗余数据,因为UserId是重复的; 但是,PK / FK约束可确保不能单独更新值,因此完整性是安全的。

那很重要么? 是的,这非常重要。 通过使数据库具有规范化错误,您可以避免将无效或损坏的数据导入数据库。 由于数据“永远存在”,因此在首次进入数据库时很难摆脱损坏的数据。

不要害怕正常化。 标准化水平的官方技术定义非常钝。 这听起来像归一化是一个复杂的数学过程。 但是,规范化基本上只是常识,你会发现如果你使用常识设计数据库模式,它通常会被完全规范化。

规范化存在许多误解:

有些人认为规范化数据库较慢,而非规范化可以提高性能。 但这只适用于非常特殊的情况。 通常,规范化数据库也是最快的。

有时归一化被描述为一个渐进的设计过程,你必须决定“何时停止”。 但实际上,标准化水平只描述了不同的具体问题。 正常形式在第3 NF以上解决的问题首先是非常罕见的问题,因此您的架构可能已经在5NF。

它适用于数据库之外的任何内容吗? 不直接,没有。 规范化的原则对于关系数据库非常具体。 但是,一般的基本主题 - 如果不同的实例可能不同步,您不应该有重复的数据 - 可以广泛应用。 这基本上就是DRY原则。

MYSQL中什么是规范化_数据库设计 - 什么是规范化(或规范化)?相关推荐

  1. mysql视图和中间表_数据库设计中的14个技巧

    时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  2. mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...

    数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束 数据库:唯一性约束 所谓唯一性约束(unique constraint)不过是数据表内替代 ...

  3. MySQL中地点的数据类型_数据库中地址的数据类型

    数据库中用什么数据类型存储电话号码比较合理? 因为涉及到固定电话,所以一般用varchar2 ,单纯手机号码的话可以用number. 数据类型分类: 数字型- Integer(整型).Long(长整型 ...

  4. mysql中 视图的优缺点_数据库视图优缺点分析

    视图作用是什么 所谓视图(View)其实是执行查询语句后得到的结果,但这个查询结果可以仿真成数据表来使用,所以有人也称它为"虚拟数据表",视图在操作上和数据表没有什么区别,但两者的 ...

  5. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量

    sqlServer2012(936 简体中文GBK )为例: 例如: varchar(10),只能存储10个英文字符或数字,也只能存储5个汉字: char(10),只能存储10个英文字符或数字,也只能 ...

  6. mysql中id是什么_数据库中的id是什么

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. mysql 中default什么意思_数据库中default的用法正确使用方法

    数据库中default的用法的正确使用方法你清楚吗,今天学习啦小编就跟大家详细介绍下数据库中default的用法,希望能帮到大家. 数据库中default的用法的用法 SQL Server数据库def ...

  8. mysql中的存储过程优点_数据库存储过程在优点

    存储过程 sql语句执行的时候要先编译,然后执行.存储过程就是编译好了的一些sql语句.应用程序需要用的时候直接调用就可以了,所以效率会高. 存储过程介绍 存储过程是由流控制和SQL语句书写的过程,这 ...

  9. mysql中distinct是什么_数据库中 DISTINCT 的作用是什么?

    展开全部 SQL数据库中, DISTINCT表示去掉重复的行,作用是针对包含重复值的数据表,用于返回唯一不同的值.语法是636f707932313133353236313431303231363533 ...

最新文章

  1. 第九周项目一-深复制体验(1)
  2. 在domain中验证cron表达式
  3. 【转载】基于ASP.NET Web Application的插件实现,附DEMO
  4. WIN7移动硬盘格式化问题RAW格式读取 XP移动硬盘读取异常分析 移动硬盘格式不兼容...
  5. Docker创建虚机和swarm
  6. java alder32_Java里面计算Adler32校验
  7. python面向对象三大特性、类的约束、print带颜色输出及super补充
  8. 计算机工作原理 仿真,虚拟DCS仿真工作原理
  9. java 服务器读取客户端文件,java 服务器读取客户端文件
  10. MySQL查询语句转postGRE语句_PostgreSQL DBA常用SQL查询语句
  11. 什么是我想要守护的东西?
  12. 2021-08-08 事务的提交,回滚
  13. dwcs6连接不上access数据库_dw连接access数据库的技巧
  14. 初学“Jave”心得
  15. 基于单片机烟雾温湿度甲醛监测设计
  16. 笔记本Win10系统关于启动禁用触控板设置
  17. 通过Jsoup 和 htmlunit 爬取全国行政区划信息查询平台的省市区区划数据
  18. cydia添加源程序 v1.1.6 中文版
  19. 计算机中sumif函数的使用方法,WPS表格的sumif函数用法与模糊条件使用方法
  20. VirtulBox安装虚拟机(鼠标点击时)0x00000000指令引用的0x00000000内存该内存不能为written错误解决方案

热门文章

  1. 【Elasticsearch】Elasticsearch性能调优
  2. 【flink】flink Class not resolvable through given classloader ClassNotFoundException: FlinkKafkaConsum
  3. 【Redis】Redis 基础知识 常用命令 命令积累
  4. 【java】java 理解JDK中UUID的底层实现
  5. 使用 Spring Boot Security 进行安全控制
  6. mac下编译hadoop-3.0.3
  7. GitLab 配置 OAuth2 实现第三方登录,简直太方便了!
  8. 腾讯疯狂扩展7000人!我居然挂在了项目这块。。。
  9. MongoDB与MySQL效率对比
  10. 都是用Redis的服务器,12306为啥干不过淘宝???