MYSQL 中的规范化

2024-02-23

MySQL 中的规范化是什么?在什么情况下以及如何使用它?


我尝试在这里用外行术语来解释标准化。首先,它适用于关系数据库(Oracle、Access、MySQL),因此它不仅仅适用于 MySQL。

规范化是为了确保每个表具有唯一的最小字段并消除依赖关系。想象一下,您有一个员工记录,每个员工都属于一个部门。如果将部门与员工的其他数据一起存储为字段,则会遇到问题 - 如果删除部门会发生什么?您必须更新所有部门字段,并且有可能出错。如果某些员工没有部门(也许是新分配的?)怎么办?现在将会有空值。

因此,简而言之,规范化是为了避免字段为空,并确保表中的所有字段仅属于所描述的数据的一个域。例如,在员工表中,字段可以是 id、姓名、社会安全号码,但这三个字段与部门无关。只有员工 ID 描述了该员工属于哪个部门。所以这意味着员工所在的部门应该在另一个表中。

这是一个简单的标准化过程。

EMPLOYEE ( < employee_id >, name, social_security, department_name)

正如所解释的,这没有标准化。标准化形式可能看起来像

EMPLOYEE ( < employee_id >, name, social_security)

这里,Employee表只负责一组数据。那么我们在哪里存储员工属于哪个部门呢?在另一个表中

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

这不是最佳的。如果部门名称变了怎么办? (这种情况一直在美国政府中发生)。因此最好这样做

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )

有第一范式、第二范式和第三范式。但除非你正在学习数据库课程,否则我通常只会选择我能理解的最标准化的形式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL 中的规范化 的相关文章

随机推荐

  • 在运行 Kestrel 服务器时构建 .NET Core 应用程序

    在经典的 NET 应用程序中 我会设置本地 IIS 来运行指定的应用程序 我可以构建应用程序并点击端点以立即查看更改 我不需要每次都启动调试器 我想通过使用 Kestrel 服务器的 NET core 来实现这一点 我可以通过运行来运行我的
  • Android 应用程序中的静态信息在哪里安全保存?

    在我的 Android 应用程序中 我使用很少的密钥和令牌进行身份验证和初始化 我需要存储这些静态键安全地在应用程序中的某处 同时 我也需要在代码中访问它 我知道我现在使用的 SharedPreference 和 Gradle 变量 我也尝
  • 检测对象是否可重复迭代

    Does obj iter obj 暗示obj不是可重复迭代的 反之亦然 我在文档中没有看到任何这样的措辞 但根据这条评论 https stackoverflow com questions 9884132 what exactly are
  • 具有 2 个变量、2 个 y 轴的条形图

    我有以下数据 test lt data frame group 1 10 var a rnorm n 10 mean 500 sd 20 var b runif 10 我想要一个带有 2 y 轴的条形图 一个用于 var a 一个用于 va
  • WordPress 密码哈希是如何工作的?

    我需要将 Django 系统与 WordPress 站点集成 因为在 WordPress 中用户应该能够登录 DJnago 部分 反之亦然 为此 我需要了解密码哈希在 Wordpress 中的工作原理 我可以看到wp users存储用户名和
  • 如何使用html、php在网页中显示视频

    如何使用html php 在网页中显示视频 任何示例代码 请任何人帮忙 如果您正在寻找 Flash 播放器 我建议您流动播放器 http flowplayer org 如果您正在寻找 HTML 5 视频 请前往there http hack
  • 是否可以重写派生类中的静态方法?

    我在基类中定义了一个静态方法 我想在其子类中重写该方法 这可能吗 我尝试了这个 但它没有按我的预期工作 当我创建类 B 的实例并调用其 callMe 方法时 将调用类 A 中的静态 foo 方法 public abstract class
  • Rails 3 SQLite3 布尔值 false

    我试图在 SQLite3 表中插入一个假布尔值 但它总是插入一个真值 这是我的迁移 class CreateUsers lt ActiveRecord Migration def self up create table users do
  • 通过 IMain 获取 scala repl 内的类型信息

    Intent I am 试图添加 https groups google com forum fromgroups topic scala internals DdSg qxOvyo支持 kind命令到scala questions tag
  • Xcode 警告:指定的输入编码是 Unicode (UTF-8),但文件内容显示为 Unicode (UTF-16);视为 Unicode (UTF-16)

    我使用以下命令创建 strings 文件genstrings命令 该命令的输出文件使用 UTF 16 编码 但是当我将生成的 strings 文件添加到我的项目中然后 bild 时 Xcode 显示警告 指定的输入编码为 Unicode U
  • express.Router() 返回未定义

    我正在尝试设置一个在我的 node js HTTP 服务器上运行的 REST API 对于常规调用 我希望路径是 对于 API 调用 我想使用 API 根据我从各个网页收集到的信息 包括http expressjs com guide ro
  • 将图像添加到表格单元格 (iOS)

    我正在尝试做一些类似于 Twitter 或 Facebook 的事情 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath ind
  • 如何使用 Java (J2SE) 创建 QRCode

    如何使用普通j2se创建QRcode图像 有任何 API 或类可以用来执行此操作吗 为此 您需要下载以下 jar zxing core 1 7 jar zxing javase 1 7 jar from http code google c
  • 有没有办法在for循环中添加多个条件?

    n int raw input enter the number of mcnuggets you want to buy total number of mcnuggets you want yo buy for a in range 1
  • JS 字符串:替换为正则表达式中的索引

    我对正则表达式几乎没有经验 我想知道如何替换由正则表达式标识的字符串中的部分 其中索引是标识部分的一部分 这是我的示例字符串 let exampleStr How do I 0 the n with the 1 in my array 这是
  • 启用 nginx 分块传输编码

    看起来像nginx 0 8 35 可能支持分块传输编码 http nginx org en CHANGES 2010 年 4 月 1 日 nginx 0 8 35 的变化 Change now the charset filter runs
  • 项目参考与文件参考?

    可以通过两种方式在项目中添加引用 项目参考 文件参考 但是 什么时候使用 Project 什么时候使用 File 引用 您没有指定 但我猜您指的是 Visual Studio 项目引用和文件引用之间的主要区别在于是否提供实时更新 在项目参考
  • SASS中有多行吗? [复制]

    这个问题在这里已经有答案了 我无法从 SASS 文档中弄清楚这一点 例如我想使用带有 5 个参数的 Compass mixin link colors normal hover false active false visited fals
  • 如何在Meteor服务器中获取用户IP地址?

    我想在我的流星应用程序中的服务器端获取用户IP地址 以便我可以用一堆东西记录IP地址 例如 订阅邮件列表的非注册用户 或者只是做任何事情 重要的 我知道 当涉及反向代理时 服务器 看到 的 IP 地址可能与真实源地址不同 在这种情况下 X
  • MYSQL 中的规范化

    MySQL 中的规范化是什么 在什么情况下以及如何使用它 我尝试在这里用外行术语来解释标准化 首先 它适用于关系数据库 Oracle Access MySQL 因此它不仅仅适用于 MySQL 规范化是为了确保每个表具有唯一的最小字段并消除依